formulab 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (508) hide show
  1. package/CHANGELOG.md +144 -0
  2. package/LICENSE +21 -0
  3. package/README.md +403 -0
  4. package/dist/automotive/batteryRuntime.d.ts +14 -0
  5. package/dist/automotive/batteryRuntime.d.ts.map +1 -0
  6. package/dist/automotive/batteryRuntime.js +38 -0
  7. package/dist/automotive/batteryRuntime.js.map +1 -0
  8. package/dist/automotive/evCharging.d.ts +14 -0
  9. package/dist/automotive/evCharging.d.ts.map +1 -0
  10. package/dist/automotive/evCharging.js +48 -0
  11. package/dist/automotive/evCharging.js.map +1 -0
  12. package/dist/automotive/fuelEconomy.d.ts +15 -0
  13. package/dist/automotive/fuelEconomy.d.ts.map +1 -0
  14. package/dist/automotive/fuelEconomy.js +61 -0
  15. package/dist/automotive/fuelEconomy.js.map +1 -0
  16. package/dist/automotive/gearRatio.d.ts +15 -0
  17. package/dist/automotive/gearRatio.d.ts.map +1 -0
  18. package/dist/automotive/gearRatio.js +39 -0
  19. package/dist/automotive/gearRatio.js.map +1 -0
  20. package/dist/automotive/index.d.ts +9 -0
  21. package/dist/automotive/index.d.ts.map +1 -0
  22. package/dist/automotive/index.js +9 -0
  23. package/dist/automotive/index.js.map +1 -0
  24. package/dist/automotive/power.d.ts +14 -0
  25. package/dist/automotive/power.d.ts.map +1 -0
  26. package/dist/automotive/power.js +52 -0
  27. package/dist/automotive/power.js.map +1 -0
  28. package/dist/automotive/tireCompare.d.ts +9 -0
  29. package/dist/automotive/tireCompare.d.ts.map +1 -0
  30. package/dist/automotive/tireCompare.js +54 -0
  31. package/dist/automotive/tireCompare.js.map +1 -0
  32. package/dist/automotive/torque.d.ts +14 -0
  33. package/dist/automotive/torque.d.ts.map +1 -0
  34. package/dist/automotive/torque.js +52 -0
  35. package/dist/automotive/torque.js.map +1 -0
  36. package/dist/automotive/types.d.ts +114 -0
  37. package/dist/automotive/types.d.ts.map +1 -0
  38. package/dist/automotive/types.js +2 -0
  39. package/dist/automotive/types.js.map +1 -0
  40. package/dist/chemical/batch.d.ts +12 -0
  41. package/dist/chemical/batch.d.ts.map +1 -0
  42. package/dist/chemical/batch.js +36 -0
  43. package/dist/chemical/batch.js.map +1 -0
  44. package/dist/chemical/concentration.d.ts +15 -0
  45. package/dist/chemical/concentration.d.ts.map +1 -0
  46. package/dist/chemical/concentration.js +45 -0
  47. package/dist/chemical/concentration.js.map +1 -0
  48. package/dist/chemical/dilution.d.ts +12 -0
  49. package/dist/chemical/dilution.d.ts.map +1 -0
  50. package/dist/chemical/dilution.js +68 -0
  51. package/dist/chemical/dilution.js.map +1 -0
  52. package/dist/chemical/index.d.ts +9 -0
  53. package/dist/chemical/index.d.ts.map +1 -0
  54. package/dist/chemical/index.js +9 -0
  55. package/dist/chemical/index.js.map +1 -0
  56. package/dist/chemical/injectionCycle.d.ts +19 -0
  57. package/dist/chemical/injectionCycle.d.ts.map +1 -0
  58. package/dist/chemical/injectionCycle.js +170 -0
  59. package/dist/chemical/injectionCycle.js.map +1 -0
  60. package/dist/chemical/ph.d.ts +13 -0
  61. package/dist/chemical/ph.d.ts.map +1 -0
  62. package/dist/chemical/ph.js +83 -0
  63. package/dist/chemical/ph.js.map +1 -0
  64. package/dist/chemical/reactor.d.ts +19 -0
  65. package/dist/chemical/reactor.d.ts.map +1 -0
  66. package/dist/chemical/reactor.js +57 -0
  67. package/dist/chemical/reactor.js.map +1 -0
  68. package/dist/chemical/shelfLife.d.ts +15 -0
  69. package/dist/chemical/shelfLife.d.ts.map +1 -0
  70. package/dist/chemical/shelfLife.js +36 -0
  71. package/dist/chemical/shelfLife.js.map +1 -0
  72. package/dist/chemical/types.d.ts +144 -0
  73. package/dist/chemical/types.d.ts.map +1 -0
  74. package/dist/chemical/types.js +2 -0
  75. package/dist/chemical/types.js.map +1 -0
  76. package/dist/construction/aggregate.d.ts +33 -0
  77. package/dist/construction/aggregate.d.ts.map +1 -0
  78. package/dist/construction/aggregate.js +92 -0
  79. package/dist/construction/aggregate.js.map +1 -0
  80. package/dist/construction/beamLoad.d.ts +12 -0
  81. package/dist/construction/beamLoad.d.ts.map +1 -0
  82. package/dist/construction/beamLoad.js +156 -0
  83. package/dist/construction/beamLoad.js.map +1 -0
  84. package/dist/construction/brick.d.ts +17 -0
  85. package/dist/construction/brick.d.ts.map +1 -0
  86. package/dist/construction/brick.js +53 -0
  87. package/dist/construction/brick.js.map +1 -0
  88. package/dist/construction/concreteMix.d.ts +9 -0
  89. package/dist/construction/concreteMix.d.ts.map +1 -0
  90. package/dist/construction/concreteMix.js +31 -0
  91. package/dist/construction/concreteMix.js.map +1 -0
  92. package/dist/construction/earthwork.d.ts +13 -0
  93. package/dist/construction/earthwork.d.ts.map +1 -0
  94. package/dist/construction/earthwork.js +25 -0
  95. package/dist/construction/earthwork.js.map +1 -0
  96. package/dist/construction/formwork.d.ts +9 -0
  97. package/dist/construction/formwork.d.ts.map +1 -0
  98. package/dist/construction/formwork.js +61 -0
  99. package/dist/construction/formwork.js.map +1 -0
  100. package/dist/construction/index.d.ts +13 -0
  101. package/dist/construction/index.d.ts.map +1 -0
  102. package/dist/construction/index.js +13 -0
  103. package/dist/construction/index.js.map +1 -0
  104. package/dist/construction/pert.d.ts +15 -0
  105. package/dist/construction/pert.d.ts.map +1 -0
  106. package/dist/construction/pert.js +207 -0
  107. package/dist/construction/pert.js.map +1 -0
  108. package/dist/construction/rebar.d.ts +16 -0
  109. package/dist/construction/rebar.d.ts.map +1 -0
  110. package/dist/construction/rebar.js +43 -0
  111. package/dist/construction/rebar.js.map +1 -0
  112. package/dist/construction/roof.d.ts +16 -0
  113. package/dist/construction/roof.d.ts.map +1 -0
  114. package/dist/construction/roof.js +65 -0
  115. package/dist/construction/roof.js.map +1 -0
  116. package/dist/construction/slope.d.ts +14 -0
  117. package/dist/construction/slope.d.ts.map +1 -0
  118. package/dist/construction/slope.js +54 -0
  119. package/dist/construction/slope.js.map +1 -0
  120. package/dist/construction/stair.d.ts +17 -0
  121. package/dist/construction/stair.d.ts.map +1 -0
  122. package/dist/construction/stair.js +69 -0
  123. package/dist/construction/stair.js.map +1 -0
  124. package/dist/construction/types.d.ts +219 -0
  125. package/dist/construction/types.d.ts.map +1 -0
  126. package/dist/construction/types.js +2 -0
  127. package/dist/construction/types.js.map +1 -0
  128. package/dist/electronics/awg.d.ts +9 -0
  129. package/dist/electronics/awg.d.ts.map +1 -0
  130. package/dist/electronics/awg.js +66 -0
  131. package/dist/electronics/awg.js.map +1 -0
  132. package/dist/electronics/capacitor.d.ts +9 -0
  133. package/dist/electronics/capacitor.d.ts.map +1 -0
  134. package/dist/electronics/capacitor.js +51 -0
  135. package/dist/electronics/capacitor.js.map +1 -0
  136. package/dist/electronics/index.d.ts +12 -0
  137. package/dist/electronics/index.d.ts.map +1 -0
  138. package/dist/electronics/index.js +12 -0
  139. package/dist/electronics/index.js.map +1 -0
  140. package/dist/electronics/led.d.ts +9 -0
  141. package/dist/electronics/led.d.ts.map +1 -0
  142. package/dist/electronics/led.js +72 -0
  143. package/dist/electronics/led.js.map +1 -0
  144. package/dist/electronics/reflow.d.ts +12 -0
  145. package/dist/electronics/reflow.d.ts.map +1 -0
  146. package/dist/electronics/reflow.js +77 -0
  147. package/dist/electronics/reflow.js.map +1 -0
  148. package/dist/electronics/resistor.d.ts +8 -0
  149. package/dist/electronics/resistor.d.ts.map +1 -0
  150. package/dist/electronics/resistor.js +137 -0
  151. package/dist/electronics/resistor.js.map +1 -0
  152. package/dist/electronics/smt-takt.d.ts +8 -0
  153. package/dist/electronics/smt-takt.d.ts.map +1 -0
  154. package/dist/electronics/smt-takt.js +59 -0
  155. package/dist/electronics/smt-takt.js.map +1 -0
  156. package/dist/electronics/solder.d.ts +8 -0
  157. package/dist/electronics/solder.d.ts.map +1 -0
  158. package/dist/electronics/solder.js +46 -0
  159. package/dist/electronics/solder.js.map +1 -0
  160. package/dist/electronics/stencil.d.ts +9 -0
  161. package/dist/electronics/stencil.d.ts.map +1 -0
  162. package/dist/electronics/stencil.js +78 -0
  163. package/dist/electronics/stencil.js.map +1 -0
  164. package/dist/electronics/trace.d.ts +8 -0
  165. package/dist/electronics/trace.d.ts.map +1 -0
  166. package/dist/electronics/trace.js +75 -0
  167. package/dist/electronics/trace.js.map +1 -0
  168. package/dist/electronics/types.d.ts +145 -0
  169. package/dist/electronics/types.d.ts.map +1 -0
  170. package/dist/electronics/types.js +2 -0
  171. package/dist/electronics/types.js.map +1 -0
  172. package/dist/electronics/via.d.ts +12 -0
  173. package/dist/electronics/via.d.ts.map +1 -0
  174. package/dist/electronics/via.js +63 -0
  175. package/dist/electronics/via.js.map +1 -0
  176. package/dist/energy/carbonFootprint.d.ts +13 -0
  177. package/dist/energy/carbonFootprint.d.ts.map +1 -0
  178. package/dist/energy/carbonFootprint.js +41 -0
  179. package/dist/energy/carbonFootprint.js.map +1 -0
  180. package/dist/energy/compressedAirCost.d.ts +14 -0
  181. package/dist/energy/compressedAirCost.d.ts.map +1 -0
  182. package/dist/energy/compressedAirCost.js +39 -0
  183. package/dist/energy/compressedAirCost.js.map +1 -0
  184. package/dist/energy/index.d.ts +8 -0
  185. package/dist/energy/index.d.ts.map +1 -0
  186. package/dist/energy/index.js +8 -0
  187. package/dist/energy/index.js.map +1 -0
  188. package/dist/energy/motorEfficiency.d.ts +14 -0
  189. package/dist/energy/motorEfficiency.d.ts.map +1 -0
  190. package/dist/energy/motorEfficiency.js +47 -0
  191. package/dist/energy/motorEfficiency.js.map +1 -0
  192. package/dist/energy/pfCorrection.d.ts +15 -0
  193. package/dist/energy/pfCorrection.d.ts.map +1 -0
  194. package/dist/energy/pfCorrection.js +56 -0
  195. package/dist/energy/pfCorrection.js.map +1 -0
  196. package/dist/energy/powerCost.d.ts +15 -0
  197. package/dist/energy/powerCost.d.ts.map +1 -0
  198. package/dist/energy/powerCost.js +37 -0
  199. package/dist/energy/powerCost.js.map +1 -0
  200. package/dist/energy/types.d.ts +119 -0
  201. package/dist/energy/types.d.ts.map +1 -0
  202. package/dist/energy/types.js +2 -0
  203. package/dist/energy/types.js.map +1 -0
  204. package/dist/energy/vfdSavings.d.ts +16 -0
  205. package/dist/energy/vfdSavings.d.ts.map +1 -0
  206. package/dist/energy/vfdSavings.js +57 -0
  207. package/dist/energy/vfdSavings.js.map +1 -0
  208. package/dist/food/calorie.d.ts +13 -0
  209. package/dist/food/calorie.d.ts.map +1 -0
  210. package/dist/food/calorie.js +42 -0
  211. package/dist/food/calorie.js.map +1 -0
  212. package/dist/food/expiry.d.ts +13 -0
  213. package/dist/food/expiry.d.ts.map +1 -0
  214. package/dist/food/expiry.js +58 -0
  215. package/dist/food/expiry.js.map +1 -0
  216. package/dist/food/haccp.d.ts +18 -0
  217. package/dist/food/haccp.d.ts.map +1 -0
  218. package/dist/food/haccp.js +70 -0
  219. package/dist/food/haccp.js.map +1 -0
  220. package/dist/food/index.d.ts +6 -0
  221. package/dist/food/index.d.ts.map +1 -0
  222. package/dist/food/index.js +6 -0
  223. package/dist/food/index.js.map +1 -0
  224. package/dist/food/nutrition.d.ts +12 -0
  225. package/dist/food/nutrition.d.ts.map +1 -0
  226. package/dist/food/nutrition.js +75 -0
  227. package/dist/food/nutrition.js.map +1 -0
  228. package/dist/food/types.d.ts +104 -0
  229. package/dist/food/types.d.ts.map +1 -0
  230. package/dist/food/types.js +2 -0
  231. package/dist/food/types.js.map +1 -0
  232. package/dist/index.d.ts +7 -0
  233. package/dist/index.d.ts.map +1 -0
  234. package/dist/index.js +9 -0
  235. package/dist/index.js.map +1 -0
  236. package/dist/logistics/cbm.d.ts +12 -0
  237. package/dist/logistics/cbm.d.ts.map +1 -0
  238. package/dist/logistics/cbm.js +37 -0
  239. package/dist/logistics/cbm.js.map +1 -0
  240. package/dist/logistics/containerFit.d.ts +12 -0
  241. package/dist/logistics/containerFit.d.ts.map +1 -0
  242. package/dist/logistics/containerFit.js +73 -0
  243. package/dist/logistics/containerFit.js.map +1 -0
  244. package/dist/logistics/dimWeight.d.ts +13 -0
  245. package/dist/logistics/dimWeight.d.ts.map +1 -0
  246. package/dist/logistics/dimWeight.js +50 -0
  247. package/dist/logistics/dimWeight.js.map +1 -0
  248. package/dist/logistics/eoq.d.ts +18 -0
  249. package/dist/logistics/eoq.d.ts.map +1 -0
  250. package/dist/logistics/eoq.js +42 -0
  251. package/dist/logistics/eoq.js.map +1 -0
  252. package/dist/logistics/fillRate.d.ts +22 -0
  253. package/dist/logistics/fillRate.d.ts.map +1 -0
  254. package/dist/logistics/fillRate.js +84 -0
  255. package/dist/logistics/fillRate.js.map +1 -0
  256. package/dist/logistics/freightClass.d.ts +12 -0
  257. package/dist/logistics/freightClass.d.ts.map +1 -0
  258. package/dist/logistics/freightClass.js +68 -0
  259. package/dist/logistics/freightClass.js.map +1 -0
  260. package/dist/logistics/index.d.ts +15 -0
  261. package/dist/logistics/index.d.ts.map +1 -0
  262. package/dist/logistics/index.js +15 -0
  263. package/dist/logistics/index.js.map +1 -0
  264. package/dist/logistics/kanban.d.ts +19 -0
  265. package/dist/logistics/kanban.d.ts.map +1 -0
  266. package/dist/logistics/kanban.js +48 -0
  267. package/dist/logistics/kanban.js.map +1 -0
  268. package/dist/logistics/pallet3d.d.ts +16 -0
  269. package/dist/logistics/pallet3d.d.ts.map +1 -0
  270. package/dist/logistics/pallet3d.js +380 -0
  271. package/dist/logistics/pallet3d.js.map +1 -0
  272. package/dist/logistics/palletStack.d.ts +12 -0
  273. package/dist/logistics/palletStack.d.ts.map +1 -0
  274. package/dist/logistics/palletStack.js +65 -0
  275. package/dist/logistics/palletStack.js.map +1 -0
  276. package/dist/logistics/pickTime.d.ts +17 -0
  277. package/dist/logistics/pickTime.d.ts.map +1 -0
  278. package/dist/logistics/pickTime.js +70 -0
  279. package/dist/logistics/pickTime.js.map +1 -0
  280. package/dist/logistics/safetyStock.d.ts +24 -0
  281. package/dist/logistics/safetyStock.d.ts.map +1 -0
  282. package/dist/logistics/safetyStock.js +99 -0
  283. package/dist/logistics/safetyStock.js.map +1 -0
  284. package/dist/logistics/shipping.d.ts +16 -0
  285. package/dist/logistics/shipping.d.ts.map +1 -0
  286. package/dist/logistics/shipping.js +115 -0
  287. package/dist/logistics/shipping.js.map +1 -0
  288. package/dist/logistics/tsp.d.ts +12 -0
  289. package/dist/logistics/tsp.d.ts.map +1 -0
  290. package/dist/logistics/tsp.js +166 -0
  291. package/dist/logistics/tsp.js.map +1 -0
  292. package/dist/logistics/types.d.ts +315 -0
  293. package/dist/logistics/types.d.ts.map +1 -0
  294. package/dist/logistics/types.js +5 -0
  295. package/dist/logistics/types.js.map +1 -0
  296. package/dist/metal/bearing.d.ts +11 -0
  297. package/dist/metal/bearing.d.ts.map +1 -0
  298. package/dist/metal/bearing.js +32 -0
  299. package/dist/metal/bearing.js.map +1 -0
  300. package/dist/metal/bendAllowance.d.ts +13 -0
  301. package/dist/metal/bendAllowance.d.ts.map +1 -0
  302. package/dist/metal/bendAllowance.js +75 -0
  303. package/dist/metal/bendAllowance.js.map +1 -0
  304. package/dist/metal/bolt.d.ts +32 -0
  305. package/dist/metal/bolt.d.ts.map +1 -0
  306. package/dist/metal/bolt.js +149 -0
  307. package/dist/metal/bolt.js.map +1 -0
  308. package/dist/metal/cutting.d.ts +10 -0
  309. package/dist/metal/cutting.d.ts.map +1 -0
  310. package/dist/metal/cutting.js +55 -0
  311. package/dist/metal/cutting.js.map +1 -0
  312. package/dist/metal/cuttingStock.d.ts +8 -0
  313. package/dist/metal/cuttingStock.d.ts.map +1 -0
  314. package/dist/metal/cuttingStock.js +89 -0
  315. package/dist/metal/cuttingStock.js.map +1 -0
  316. package/dist/metal/flatPattern.d.ts +12 -0
  317. package/dist/metal/flatPattern.d.ts.map +1 -0
  318. package/dist/metal/flatPattern.js +50 -0
  319. package/dist/metal/flatPattern.js.map +1 -0
  320. package/dist/metal/gear.d.ts +13 -0
  321. package/dist/metal/gear.d.ts.map +1 -0
  322. package/dist/metal/gear.js +79 -0
  323. package/dist/metal/gear.js.map +1 -0
  324. package/dist/metal/hardness.d.ts +15 -0
  325. package/dist/metal/hardness.d.ts.map +1 -0
  326. package/dist/metal/hardness.js +77 -0
  327. package/dist/metal/hardness.js.map +1 -0
  328. package/dist/metal/index.d.ts +24 -0
  329. package/dist/metal/index.d.ts.map +1 -0
  330. package/dist/metal/index.js +24 -0
  331. package/dist/metal/index.js.map +1 -0
  332. package/dist/metal/kFactorReverse.d.ts +19 -0
  333. package/dist/metal/kFactorReverse.d.ts.map +1 -0
  334. package/dist/metal/kFactorReverse.js +39 -0
  335. package/dist/metal/kFactorReverse.js.map +1 -0
  336. package/dist/metal/material.d.ts +5 -0
  337. package/dist/metal/material.d.ts.map +1 -0
  338. package/dist/metal/material.js +56 -0
  339. package/dist/metal/material.js.map +1 -0
  340. package/dist/metal/metalWeight.d.ts +10 -0
  341. package/dist/metal/metalWeight.d.ts.map +1 -0
  342. package/dist/metal/metalWeight.js +82 -0
  343. package/dist/metal/metalWeight.js.map +1 -0
  344. package/dist/metal/pressFit.d.ts +15 -0
  345. package/dist/metal/pressFit.d.ts.map +1 -0
  346. package/dist/metal/pressFit.js +96 -0
  347. package/dist/metal/pressFit.js.map +1 -0
  348. package/dist/metal/pressTonnage.d.ts +13 -0
  349. package/dist/metal/pressTonnage.d.ts.map +1 -0
  350. package/dist/metal/pressTonnage.js +86 -0
  351. package/dist/metal/pressTonnage.js.map +1 -0
  352. package/dist/metal/roughness.d.ts +6 -0
  353. package/dist/metal/roughness.d.ts.map +1 -0
  354. package/dist/metal/roughness.js +62 -0
  355. package/dist/metal/roughness.js.map +1 -0
  356. package/dist/metal/screw.d.ts +7 -0
  357. package/dist/metal/screw.d.ts.map +1 -0
  358. package/dist/metal/screw.js +44 -0
  359. package/dist/metal/screw.js.map +1 -0
  360. package/dist/metal/spring.d.ts +11 -0
  361. package/dist/metal/spring.d.ts.map +1 -0
  362. package/dist/metal/spring.js +59 -0
  363. package/dist/metal/spring.js.map +1 -0
  364. package/dist/metal/tap.d.ts +16 -0
  365. package/dist/metal/tap.d.ts.map +1 -0
  366. package/dist/metal/tap.js +62 -0
  367. package/dist/metal/tap.js.map +1 -0
  368. package/dist/metal/thread.d.ts +8 -0
  369. package/dist/metal/thread.d.ts.map +1 -0
  370. package/dist/metal/thread.js +75 -0
  371. package/dist/metal/thread.js.map +1 -0
  372. package/dist/metal/tolerance.d.ts +6 -0
  373. package/dist/metal/tolerance.d.ts.map +1 -0
  374. package/dist/metal/tolerance.js +113 -0
  375. package/dist/metal/tolerance.js.map +1 -0
  376. package/dist/metal/types.d.ts +494 -0
  377. package/dist/metal/types.d.ts.map +1 -0
  378. package/dist/metal/types.js +2 -0
  379. package/dist/metal/types.js.map +1 -0
  380. package/dist/metal/vibration.d.ts +6 -0
  381. package/dist/metal/vibration.d.ts.map +1 -0
  382. package/dist/metal/vibration.js +153 -0
  383. package/dist/metal/vibration.js.map +1 -0
  384. package/dist/metal/weldHeat.d.ts +6 -0
  385. package/dist/metal/weldHeat.d.ts.map +1 -0
  386. package/dist/metal/weldHeat.js +138 -0
  387. package/dist/metal/weldHeat.js.map +1 -0
  388. package/dist/metal/welding.d.ts +6 -0
  389. package/dist/metal/welding.d.ts.map +1 -0
  390. package/dist/metal/welding.js +80 -0
  391. package/dist/metal/welding.js.map +1 -0
  392. package/dist/quality/aql.d.ts +10 -0
  393. package/dist/quality/aql.d.ts.map +1 -0
  394. package/dist/quality/aql.js +104 -0
  395. package/dist/quality/aql.js.map +1 -0
  396. package/dist/quality/cpk.d.ts +14 -0
  397. package/dist/quality/cpk.d.ts.map +1 -0
  398. package/dist/quality/cpk.js +44 -0
  399. package/dist/quality/cpk.js.map +1 -0
  400. package/dist/quality/cycle.d.ts +11 -0
  401. package/dist/quality/cycle.d.ts.map +1 -0
  402. package/dist/quality/cycle.js +55 -0
  403. package/dist/quality/cycle.js.map +1 -0
  404. package/dist/quality/downtime.d.ts +9 -0
  405. package/dist/quality/downtime.d.ts.map +1 -0
  406. package/dist/quality/downtime.js +28 -0
  407. package/dist/quality/downtime.js.map +1 -0
  408. package/dist/quality/dpmo.d.ts +10 -0
  409. package/dist/quality/dpmo.d.ts.map +1 -0
  410. package/dist/quality/dpmo.js +114 -0
  411. package/dist/quality/dpmo.js.map +1 -0
  412. package/dist/quality/index.d.ts +15 -0
  413. package/dist/quality/index.d.ts.map +1 -0
  414. package/dist/quality/index.js +15 -0
  415. package/dist/quality/index.js.map +1 -0
  416. package/dist/quality/lineBalancing.d.ts +9 -0
  417. package/dist/quality/lineBalancing.d.ts.map +1 -0
  418. package/dist/quality/lineBalancing.js +185 -0
  419. package/dist/quality/lineBalancing.js.map +1 -0
  420. package/dist/quality/mtbf.d.ts +13 -0
  421. package/dist/quality/mtbf.d.ts.map +1 -0
  422. package/dist/quality/mtbf.js +48 -0
  423. package/dist/quality/mtbf.js.map +1 -0
  424. package/dist/quality/oee.d.ts +11 -0
  425. package/dist/quality/oee.d.ts.map +1 -0
  426. package/dist/quality/oee.js +43 -0
  427. package/dist/quality/oee.js.map +1 -0
  428. package/dist/quality/ppk.d.ts +15 -0
  429. package/dist/quality/ppk.d.ts.map +1 -0
  430. package/dist/quality/ppk.js +61 -0
  431. package/dist/quality/ppk.js.map +1 -0
  432. package/dist/quality/ppm.d.ts +9 -0
  433. package/dist/quality/ppm.d.ts.map +1 -0
  434. package/dist/quality/ppm.js +134 -0
  435. package/dist/quality/ppm.js.map +1 -0
  436. package/dist/quality/rpn.d.ts +11 -0
  437. package/dist/quality/rpn.d.ts.map +1 -0
  438. package/dist/quality/rpn.js +48 -0
  439. package/dist/quality/rpn.js.map +1 -0
  440. package/dist/quality/takt.d.ts +13 -0
  441. package/dist/quality/takt.d.ts.map +1 -0
  442. package/dist/quality/takt.js +44 -0
  443. package/dist/quality/takt.js.map +1 -0
  444. package/dist/quality/types.d.ts +261 -0
  445. package/dist/quality/types.d.ts.map +1 -0
  446. package/dist/quality/types.js +2 -0
  447. package/dist/quality/types.js.map +1 -0
  448. package/dist/quality/yield.d.ts +12 -0
  449. package/dist/quality/yield.d.ts.map +1 -0
  450. package/dist/quality/yield.js +56 -0
  451. package/dist/quality/yield.js.map +1 -0
  452. package/dist/safety/fallClearance.d.ts +12 -0
  453. package/dist/safety/fallClearance.d.ts.map +1 -0
  454. package/dist/safety/fallClearance.js +37 -0
  455. package/dist/safety/fallClearance.js.map +1 -0
  456. package/dist/safety/havsCalculate.d.ts +16 -0
  457. package/dist/safety/havsCalculate.d.ts.map +1 -0
  458. package/dist/safety/havsCalculate.js +103 -0
  459. package/dist/safety/havsCalculate.js.map +1 -0
  460. package/dist/safety/index.d.ts +8 -0
  461. package/dist/safety/index.d.ts.map +1 -0
  462. package/dist/safety/index.js +8 -0
  463. package/dist/safety/index.js.map +1 -0
  464. package/dist/safety/nioshLifting.d.ts +21 -0
  465. package/dist/safety/nioshLifting.d.ts.map +1 -0
  466. package/dist/safety/nioshLifting.js +164 -0
  467. package/dist/safety/nioshLifting.js.map +1 -0
  468. package/dist/safety/noiseExposure.d.ts +22 -0
  469. package/dist/safety/noiseExposure.d.ts.map +1 -0
  470. package/dist/safety/noiseExposure.js +76 -0
  471. package/dist/safety/noiseExposure.js.map +1 -0
  472. package/dist/safety/respiratorCalculate.d.ts +14 -0
  473. package/dist/safety/respiratorCalculate.d.ts.map +1 -0
  474. package/dist/safety/respiratorCalculate.js +90 -0
  475. package/dist/safety/respiratorCalculate.js.map +1 -0
  476. package/dist/safety/types.d.ts +93 -0
  477. package/dist/safety/types.d.ts.map +1 -0
  478. package/dist/safety/types.js +2 -0
  479. package/dist/safety/types.js.map +1 -0
  480. package/dist/safety/wbgtCalculate.d.ts +25 -0
  481. package/dist/safety/wbgtCalculate.d.ts.map +1 -0
  482. package/dist/safety/wbgtCalculate.js +65 -0
  483. package/dist/safety/wbgtCalculate.js.map +1 -0
  484. package/dist/utility/assignment.d.ts +11 -0
  485. package/dist/utility/assignment.d.ts.map +1 -0
  486. package/dist/utility/assignment.js +113 -0
  487. package/dist/utility/assignment.js.map +1 -0
  488. package/dist/utility/index.d.ts +4 -0
  489. package/dist/utility/index.d.ts.map +1 -0
  490. package/dist/utility/index.js +4 -0
  491. package/dist/utility/index.js.map +1 -0
  492. package/dist/utility/qrcode.d.ts +30 -0
  493. package/dist/utility/qrcode.d.ts.map +1 -0
  494. package/dist/utility/qrcode.js +30 -0
  495. package/dist/utility/qrcode.js.map +1 -0
  496. package/dist/utility/types.d.ts +64 -0
  497. package/dist/utility/types.d.ts.map +1 -0
  498. package/dist/utility/types.js +2 -0
  499. package/dist/utility/types.js.map +1 -0
  500. package/dist/utility/unit.d.ts +25 -0
  501. package/dist/utility/unit.d.ts.map +1 -0
  502. package/dist/utility/unit.js +136 -0
  503. package/dist/utility/unit.js.map +1 -0
  504. package/dist/utils.d.ts +9 -0
  505. package/dist/utils.d.ts.map +1 -0
  506. package/dist/utils.js +12 -0
  507. package/dist/utils.js.map +1 -0
  508. package/package.json +117 -0
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Calculate fall clearance requirements for personal fall protection systems.
3
+ *
4
+ * Total Fall Distance = Lanyard Length + Deceleration Distance + Harness Stretch + Worker Height + Safety Factor
5
+ * Minimum Height = Total Fall Distance - Anchor Height
6
+ *
7
+ * @param input - Fall clearance parameters
8
+ * @returns Fall clearance results including total fall distance and minimum height
9
+ */
10
+ export function fallClearance(input) {
11
+ const { lanyardLength, decelerationDistance, harnessStretch, workerHeight, safetyFactor, anchorHeight, } = input;
12
+ // Calculate total fall distance (all components that contribute to the fall)
13
+ const totalFallDistance = lanyardLength +
14
+ decelerationDistance +
15
+ harnessStretch +
16
+ workerHeight +
17
+ safetyFactor;
18
+ // Minimum height is total fall distance minus anchor height above feet
19
+ const minimumHeight = totalFallDistance - anchorHeight;
20
+ // Determine if the system is adequate
21
+ // isAdequate is true if anchor is elevated enough to reduce risk
22
+ // isAdequate is false if anchor is at foot level or below (no reduction)
23
+ // isAdequate is null if cannot be determined (edge cases)
24
+ let isAdequate = null;
25
+ if (anchorHeight > 0) {
26
+ isAdequate = true;
27
+ }
28
+ else if (anchorHeight <= 0) {
29
+ isAdequate = false;
30
+ }
31
+ return {
32
+ totalFallDistance,
33
+ minimumHeight,
34
+ isAdequate,
35
+ };
36
+ }
37
+ //# sourceMappingURL=fallClearance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fallClearance.js","sourceRoot":"","sources":["../../src/safety/fallClearance.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,EACJ,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,YAAY,GACb,GAAG,KAAK,CAAC;IAEV,6EAA6E;IAC7E,MAAM,iBAAiB,GACrB,aAAa;QACb,oBAAoB;QACpB,cAAc;QACd,YAAY;QACZ,YAAY,CAAC;IAEf,uEAAuE;IACvE,MAAM,aAAa,GAAG,iBAAiB,GAAG,YAAY,CAAC;IAEvD,sCAAsC;IACtC,iEAAiE;IACjE,yEAAyE;IACzE,0DAA0D;IAC1D,IAAI,UAAU,GAAmB,IAAI,CAAC;IACtC,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;SAAM,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;QAC7B,UAAU,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,OAAO;QACL,iBAAiB;QACjB,aAAa;QACb,UAAU;KACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { HavsInput, HavsResult } from './types.js';
2
+ /**
3
+ * Calculate Hand-Arm Vibration exposure based on ISO 5349 and EU Physical Agents Directive 2002/44/EC.
4
+ *
5
+ * A(8) = sqrt(sum(A_partial²))
6
+ * Where A_partial = a_hv × sqrt(T / T0)
7
+ *
8
+ * Exposure Limits:
9
+ * - EAV (Exposure Action Value) = 2.5 m/s²
10
+ * - ELV (Exposure Limit Value) = 5.0 m/s²
11
+ *
12
+ * @param input - HAVS input parameters with tool exposures
13
+ * @returns HAVS results including A(8), status, and exposure metrics
14
+ */
15
+ export declare function havsCalculate(input: HavsInput): HavsResult;
16
+ //# sourceMappingURL=havsCalculate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"havsCalculate.d.ts","sourceRoot":"","sources":["../../src/safety/havsCalculate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAgB,MAAM,YAAY,CAAC;AAyEtE;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAkC1D"}
@@ -0,0 +1,103 @@
1
+ // Exposure Action Value (EAV) = 2.5 m/s²
2
+ const EAV = 2.5;
3
+ // Exposure Limit Value (ELV) = 5.0 m/s²
4
+ const ELV = 5.0;
5
+ // Reference period T0 = 8 hours
6
+ const T0 = 8;
7
+ /**
8
+ * Calculate partial A(8) exposure for a single tool
9
+ * Formula: A_partial = a_hv × sqrt(T / T0)
10
+ * Where:
11
+ * - a_hv = vibration magnitude (m/s²)
12
+ * - T = exposure time (hours)
13
+ * - T0 = reference period (8 hours)
14
+ */
15
+ function calculatePartialExposure(tool) {
16
+ const { vibrationMagnitude, exposureTime } = tool;
17
+ if (vibrationMagnitude <= 0 || exposureTime <= 0)
18
+ return 0;
19
+ return vibrationMagnitude * Math.sqrt(exposureTime / T0);
20
+ }
21
+ /**
22
+ * Calculate total daily A(8) exposure from multiple tools
23
+ * Formula: A(8) = sqrt(sum(A_partial²))
24
+ */
25
+ function calculateTotalA8(partialExposures) {
26
+ const sumOfSquares = partialExposures.reduce((sum, a) => sum + a * a, 0);
27
+ return Math.sqrt(sumOfSquares);
28
+ }
29
+ /**
30
+ * Calculate exposure points (100 points = EAV)
31
+ * Formula: points = (A(8) / EAV)² × 100
32
+ */
33
+ function calculateExposurePoints(a8) {
34
+ return Math.pow(a8 / EAV, 2) * 100;
35
+ }
36
+ /**
37
+ * Determine exposure status based on A(8) value
38
+ */
39
+ function determineStatus(a8) {
40
+ if (a8 >= ELV)
41
+ return 'limit';
42
+ if (a8 >= EAV)
43
+ return 'action';
44
+ return 'safe';
45
+ }
46
+ /**
47
+ * Calculate maximum safe daily exposure time at current weighted average vibration level
48
+ * Formula: T_max = T0 × (EAV / a_avg)²
49
+ * Where a_avg is the weighted average vibration magnitude
50
+ */
51
+ function calculateMaxDailyExposure(tools) {
52
+ const totalTime = tools.reduce((sum, t) => sum + t.exposureTime, 0);
53
+ if (totalTime <= 0)
54
+ return T0;
55
+ // Calculate time-weighted average vibration magnitude squared
56
+ const sumVibSquaredTime = tools.reduce((sum, t) => sum + t.vibrationMagnitude * t.vibrationMagnitude * t.exposureTime, 0);
57
+ const avgVibSquared = sumVibSquaredTime / totalTime;
58
+ if (avgVibSquared <= 0)
59
+ return T0;
60
+ // T_max = T0 × (EAV² / a_avg²)
61
+ return T0 * (EAV * EAV) / avgVibSquared;
62
+ }
63
+ /**
64
+ * Calculate Hand-Arm Vibration exposure based on ISO 5349 and EU Physical Agents Directive 2002/44/EC.
65
+ *
66
+ * A(8) = sqrt(sum(A_partial²))
67
+ * Where A_partial = a_hv × sqrt(T / T0)
68
+ *
69
+ * Exposure Limits:
70
+ * - EAV (Exposure Action Value) = 2.5 m/s²
71
+ * - ELV (Exposure Limit Value) = 5.0 m/s²
72
+ *
73
+ * @param input - HAVS input parameters with tool exposures
74
+ * @returns HAVS results including A(8), status, and exposure metrics
75
+ */
76
+ export function havsCalculate(input) {
77
+ const { tools } = input;
78
+ // Filter out empty entries
79
+ const validTools = tools.filter(t => t.vibrationMagnitude > 0 && t.exposureTime > 0);
80
+ // Calculate partial exposures for each tool
81
+ const partialExposures = validTools.map(calculatePartialExposure);
82
+ // Calculate total A(8)
83
+ const a8 = calculateTotalA8(partialExposures);
84
+ // Calculate percentages of limits
85
+ const percentEAV = (a8 / EAV) * 100;
86
+ const percentELV = (a8 / ELV) * 100;
87
+ // Calculate exposure points
88
+ const exposurePoints = calculateExposurePoints(a8);
89
+ // Determine status
90
+ const status = determineStatus(a8);
91
+ // Calculate max daily exposure
92
+ const maxDailyExposure = calculateMaxDailyExposure(validTools);
93
+ return {
94
+ a8,
95
+ partialExposures,
96
+ percentEAV,
97
+ percentELV,
98
+ exposurePoints,
99
+ status,
100
+ maxDailyExposure: Math.min(maxDailyExposure, T0),
101
+ };
102
+ }
103
+ //# sourceMappingURL=havsCalculate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"havsCalculate.js","sourceRoot":"","sources":["../../src/safety/havsCalculate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export { fallClearance } from './fallClearance.js';
2
+ export { nioshLifting } from './nioshLifting.js';
3
+ export { noiseExposure } from './noiseExposure.js';
4
+ export { wbgtCalculate } from './wbgtCalculate.js';
5
+ export { havsCalculate } from './havsCalculate.js';
6
+ export { respiratorCalculate } from './respiratorCalculate.js';
7
+ export type { FallClearanceInput, FallClearanceResult, CouplingQuality, WorkDuration, NioshInput, NioshResult, NoiseExposure, NoiseExposureInput, NoiseExposureResult, WorkloadIntensity, WbgtInput, WbgtResult, ToolExposure, HavsInput, HavsResult, RespiratorType, RespiratorInput, RespiratorResult, } from './types.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/safety/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D,YAAY,EAEV,kBAAkB,EAClB,mBAAmB,EAEnB,eAAe,EACf,YAAY,EACZ,UAAU,EACV,WAAW,EAEX,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EAEnB,iBAAiB,EACjB,SAAS,EACT,UAAU,EAEV,YAAY,EACZ,SAAS,EACT,UAAU,EAEV,cAAc,EACd,eAAe,EACf,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,8 @@
1
+ // Safety domain formulas
2
+ export { fallClearance } from './fallClearance.js';
3
+ export { nioshLifting } from './nioshLifting.js';
4
+ export { noiseExposure } from './noiseExposure.js';
5
+ export { wbgtCalculate } from './wbgtCalculate.js';
6
+ export { havsCalculate } from './havsCalculate.js';
7
+ export { respiratorCalculate } from './respiratorCalculate.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/safety/index.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { NioshInput, NioshResult } from './types.js';
2
+ /**
3
+ * Calculate NIOSH Recommended Weight Limit (RWL) and Lifting Index (LI)
4
+ *
5
+ * RWL = LC x HM x VM x DM x AM x FM x CM
6
+ * LI = Load Weight / RWL
7
+ *
8
+ * Where:
9
+ * - LC = Load Constant (23 kg)
10
+ * - HM = Horizontal Multiplier = 25/H
11
+ * - VM = Vertical Multiplier = 1 - 0.003|V - 75|
12
+ * - DM = Distance Multiplier = 0.82 + 4.5/D
13
+ * - AM = Asymmetric Multiplier = 1 - 0.0032A
14
+ * - FM = Frequency Multiplier (from table)
15
+ * - CM = Coupling Multiplier (from table)
16
+ *
17
+ * @param input - NIOSH lifting parameters
18
+ * @returns NIOSH results including RWL, LI, multipliers, and risk level
19
+ */
20
+ export declare function nioshLifting(input: NioshInput): NioshResult;
21
+ //# sourceMappingURL=nioshLifting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nioshLifting.d.ts","sourceRoot":"","sources":["../../src/safety/nioshLifting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EAGZ,MAAM,YAAY,CAAC;AAoHpB;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CA4D3D"}
@@ -0,0 +1,164 @@
1
+ // NIOSH Lifting Equation constants
2
+ const LC = 23; // Load Constant in kg
3
+ // Frequency Multiplier (FM) lookup table
4
+ // Based on NIOSH 1991 Revised Lifting Equation
5
+ const FM_TABLE = {
6
+ short: {
7
+ '0.2': 1.0,
8
+ '0.5': 0.97,
9
+ '1': 0.94,
10
+ '2': 0.91,
11
+ '3': 0.88,
12
+ '4': 0.84,
13
+ '5': 0.8,
14
+ '6': 0.75,
15
+ '7': 0.7,
16
+ '8': 0.6,
17
+ '9': 0.52,
18
+ '10': 0.45,
19
+ '11': 0.41,
20
+ '12': 0.37,
21
+ '13': 0.34,
22
+ '14': 0.31,
23
+ '15': 0.28,
24
+ },
25
+ medium: {
26
+ '0.2': 0.95,
27
+ '0.5': 0.92,
28
+ '1': 0.88,
29
+ '2': 0.84,
30
+ '3': 0.79,
31
+ '4': 0.72,
32
+ '5': 0.6,
33
+ '6': 0.5,
34
+ '7': 0.42,
35
+ '8': 0.35,
36
+ '9': 0.3,
37
+ '10': 0.26,
38
+ '11': 0.23,
39
+ '12': 0.21,
40
+ '13': 0.19,
41
+ '14': 0.17,
42
+ '15': 0.15,
43
+ },
44
+ long: {
45
+ '0.2': 0.85,
46
+ '0.5': 0.81,
47
+ '1': 0.75,
48
+ '2': 0.65,
49
+ '3': 0.55,
50
+ '4': 0.45,
51
+ '5': 0.35,
52
+ '6': 0.27,
53
+ '7': 0.22,
54
+ '8': 0.18,
55
+ '9': 0.15,
56
+ '10': 0.13,
57
+ '11': 0.11,
58
+ '12': 0.1,
59
+ '13': 0.0,
60
+ '14': 0.0,
61
+ '15': 0.0,
62
+ },
63
+ };
64
+ // Coupling Multiplier (CM) lookup table
65
+ // V < 75cm and V >= 75cm
66
+ const CM_TABLE = {
67
+ good: { low: 1.0, high: 1.0 },
68
+ fair: { low: 1.0, high: 0.95 },
69
+ poor: { low: 0.9, high: 0.9 },
70
+ };
71
+ /**
72
+ * Get frequency multiplier (FM) based on frequency and duration
73
+ */
74
+ function getFrequencyMultiplier(frequency, duration) {
75
+ const table = FM_TABLE[duration];
76
+ const keys = Object.keys(table)
77
+ .map(Number)
78
+ .sort((a, b) => a - b);
79
+ // Find the closest frequency key
80
+ let closestKey = keys[0];
81
+ for (const key of keys) {
82
+ if (key <= frequency) {
83
+ closestKey = key;
84
+ }
85
+ else {
86
+ break;
87
+ }
88
+ }
89
+ // If frequency exceeds max, use last value
90
+ if (frequency > keys[keys.length - 1]) {
91
+ closestKey = keys[keys.length - 1];
92
+ }
93
+ return table[String(closestKey)];
94
+ }
95
+ /**
96
+ * Get coupling multiplier (CM) based on coupling quality and vertical position
97
+ */
98
+ function getCouplingMultiplier(coupling, verticalDistance) {
99
+ const cmValues = CM_TABLE[coupling];
100
+ return verticalDistance < 75 ? cmValues.low : cmValues.high;
101
+ }
102
+ /**
103
+ * Calculate NIOSH Recommended Weight Limit (RWL) and Lifting Index (LI)
104
+ *
105
+ * RWL = LC x HM x VM x DM x AM x FM x CM
106
+ * LI = Load Weight / RWL
107
+ *
108
+ * Where:
109
+ * - LC = Load Constant (23 kg)
110
+ * - HM = Horizontal Multiplier = 25/H
111
+ * - VM = Vertical Multiplier = 1 - 0.003|V - 75|
112
+ * - DM = Distance Multiplier = 0.82 + 4.5/D
113
+ * - AM = Asymmetric Multiplier = 1 - 0.0032A
114
+ * - FM = Frequency Multiplier (from table)
115
+ * - CM = Coupling Multiplier (from table)
116
+ *
117
+ * @param input - NIOSH lifting parameters
118
+ * @returns NIOSH results including RWL, LI, multipliers, and risk level
119
+ */
120
+ export function nioshLifting(input) {
121
+ const { horizontalDistance, verticalDistance, verticalTravel, asymmetryAngle, frequency, duration, coupling, loadWeight, } = input;
122
+ // Calculate multipliers
123
+ // HM: Horizontal Multiplier (25/H), max 1.0, H must be >= 25cm
124
+ const h = Math.max(horizontalDistance, 25);
125
+ const hm = Math.min(25 / h, 1.0);
126
+ // VM: Vertical Multiplier (1 - 0.003|V - 75|), V in cm
127
+ const vm = Math.max(0, 1 - 0.003 * Math.abs(verticalDistance - 75));
128
+ // DM: Distance Multiplier (0.82 + 4.5/D), D must be >= 25cm
129
+ const d = Math.max(verticalTravel, 25);
130
+ const dm = Math.min(0.82 + 4.5 / d, 1.0);
131
+ // AM: Asymmetric Multiplier (1 - 0.0032A), A in degrees
132
+ const am = Math.max(0, 1 - 0.0032 * asymmetryAngle);
133
+ // FM: Frequency Multiplier (from lookup table)
134
+ const fm = getFrequencyMultiplier(frequency, duration);
135
+ // CM: Coupling Multiplier (from lookup table)
136
+ const cm = getCouplingMultiplier(coupling, verticalDistance);
137
+ // Calculate RWL
138
+ const rwl = LC * hm * vm * dm * am * fm * cm;
139
+ // Calculate Lifting Index
140
+ const liftingIndex = rwl > 0 ? loadWeight / rwl : Infinity;
141
+ // Determine risk level
142
+ let riskLevel;
143
+ if (liftingIndex <= 1) {
144
+ riskLevel = 'low';
145
+ }
146
+ else if (liftingIndex <= 2) {
147
+ riskLevel = 'moderate';
148
+ }
149
+ else {
150
+ riskLevel = 'high';
151
+ }
152
+ return {
153
+ rwl,
154
+ liftingIndex,
155
+ hm,
156
+ vm,
157
+ dm,
158
+ am,
159
+ fm,
160
+ cm,
161
+ riskLevel,
162
+ };
163
+ }
164
+ //# sourceMappingURL=nioshLifting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nioshLifting.js","sourceRoot":"","sources":["../../src/safety/nioshLifting.ts"],"names":[],"mappings":"AAOA,mCAAmC;AACnC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,sBAAsB;AAErC,yCAAyC;AACzC,+CAA+C;AAC/C,MAAM,QAAQ,GAAiD;IAC7D,KAAK,EAAE;QACL,KAAK,EAAE,GAAG;QACV,KAAK,EAAE,IAAI;QACX,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,IAAI;QACT,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;KACX;IACD,MAAM,EAAE;QACN,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,IAAI;QACX,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;KACX;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,IAAI;QACX,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,IAAI;QACT,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,GAAG;QACT,IAAI,EAAE,GAAG;QACT,IAAI,EAAE,GAAG;QACT,IAAI,EAAE,GAAG;KACV;CACF,CAAC;AAEF,wCAAwC;AACxC,yBAAyB;AACzB,MAAM,QAAQ,GAA2D;IACvE,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;IAC7B,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE;IAC9B,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;CAC9B,CAAC;AAEF;;GAEG;AACH,SAAS,sBAAsB,CAC7B,SAAiB,EACjB,QAAsB;IAEtB,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;SAC5B,GAAG,CAAC,MAAM,CAAC;SACX,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAEzB,iCAAiC;IACjC,IAAI,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;YACrB,UAAU,GAAG,GAAG,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,MAAM;QACR,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QACtC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAC5B,QAAyB,EACzB,gBAAwB;IAExB,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACpC,OAAO,gBAAgB,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC9D,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,YAAY,CAAC,KAAiB;IAC5C,MAAM,EACJ,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,UAAU,GACX,GAAG,KAAK,CAAC;IAEV,wBAAwB;IACxB,+DAA+D;IAC/D,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IAEjC,uDAAuD;IACvD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC,CAAC;IAEpE,4DAA4D;IAC5D,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IACvC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IAEzC,wDAAwD;IACxD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,cAAc,CAAC,CAAC;IAEpD,+CAA+C;IAC/C,MAAM,EAAE,GAAG,sBAAsB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAEvD,8CAA8C;IAC9C,MAAM,EAAE,GAAG,qBAAqB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAE7D,gBAAgB;IAChB,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAE7C,0BAA0B;IAC1B,MAAM,YAAY,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;IAE3D,uBAAuB;IACvB,IAAI,SAAsC,CAAC;IAC3C,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;QACtB,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC;SAAM,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;QAC7B,SAAS,GAAG,UAAU,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,SAAS,GAAG,MAAM,CAAC;IACrB,CAAC;IAED,OAAO;QACL,GAAG;QACH,YAAY;QACZ,EAAE;QACF,EAAE;QACF,EAAE;QACF,EAAE;QACF,EAAE;QACF,EAAE;QACF,SAAS;KACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { NoiseExposureInput, NoiseExposureResult } from './types.js';
2
+ /**
3
+ * Calculate noise exposure dose and TWA based on OSHA standards
4
+ *
5
+ * Dose = Sum(Cn/Tn) x 100
6
+ * TWA = 16.61 x log10(D/100) + 90
7
+ *
8
+ * Where:
9
+ * - Cn = actual exposure duration at a given noise level
10
+ * - Tn = allowable exposure duration at that level
11
+ * - D = dose percentage
12
+ *
13
+ * Status thresholds:
14
+ * - compliant: dose <= 50% (action level)
15
+ * - actionRequired: 50% < dose <= 100% (PEL)
16
+ * - exceeds: dose > 100%
17
+ *
18
+ * @param input - Noise exposure input with array of exposures
19
+ * @returns Noise exposure result with dose, TWA, and status
20
+ */
21
+ export declare function noiseExposure(input: NoiseExposureInput): NoiseExposureResult;
22
+ //# sourceMappingURL=noiseExposure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noiseExposure.d.ts","sourceRoot":"","sources":["../../src/safety/noiseExposure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAkB1E;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,mBAAmB,CA0C5E"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Calculate allowable exposure time for a given sound level (OSHA formula)
3
+ * Tn = 8 / 2^((L-90)/5)
4
+ *
5
+ * @param soundLevel - Sound level in dB(A)
6
+ * @returns Allowable exposure time in hours
7
+ */
8
+ function getAllowableTime(soundLevel) {
9
+ // OSHA uses 90 dB as the reference with 5 dB exchange rate
10
+ // For levels below 80 dB, exposure is essentially unlimited
11
+ if (soundLevel < 80) {
12
+ return Infinity;
13
+ }
14
+ return 8 / Math.pow(2, (soundLevel - 90) / 5);
15
+ }
16
+ /**
17
+ * Calculate noise exposure dose and TWA based on OSHA standards
18
+ *
19
+ * Dose = Sum(Cn/Tn) x 100
20
+ * TWA = 16.61 x log10(D/100) + 90
21
+ *
22
+ * Where:
23
+ * - Cn = actual exposure duration at a given noise level
24
+ * - Tn = allowable exposure duration at that level
25
+ * - D = dose percentage
26
+ *
27
+ * Status thresholds:
28
+ * - compliant: dose <= 50% (action level)
29
+ * - actionRequired: 50% < dose <= 100% (PEL)
30
+ * - exceeds: dose > 100%
31
+ *
32
+ * @param input - Noise exposure input with array of exposures
33
+ * @returns Noise exposure result with dose, TWA, and status
34
+ */
35
+ export function noiseExposure(input) {
36
+ const { exposures } = input;
37
+ // Calculate dose as sum of (Cn/Tn)
38
+ let doseSum = 0;
39
+ for (const exposure of exposures) {
40
+ const { soundLevel, duration } = exposure;
41
+ const allowableTime = getAllowableTime(soundLevel);
42
+ if (allowableTime !== Infinity) {
43
+ doseSum += duration / allowableTime;
44
+ }
45
+ }
46
+ // Dose as percentage
47
+ const dose = doseSum * 100;
48
+ // Calculate TWA (8-hour Time Weighted Average)
49
+ // TWA = 16.61 x log10(D/100) + 90
50
+ // If dose is 0, TWA is undefined (use a low value)
51
+ let twa;
52
+ if (dose > 0) {
53
+ twa = 16.61 * Math.log10(dose / 100) + 90;
54
+ }
55
+ else {
56
+ // No significant noise exposure
57
+ twa = 0;
58
+ }
59
+ // Determine status
60
+ let status;
61
+ if (dose <= 50) {
62
+ status = 'compliant';
63
+ }
64
+ else if (dose <= 100) {
65
+ status = 'actionRequired';
66
+ }
67
+ else {
68
+ status = 'exceeds';
69
+ }
70
+ return {
71
+ dose,
72
+ twa,
73
+ status,
74
+ };
75
+ }
76
+ //# sourceMappingURL=noiseExposure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noiseExposure.js","sourceRoot":"","sources":["../../src/safety/noiseExposure.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,UAAkB;IAC1C,2DAA2D;IAC3D,4DAA4D;IAC5D,IAAI,UAAU,GAAG,EAAE,EAAE,CAAC;QACpB,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAChD,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAE5B,mCAAmC;IACnC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;QAC1C,MAAM,aAAa,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,aAAa,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,IAAI,QAAQ,GAAG,aAAa,CAAC;QACtC,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,MAAM,IAAI,GAAG,OAAO,GAAG,GAAG,CAAC;IAE3B,+CAA+C;IAC/C,kCAAkC;IAClC,mDAAmD;IACnD,IAAI,GAAW,CAAC;IAChB,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACb,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,gCAAgC;QAChC,GAAG,GAAG,CAAC,CAAC;IACV,CAAC;IAED,mBAAmB;IACnB,IAAI,MAAkD,CAAC;IACvD,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;QACf,MAAM,GAAG,WAAW,CAAC;IACvB,CAAC;SAAM,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;QACvB,MAAM,GAAG,gBAAgB,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,SAAS,CAAC;IACrB,CAAC;IAED,OAAO;QACL,IAAI;QACJ,GAAG;QACH,MAAM;KACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { RespiratorInput, RespiratorResult } from './types.js';
2
+ /**
3
+ * Calculate respirator MUC (Maximum Use Concentration) and protection factor
4
+ * based on OSHA 29 CFR 1910.134 and NIOSH respirator selection guidelines.
5
+ *
6
+ * MUC = APF × OEL
7
+ * Hazard Ratio = Concentration / OEL
8
+ * Protection is adequate when Concentration <= MUC
9
+ *
10
+ * @param input - Respirator input parameters
11
+ * @returns Respirator results including MUC, APF, and protection assessment
12
+ */
13
+ export declare function respiratorCalculate(input: RespiratorInput): RespiratorResult;
14
+ //# sourceMappingURL=respiratorCalculate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"respiratorCalculate.d.ts","sourceRoot":"","sources":["../../src/safety/respiratorCalculate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAkB,MAAM,YAAY,CAAC;AA2DpF;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CA8B5E"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * OSHA Assigned Protection Factors (APFs)
3
+ * From 29 CFR 1910.134 Table 1
4
+ */
5
+ const APF_VALUES = {
6
+ 'filtering-facepiece': 10,
7
+ 'half-mask': 10,
8
+ 'full-facepiece': 50,
9
+ 'powered-half-mask': 50,
10
+ 'powered-hood': 25,
11
+ 'powered-full-facepiece': 1000,
12
+ 'supplied-air-half': 10,
13
+ 'supplied-air-full': 50,
14
+ 'supplied-air-full-pd': 1000,
15
+ 'scba-pd': 10000,
16
+ };
17
+ /**
18
+ * Calculate Maximum Use Concentration (MUC)
19
+ * Formula: MUC = APF × OEL
20
+ *
21
+ * The MUC is the maximum concentration of a hazardous substance
22
+ * that a specific respirator can be used in.
23
+ */
24
+ function calculateMUC(apf, oel) {
25
+ return apf * oel;
26
+ }
27
+ /**
28
+ * Calculate Hazard Ratio
29
+ * Formula: HR = Concentration / OEL
30
+ *
31
+ * The hazard ratio indicates how many times the workplace
32
+ * concentration exceeds the occupational exposure limit.
33
+ */
34
+ function calculateHazardRatio(concentration, oel) {
35
+ if (oel <= 0)
36
+ return Infinity;
37
+ return concentration / oel;
38
+ }
39
+ /**
40
+ * Calculate the minimum APF required for adequate protection
41
+ * Required APF must be >= Hazard Ratio
42
+ */
43
+ function calculateRequiredAPF(hazardRatio) {
44
+ return hazardRatio;
45
+ }
46
+ /**
47
+ * Calculate safety margin
48
+ * How much the selected APF exceeds the required APF
49
+ */
50
+ function calculateSafetyMargin(apf, requiredAPF) {
51
+ if (requiredAPF <= 0)
52
+ return Infinity;
53
+ return apf / requiredAPF;
54
+ }
55
+ /**
56
+ * Calculate respirator MUC (Maximum Use Concentration) and protection factor
57
+ * based on OSHA 29 CFR 1910.134 and NIOSH respirator selection guidelines.
58
+ *
59
+ * MUC = APF × OEL
60
+ * Hazard Ratio = Concentration / OEL
61
+ * Protection is adequate when Concentration <= MUC
62
+ *
63
+ * @param input - Respirator input parameters
64
+ * @returns Respirator results including MUC, APF, and protection assessment
65
+ */
66
+ export function respiratorCalculate(input) {
67
+ const { concentration, oel, respiratorType } = input;
68
+ // Get APF for selected respirator type
69
+ const apf = APF_VALUES[respiratorType];
70
+ // Calculate MUC
71
+ const muc = calculateMUC(apf, oel);
72
+ // Calculate hazard ratio
73
+ const hazardRatio = calculateHazardRatio(concentration, oel);
74
+ // Calculate required APF
75
+ const requiredAPF = calculateRequiredAPF(hazardRatio);
76
+ // Check if protection is adequate
77
+ // Protection is adequate if concentration <= MUC (i.e., APF >= hazardRatio)
78
+ const protectionAdequate = concentration <= muc;
79
+ // Calculate safety margin
80
+ const safetyMargin = calculateSafetyMargin(apf, requiredAPF);
81
+ return {
82
+ muc,
83
+ apf,
84
+ hazardRatio,
85
+ requiredAPF,
86
+ protectionAdequate,
87
+ safetyMargin,
88
+ };
89
+ }
90
+ //# sourceMappingURL=respiratorCalculate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"respiratorCalculate.js","sourceRoot":"","sources":["../../src/safety/respiratorCalculate.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,GAAmC;IACjD,qBAAqB,EAAE,EAAE;IACzB,WAAW,EAAE,EAAE;IACf,gBAAgB,EAAE,EAAE;IACpB,mBAAmB,EAAE,EAAE;IACvB,cAAc,EAAE,EAAE;IAClB,wBAAwB,EAAE,IAAI;IAC9B,mBAAmB,EAAE,EAAE;IACvB,mBAAmB,EAAE,EAAE;IACvB,sBAAsB,EAAE,IAAI;IAC5B,SAAS,EAAE,KAAK;CACjB,CAAC;AAEF;;;;;;GAMG;AACH,SAAS,YAAY,CAAC,GAAW,EAAE,GAAW;IAC5C,OAAO,GAAG,GAAG,GAAG,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,oBAAoB,CAAC,aAAqB,EAAE,GAAW;IAC9D,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,aAAa,GAAG,GAAG,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAAC,WAAmB;IAC/C,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,SAAS,qBAAqB,CAAC,GAAW,EAAE,WAAmB;IAC7D,IAAI,WAAW,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IACtC,OAAO,GAAG,GAAG,WAAW,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAsB;IACxD,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAErD,uCAAuC;IACvC,MAAM,GAAG,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAEvC,gBAAgB;IAChB,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAEnC,yBAAyB;IACzB,MAAM,WAAW,GAAG,oBAAoB,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IAE7D,yBAAyB;IACzB,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAEtD,kCAAkC;IAClC,4EAA4E;IAC5E,MAAM,kBAAkB,GAAG,aAAa,IAAI,GAAG,CAAC;IAEhD,0BAA0B;IAC1B,MAAM,YAAY,GAAG,qBAAqB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAE7D,OAAO;QACL,GAAG;QACH,GAAG;QACH,WAAW;QACX,WAAW;QACX,kBAAkB;QAClB,YAAY;KACb,CAAC;AACJ,CAAC"}