@ryuzaki13/react-foundation-ui 1.11.2 → 1.12.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 (270) hide show
  1. package/README.md +36 -0
  2. package/dist/barcode-scanner/BarcodeScannerDialog.d.ts +46 -0
  3. package/dist/barcode-scanner/BarcodeScannerDialog.d.ts.map +1 -0
  4. package/dist/barcode-scanner/index.d.ts +3 -0
  5. package/dist/barcode-scanner/index.d.ts.map +1 -0
  6. package/dist/barcode-scanner/index.js +135 -0
  7. package/dist/barcode-scanner/index.js.map +1 -0
  8. package/dist/styles.css +1 -1
  9. package/package.json +10 -1
  10. package/storybook-static/assets/{Badge-IT7agK6Q.js → Badge-xeXe52JJ.js} +1 -1
  11. package/storybook-static/assets/{Badge.stories-CFO91oF4.js → Badge.stories-CmVjv-uT.js} +1 -1
  12. package/storybook-static/assets/{BadgeList-C-teTUUL.js → BadgeList-BcoPWNyN.js} +1 -1
  13. package/storybook-static/assets/BarcodeScannerDialog-DQGhFXAm.css +1 -0
  14. package/storybook-static/assets/BarcodeScannerDialog.stories-yAA6tA1d.js +72 -0
  15. package/storybook-static/assets/{Button-BCINYNwj.js → Button-CFOJHJwd.js} +1 -1
  16. package/storybook-static/assets/{Button-TpNLMFkg.js → Button-DJER9ynI.js} +1 -1
  17. package/storybook-static/assets/{Button.stories-CJu6IF4v.js → Button.stories-U_2CIpOj.js} +1 -1
  18. package/storybook-static/assets/{CalendarView-DNTK18Ep.js → CalendarView-B4DHU14y.js} +1 -1
  19. package/storybook-static/assets/{CheckBox-D1O55Px0.js → CheckBox-DLjlV0re.js} +1 -1
  20. package/storybook-static/assets/{CheckBox-B1LSl-4q.js → CheckBox-DcOrStyV.js} +1 -1
  21. package/storybook-static/assets/{CheckBox.stories-Cfl-QKq5.js → CheckBox.stories-HK9oMf2U.js} +1 -1
  22. package/storybook-static/assets/{Color-6AOWCN3U-uMvt0O_6.js → Color-6AOWCN3U-TVtDY8qi.js} +1 -1
  23. package/storybook-static/assets/{ContextMenu-Pt-na4FV.js → ContextMenu-C6ZM2Mo4.js} +1 -1
  24. package/storybook-static/assets/{ContextMenu-C1oSYyKE.js → ContextMenu-ZU-3k31S.js} +1 -1
  25. package/storybook-static/assets/{ContextMenu.stories-D2CglQkX.js → ContextMenu.stories-JO0hLeHH.js} +1 -1
  26. package/storybook-static/assets/{CustomOptionButton-N-v1f4in.js → CustomOptionButton-Bh__qmrf.js} +1 -1
  27. package/storybook-static/assets/{DateInput-DQ-AMKHB.js → DateInput-CaqZCM7S.js} +1 -1
  28. package/storybook-static/assets/{DateInput-w94MLAIB.js → DateInput-Cyy5MkIX.js} +1 -1
  29. package/storybook-static/assets/{DateInput.stories-Bab9Y0Nc.js → DateInput.stories-TxCUy1Nf.js} +1 -1
  30. package/storybook-static/assets/{DateRangePresetSelect-SZZ3sbaw.js → DateRangePresetSelect-9yDtN_-K.js} +1 -1
  31. package/storybook-static/assets/{DateRangePresetSelect-CNe9Spk9.js → DateRangePresetSelect-DZve4le1.js} +1 -1
  32. package/storybook-static/assets/{DateRangePresetSelect.stories-R1ykwXeD.js → DateRangePresetSelect.stories-2xcwHu0v.js} +1 -1
  33. package/storybook-static/assets/{Detail-CFHbtlqL.js → Detail-Bv8TlvPR.js} +1 -1
  34. package/storybook-static/assets/{Detail.stories-BJM6PVVZ.js → Detail.stories-RHFHl-QD.js} +1 -1
  35. package/storybook-static/assets/{Dialog-CMQx-SV-.js → Dialog-B6CmbIp6.js} +1 -1
  36. package/storybook-static/assets/{Dialog-Da7-Nfdk.js → Dialog-JG-Js1_P.js} +1 -1
  37. package/storybook-static/assets/{Dialog.stories-PG0d8vMq.js → Dialog.stories-CMG0bq1P.js} +1 -1
  38. package/storybook-static/assets/{Disclosure-JrvVUh4Q.js → Disclosure-CKD2uWXW.js} +1 -1
  39. package/storybook-static/assets/{Disclosure.stories-BE_oI-_H.js → Disclosure.stories-CCoZix5k.js} +1 -1
  40. package/storybook-static/assets/{DisclosureGroup-eLMt33Jq.js → DisclosureGroup-DxIXFd4p.js} +1 -1
  41. package/storybook-static/assets/{DocsRenderer-JROSPFPF-BcXtUhLj.js → DocsRenderer-JROSPFPF-Xf4KJ_Qh.js} +1 -1
  42. package/storybook-static/assets/{DropZone-BWYHo7_0.js → DropZone-BuU0GrtU.js} +1 -1
  43. package/storybook-static/assets/{DropZone-B2ig-gfu.js → DropZone-C14QKp48.js} +1 -1
  44. package/storybook-static/assets/{DropZone.stories-BbecqZzr.js → DropZone.stories-nLb_ObZg.js} +1 -1
  45. package/storybook-static/assets/{DropdownMenu-CIXIqQ3e.js → DropdownMenu-Db8c-Zn1.js} +1 -1
  46. package/storybook-static/assets/{ExpandableActionPanel-2rycOZF_.js → ExpandableActionPanel-CsS6nONV.js} +1 -1
  47. package/storybook-static/assets/{ExpandableActionPanel.stories-BNvBBzUO.js → ExpandableActionPanel.stories-D2uLOAZ8.js} +1 -1
  48. package/storybook-static/assets/{Flex-DzeJb844.js → Flex-n7EPU0Zg.js} +1 -1
  49. package/storybook-static/assets/{Flex.stories-5q9aUpOu.js → Flex.stories-BLqFw3hw.js} +1 -1
  50. package/storybook-static/assets/{FloatingPopover-CUEebYHG.js → FloatingPopover-Xth-H2JR.js} +1 -1
  51. package/storybook-static/assets/FormattedTableCell-cvi554Ef.js +15 -0
  52. package/storybook-static/assets/{Grid-sbM-0Kgn.js → Grid-Ca7aufxq.js} +1 -1
  53. package/storybook-static/assets/{Grid.stories-aL0oulxN.js → Grid.stories-JCGqm-rs.js} +1 -1
  54. package/storybook-static/assets/{ImageCropper.stories-YNKeAK2G.js → ImageCropper.stories-BFnA9lQ8.js} +1 -1
  55. package/storybook-static/assets/{ImageRenderer-BjvuGz4V.js → ImageRenderer-Dou6U8Cd.js} +1 -1
  56. package/storybook-static/assets/{ImageRenderer.stories-BqSaMK1O.js → ImageRenderer.stories-C74Qukdv.js} +1 -1
  57. package/storybook-static/assets/{ImageView.stories-6Lj28LvJ.js → ImageView.stories-DBbugUss.js} +1 -1
  58. package/storybook-static/assets/{ImageViewer.stories-i7SqudK7.js → ImageViewer.stories-BmzkBXJR.js} +2 -2
  59. package/storybook-static/assets/{ImageViewerRuntime-BRPBetcV.js → ImageViewerRuntime-voWTu9L2.js} +1 -1
  60. package/storybook-static/assets/{Input-BOMSbt0i.js → Input-CD-NDeTl.js} +1 -1
  61. package/storybook-static/assets/{Input-BjtKUj62.js → Input-DX4_SiCQ.js} +1 -1
  62. package/storybook-static/assets/{Input.stories-D4DC9yfK.js → Input.stories-B4aVxE7P.js} +1 -1
  63. package/storybook-static/assets/{InputDateTime-q6yDfV1e.js → InputDateTime-GVzmQgws.js} +1 -1
  64. package/storybook-static/assets/{InputDateTime.stories-DjhanFrU.js → InputDateTime.stories-Dd6aHwhL.js} +1 -1
  65. package/storybook-static/assets/{InputFile-Bgka_CGO.js → InputFile-C7IlWWuo.js} +1 -1
  66. package/storybook-static/assets/{InputFile-Gdh-BVde.js → InputFile-De0O-P06.js} +1 -1
  67. package/storybook-static/assets/{InputFile.stories-Cvqwi_CN.js → InputFile.stories-B5DPvKKg.js} +1 -1
  68. package/storybook-static/assets/{InputFiles-DaQ0cWbG.js → InputFiles-jpJ8OsvW.js} +1 -1
  69. package/storybook-static/assets/{InputFiles-DrOMzc0W.js → InputFiles-k1ui98yk.js} +1 -1
  70. package/storybook-static/assets/{InputFiles.stories-D2_IZX0o.js → InputFiles.stories-yhEjTkhb.js} +1 -1
  71. package/storybook-static/assets/{InputFilesList-CnjHW_AZ.js → InputFilesList-DQ8xIsNB.js} +1 -1
  72. package/storybook-static/assets/{InputImage-BloVaXeg.js → InputImage-BcfFZoeK.js} +1 -1
  73. package/storybook-static/assets/{InputImage-yw23Ygys.js → InputImage-ChqqaulB.js} +1 -1
  74. package/storybook-static/assets/{InputImage.stories-BHFG3E_f.js → InputImage.stories-DbH8bUI5.js} +1 -1
  75. package/storybook-static/assets/{InteractiveComponents-Cb1JkZDZ.js → InteractiveComponents-AOIUFszB.js} +1 -1
  76. package/storybook-static/assets/{InteractiveComponents.stories-D8WsLSpF.js → InteractiveComponents.stories-BWKhw0r9.js} +1 -1
  77. package/storybook-static/assets/LayoutPicker-Bw46oQ_0.js +376 -0
  78. package/storybook-static/assets/{LayoutPicker-Bw5Sz2VP.js → LayoutPicker-DbsRuLFI.js} +1 -1
  79. package/storybook-static/assets/{LayoutPicker.stories-BjsbHbrX.js → LayoutPicker.stories-C86co23-.js} +1 -1
  80. package/storybook-static/assets/{Listbox-Dvh3ZHF0.js → Listbox-CSMsOd31.js} +1 -1
  81. package/storybook-static/assets/{Listbox-Bt0FuguO.js → Listbox-DYRwIMlK.js} +1 -1
  82. package/storybook-static/assets/{Listbox.stories-DumIb82v.js → Listbox.stories-7NFvXRCS.js} +1 -1
  83. package/storybook-static/assets/{Modal-IxrCfTzW.js → Modal-DNeEDLQQ.js} +1 -1
  84. package/storybook-static/assets/Modal-THLBkb1a.js +1 -0
  85. package/storybook-static/assets/{Modal.stories-CEoMw78f.js → Modal.stories-BfoU_GML.js} +1 -1
  86. package/storybook-static/assets/ModalManagerProvider-DZ0QK10e.js +1 -0
  87. package/storybook-static/assets/{MultiSelect-CQln6-bB.js → MultiSelect-BT6apkyP.js} +1 -1
  88. package/storybook-static/assets/{MultiSelect-Cr6x1a77.js → MultiSelect-DFIEQ66c.js} +1 -1
  89. package/storybook-static/assets/{MultiSelect.stories-B8nME9PX.js → MultiSelect.stories-D0BHrQym.js} +1 -1
  90. package/storybook-static/assets/{NoData-F_z857Vw.js → NoData-CVxb7dGU.js} +1 -1
  91. package/storybook-static/assets/{NotificationsHost-D7oy9i56.js → NotificationsHost-CaLF-GIF.js} +1 -1
  92. package/storybook-static/assets/{NotificationsHost.stories-Bgfmu5tH.js → NotificationsHost.stories-Cnf45TOG.js} +1 -1
  93. package/storybook-static/assets/{ODataMultiSelect-C5radDm9.js → ODataMultiSelect-CCofPFd1.js} +1 -1
  94. package/storybook-static/assets/{ODataMultiSelect.stories-azvtnlSE.js → ODataMultiSelect.stories-CjduYosa.js} +1 -1
  95. package/storybook-static/assets/{ODataSelect-CgKHln6W.js → ODataSelect-D7CqYyzD.js} +1 -1
  96. package/storybook-static/assets/{ODataSelect.stories-BP0aMWPl.js → ODataSelect.stories-CXV_NdRT.js} +1 -1
  97. package/storybook-static/assets/{ODataTreeMultiSelect-DVkGcLs_.js → ODataTreeMultiSelect-BftPFs2n.js} +1 -1
  98. package/storybook-static/assets/{ODataTreeMultiSelect.stories-CVH-h3pY.js → ODataTreeMultiSelect.stories-or0wQ9AP.js} +1 -1
  99. package/storybook-static/assets/{ODataTreeSelect-DwRyH5UX.js → ODataTreeSelect-D5xOD_30.js} +1 -1
  100. package/storybook-static/assets/{ODataTreeSelect.stories-A9900skH.js → ODataTreeSelect.stories-D2x68_IW.js} +1 -1
  101. package/storybook-static/assets/{OneStepScroller-Dd3WFWu1.js → OneStepScroller-C4yOwu7w.js} +1 -1
  102. package/storybook-static/assets/{Option-252ePHhQ.js → Option-I8HVUw9B.js} +1 -1
  103. package/storybook-static/assets/{OptionButton-CXE06yW3.js → OptionButton-xVwyJ3j2.js} +1 -1
  104. package/storybook-static/assets/{PeriodSelect-pS7Lhp4_.js → PeriodSelect-Dx9nlZ5b.js} +1 -1
  105. package/storybook-static/assets/{PeriodSelect-CVSSxPnT.js → PeriodSelect-DyB-sGeM.js} +1 -1
  106. package/storybook-static/assets/{PeriodSelect.stories-DANkE20Y.js → PeriodSelect.stories-D8dRUZqc.js} +1 -1
  107. package/storybook-static/assets/{PickerTriggerActions-CMVT09qS.js → PickerTriggerActions-ZarFFzzM.js} +1 -1
  108. package/storybook-static/assets/{Popover-C4rea2Py.js → Popover-C5hwgiuL.js} +1 -1
  109. package/storybook-static/assets/{Popover-CfqiQoTe.js → Popover-CwS4OEAV.js} +1 -1
  110. package/storybook-static/assets/{Popover.stories-DUX8Q2_3.js → Popover.stories-DhqDwrcv.js} +1 -1
  111. package/storybook-static/assets/{PresetRangeDateInput-DZIj_-rv.js → PresetRangeDateInput-Df2H0YZU.js} +1 -1
  112. package/storybook-static/assets/{PresetRangeDateInput-BJ7R6aOl.js → PresetRangeDateInput-yr-ltDie.js} +1 -1
  113. package/storybook-static/assets/{PresetRangeDateInput.stories-DpCjlnSR.js → PresetRangeDateInput.stories-DWOjQ4Zf.js} +1 -1
  114. package/storybook-static/assets/{PresetSelect-wTxN7eUh.js → PresetSelect-ByDcnzCX.js} +1 -1
  115. package/storybook-static/assets/{README-BlY2HS2h.js → README-2IcraWHE.js} +1 -1
  116. package/storybook-static/assets/{README-Diczq2nT.js → README-2eDgLZuV.js} +1 -1
  117. package/storybook-static/assets/{README-BRqfc6KI.js → README-41H-AUuO.js} +1 -1
  118. package/storybook-static/assets/{README-DemxH1xQ.js → README-AkT4HI-u.js} +1 -1
  119. package/storybook-static/assets/{README-Dr35GZVx.js → README-B1NAcRKT.js} +1 -1
  120. package/storybook-static/assets/{README-CufihP1j.js → README-B2HzDG5u.js} +1 -1
  121. package/storybook-static/assets/{README-D-mIqhqT.js → README-B7NYCoih.js} +1 -1
  122. package/storybook-static/assets/{README-CNA4m2hc.js → README-BFrWKslN.js} +1 -1
  123. package/storybook-static/assets/{README-5hWMDpYE.js → README-BInzuU6X.js} +1 -1
  124. package/storybook-static/assets/{README-B5iXsE3P.js → README-Bb_w1Nym.js} +1 -1
  125. package/storybook-static/assets/{README-yqlgeiMT.js → README-BefUR1FM.js} +1 -1
  126. package/storybook-static/assets/{README-CiGPXAr1.js → README-Bh-x23CQ.js} +1 -1
  127. package/storybook-static/assets/{README-CYE9eTv5.js → README-BlIhHhIF.js} +1 -1
  128. package/storybook-static/assets/{README-CgE12pZq.js → README-BrGdMSth.js} +1 -1
  129. package/storybook-static/assets/{README-wHctjEbB.js → README-C0eV13Sr.js} +1 -1
  130. package/storybook-static/assets/{README-j2Dwfv5B.js → README-C5ffwEKG.js} +1 -1
  131. package/storybook-static/assets/{README-Bxlr2qjN.js → README-C6VoMZPn.js} +1 -1
  132. package/storybook-static/assets/{README-DFy2yURi.js → README-C6mrJ7kb.js} +1 -1
  133. package/storybook-static/assets/{README-D_CyF_Y_.js → README-CIYrqth9.js} +1 -1
  134. package/storybook-static/assets/{README-bCC8evhh.js → README-CMydTTS6.js} +1 -1
  135. package/storybook-static/assets/{README-j5oWJ02w.js → README-CUWKggHu.js} +1 -1
  136. package/storybook-static/assets/{README-zvxx6bRu.js → README-CaoO8Ut5.js} +1 -1
  137. package/storybook-static/assets/{README-BD6weX7r.js → README-Cd1d0wgT.js} +1 -1
  138. package/storybook-static/assets/{README-eDdFgIBe.js → README-ChJJgEZt.js} +1 -1
  139. package/storybook-static/assets/{README-nQToaxIY.js → README-Ci0Kh1hT.js} +1 -1
  140. package/storybook-static/assets/{README-BjzmM30L.js → README-CjRe0c1V.js} +1 -1
  141. package/storybook-static/assets/{README-T7XNWy8u.js → README-Cjf73J3z.js} +1 -1
  142. package/storybook-static/assets/{README-C3oDI-xY.js → README-CvT8FpW1.js} +1 -1
  143. package/storybook-static/assets/{README-6uEtjlv4.js → README-CvUdVa7L.js} +1 -1
  144. package/storybook-static/assets/{README-DDMPYgR-.js → README-CzfreI7x.js} +1 -1
  145. package/storybook-static/assets/{README-C8p5Sz7S.js → README-DDFlsdF6.js} +1 -1
  146. package/storybook-static/assets/{README-BW71C5Kv.js → README-DF-mwTId.js} +1 -1
  147. package/storybook-static/assets/{README-Dv2etZau.js → README-DFH0KR45.js} +1 -1
  148. package/storybook-static/assets/{README-aQSgSOZc.js → README-DG9Aq5O7.js} +1 -1
  149. package/storybook-static/assets/{README-BzyNHTEf.js → README-DJVLbFKd.js} +1 -1
  150. package/storybook-static/assets/{README-DLhkw1MR.js → README-DJjcvyeX.js} +1 -1
  151. package/storybook-static/assets/{README-BKxR9cDl.js → README-DZRPFRwC.js} +1 -1
  152. package/storybook-static/assets/{README-DzJNpR6m.js → README-DdurFiZJ.js} +1 -1
  153. package/storybook-static/assets/{README-ICed_D8s.js → README-DhqJsnNJ.js} +1 -1
  154. package/storybook-static/assets/{README-BLYbDcZv.js → README-LWv6IIBV.js} +1 -1
  155. package/storybook-static/assets/{README-DQmc8kLO.js → README-XDT1NSK3.js} +1 -1
  156. package/storybook-static/assets/{README-ByHwYJcQ.js → README-X_V5F9VK.js} +1 -1
  157. package/storybook-static/assets/{README-BpMghKgV.js → README-YmEv1fWN.js} +1 -1
  158. package/storybook-static/assets/{README-DRKa1vb4.js → README-idblV6mv.js} +1 -1
  159. package/storybook-static/assets/{README-DOyclMG0.js → README-jNLhEStI.js} +1 -1
  160. package/storybook-static/assets/{README-CFDZ28A3.js → README-lB3klDGb.js} +1 -1
  161. package/storybook-static/assets/{README-hfp2ql1O.js → README-mhW5Aj9o.js} +1 -1
  162. package/storybook-static/assets/{README-Ogll_dgV.js → README-oXktEVVG.js} +1 -1
  163. package/storybook-static/assets/{README-Ba1kOLVL.js → README-pJ0Dv8pm.js} +1 -1
  164. package/storybook-static/assets/{README-D4Us6CH9.js → README-pP_dKNmF.js} +1 -1
  165. package/storybook-static/assets/{README-D8noyyUO.js → README-uFeDyLKo.js} +1 -1
  166. package/storybook-static/assets/{README-B9631tQ_.js → README-zxMZWAG-.js} +1 -1
  167. package/storybook-static/assets/{RadioButton-D9AUf0wI.js → RadioButton-3OVIrkg4.js} +1 -1
  168. package/storybook-static/assets/{RadioButton-D-xAvbGj.js → RadioButton-DiapWNGf.js} +1 -1
  169. package/storybook-static/assets/{RadioButton.stories-Bt4LUxE4.js → RadioButton.stories-Df1y-QjJ.js} +1 -1
  170. package/storybook-static/assets/{RadioGroup-DxKxBmpd.js → RadioGroup-D3BysS3K.js} +1 -1
  171. package/storybook-static/assets/{RadioGroup-CUa4mG5W.js → RadioGroup-DoOe4_wG.js} +1 -1
  172. package/storybook-static/assets/{RadioGroup.stories-DtqXT2m9.js → RadioGroup.stories-0aCFeFN2.js} +1 -1
  173. package/storybook-static/assets/{Scrollable-_qgUxctu.js → Scrollable-02LDVVqT.js} +1 -1
  174. package/storybook-static/assets/{Select-n81lCGM4.js → Select-BpLN5zpQ.js} +1 -1
  175. package/storybook-static/assets/Select-D3Wk8fwj.js +12 -0
  176. package/storybook-static/assets/{Select.stories-DYm13WCI.js → Select.stories-B-RfQZ5q.js} +1 -1
  177. package/storybook-static/assets/{SerializableSelect-yiWU_D1f.js → SerializableSelect-CZf4QPZi.js} +1 -1
  178. package/storybook-static/assets/{SerializableSelect.stories-Rh7nxpNg.js → SerializableSelect.stories-DBiDumoN.js} +1 -1
  179. package/storybook-static/assets/{SingleDateTimeInput-CvBUxP_7.js → SingleDateTimeInput-LLvsDwQT.js} +1 -1
  180. package/storybook-static/assets/{SingleDateTimeInput-CnhIoNyN.js → SingleDateTimeInput-UMS-nqrM.js} +1 -1
  181. package/storybook-static/assets/{SingleDateTimeInput.stories-BXk3Fwa4.js → SingleDateTimeInput.stories-CBARmmwN.js} +1 -1
  182. package/storybook-static/assets/{Slider-AW8Lj1vz.js → Slider-D82fAdWL.js} +1 -1
  183. package/storybook-static/assets/{Slider-ClU2Ho4G.js → Slider-Dd9L-QGJ.js} +1 -1
  184. package/storybook-static/assets/{Slider.stories-DKPwjLnH.js → Slider.stories-DF8nIKZp.js} +1 -1
  185. package/storybook-static/assets/{SliderInput-B18n-7n5.js → SliderInput-CgmboZ1q.js} +1 -1
  186. package/storybook-static/assets/{SliderInput-BpE0ilrI.js → SliderInput-D7hnLXHS.js} +1 -1
  187. package/storybook-static/assets/{SliderInput.stories-1aqecEMF.js → SliderInput.stories-BzAIEc5i.js} +1 -1
  188. package/storybook-static/assets/{Sortable-cZ5EyxC6.js → Sortable-B3X-lOlN.js} +1 -1
  189. package/storybook-static/assets/{Sortable.stories-CQL0a0fG.js → Sortable.stories-CngQWqnx.js} +1 -1
  190. package/storybook-static/assets/{Splitter-BBGMeUwo.js → Splitter-SgFpplUJ.js} +1 -1
  191. package/storybook-static/assets/{Splitter.stories-SMjxGiFD.js → Splitter.stories-Fn131gq4.js} +1 -1
  192. package/storybook-static/assets/{StateSelect-B_MRWb9T.js → StateSelect-BjtS9CeU.js} +1 -1
  193. package/storybook-static/assets/{StateSelect-DNUW1Kso.js → StateSelect-uGGrERzF.js} +1 -1
  194. package/storybook-static/assets/{StateSelect.stories-Yyq8a_0k.js → StateSelect.stories-BeBboHki.js} +1 -1
  195. package/storybook-static/assets/{StringToggle.stories-CTJyj8EA.js → StringToggle.stories-C8L5uM8M.js} +1 -1
  196. package/storybook-static/assets/{Switch-BH_4ycNK.js → Switch-BVv0ctfZ.js} +1 -1
  197. package/storybook-static/assets/{Switch-Dt3ueGSz.js → Switch-Dy9ANQK-.js} +1 -1
  198. package/storybook-static/assets/{Switch.stories-D8QjgT7L.js → Switch.stories-DQQj-bF6.js} +1 -1
  199. package/storybook-static/assets/{Table-Dkc-p3UI.js → Table-DPzutyXT.js} +1 -1
  200. package/storybook-static/assets/{Table.stories-CxsRJTIG.js → Table.stories-BCVWtmqh.js} +2 -2
  201. package/storybook-static/assets/{Tabs-GDTGFRi1.js → Tabs-CrrOHegg.js} +1 -1
  202. package/storybook-static/assets/{Tabs.stories-CISivMv5.js → Tabs.stories-YlPJcHz6.js} +2 -2
  203. package/storybook-static/assets/{TabsBox-_ZPWMEwC.js → TabsBox-C-qdFgsq.js} +1 -1
  204. package/storybook-static/assets/{TagInput-Br23avs3.js → TagInput-ClXASgV9.js} +1 -1
  205. package/storybook-static/assets/{TagInput.stories-DuIRSMqi.js → TagInput.stories-Dq6pf1E5.js} +1 -1
  206. package/storybook-static/assets/{Text-CkLt10Vz.js → Text-ZVTVRrGw.js} +1 -1
  207. package/storybook-static/assets/{Textarea-BrAaINv1.js → Textarea-CU4Td5J9.js} +1 -1
  208. package/storybook-static/assets/{Textarea-CMlogzK3.js → Textarea-z6NWx_Bh.js} +1 -1
  209. package/storybook-static/assets/{Textarea.stories-CtiTme3Z.js → Textarea.stories-CubRAISW.js} +1 -1
  210. package/storybook-static/assets/{TimePanel-D747z5ch.js → TimePanel-BFAQJ1bI.js} +1 -1
  211. package/storybook-static/assets/{TimePanel.stories-ITfxPEfw.js → TimePanel.stories-CUhGDlm7.js} +1 -1
  212. package/storybook-static/assets/{Toggle-DxVDjZWO.js → Toggle-DVOO4tBr.js} +1 -1
  213. package/storybook-static/assets/{Toggle-6xZbnq1Y.js → Toggle-DtSDY2EH.js} +1 -1
  214. package/storybook-static/assets/{Toggle.stories-Cvv_0W65.js → Toggle.stories-CovKjNNa.js} +1 -1
  215. package/storybook-static/assets/{TreeMultiSelect-QbVke8HD.js → TreeMultiSelect-CTy2vKDl.js} +1 -1
  216. package/storybook-static/assets/{TreeMultiSelect-D2oAC-5W.js → TreeMultiSelect-C_-6fD0U.js} +1 -1
  217. package/storybook-static/assets/{TreeMultiSelect.stories-BiV7zyIB.js → TreeMultiSelect.stories-BlO667QL.js} +1 -1
  218. package/storybook-static/assets/TreePickerBase-C-i24HIU.js +76 -0
  219. package/storybook-static/assets/{TreeSelect-BnF5-pto.js → TreeSelect-DF6r0bgV.js} +1 -1
  220. package/storybook-static/assets/{TreeSelect-Bosab_C1.js → TreeSelect-De7cNaat.js} +1 -1
  221. package/storybook-static/assets/{TreeSelect.stories-BQ0vg5CC.js → TreeSelect.stories-BxwiUwJ2.js} +1 -1
  222. package/storybook-static/assets/{TreeTable-DT2drb5t.js → TreeTable-nptjywjg.js} +1 -1
  223. package/storybook-static/assets/TreeTable.stories-DsYX5mJ-.js +138 -0
  224. package/storybook-static/assets/{blocks-75pOZCvw.js → blocks-Cwytla0s.js} +3 -3
  225. package/storybook-static/assets/{check-DzHUCh3a.js → check-Dj2DWtl2.js} +1 -1
  226. package/storybook-static/assets/{chevron-down-DwuceiI1.js → chevron-down-m0P0EdBN.js} +1 -1
  227. package/storybook-static/assets/{chevron-left-DnfRcShb.js → chevron-left-DW4SDuDX.js} +1 -1
  228. package/storybook-static/assets/{chevron-right-GCc6AKki.js → chevron-right-e_i1Rck4.js} +1 -1
  229. package/storybook-static/assets/{chunk-W22LQPXL-C57Dx1sH.js → chunk-W22LQPXL-C2LnR3e-.js} +1 -1
  230. package/storybook-static/assets/{circle-alert-CO8JWBDk.js → circle-alert-BNDiZKnw.js} +1 -1
  231. package/storybook-static/assets/{circle-check-BJsDvlur.js → circle-check-B6srYcn_.js} +1 -1
  232. package/storybook-static/assets/{components-D68ruMaT.js → components-tHsatYT-.js} +3 -3
  233. package/storybook-static/assets/{contextMenu-DgGPPB-G.js → contextMenu-CpPvJBva.js} +1 -1
  234. package/storybook-static/assets/{download-BOGBbCUe.js → download-KWzg2zqy.js} +1 -1
  235. package/storybook-static/assets/{floating-ui.react-CgNxhXDh.js → floating-ui.react-CjiPL5a6.js} +1 -1
  236. package/storybook-static/assets/{foundationApi-CkHYhT3I.js → foundationApi-CLxcCnvf.js} +1 -1
  237. package/storybook-static/assets/{foundationLib-Dt3CXElB.js → foundationLib-DgxJv4Jl.js} +1 -1
  238. package/storybook-static/assets/{hooks-Bvex5_ua.js → hooks-CVpzpZQk.js} +1 -1
  239. package/storybook-static/assets/{iframe-NweSoAE5.js → iframe-DhaBiZWQ.js} +4 -4
  240. package/storybook-static/assets/iframe-DhmTKnLw.js +1 -0
  241. package/storybook-static/assets/{info-BbHh5iRi.js → info-C4afqn1I.js} +1 -1
  242. package/storybook-static/assets/{odata-BKWiUXxz.js → odata-BOF0ce_Y.js} +1 -1
  243. package/storybook-static/assets/{odataStoryFixtures-C_-DgY_0.js → odataStoryFixtures-DA_Hfm0X.js} +1 -1
  244. package/storybook-static/assets/react-CrorOkzN.js +9 -0
  245. package/storybook-static/assets/{refresh-cw-BittqUWY.js → refresh-cw-Bxr1O2kj.js} +1 -1
  246. package/storybook-static/assets/{settings-2-DSr8VUkZ.js → settings-2-DnEl3XDa.js} +1 -1
  247. package/storybook-static/assets/{sortable-CtEptgJk.js → sortable-CHijVtYk.js} +1 -1
  248. package/storybook-static/assets/{syntaxhighlighter-QEQV7K2Y-BbnELPKq.js → syntaxhighlighter-QEQV7K2Y-rSGLtIgQ.js} +1 -1
  249. package/storybook-static/assets/{trash-2-CEFiEn8f.js → trash-2-DtRryQRr.js} +1 -1
  250. package/storybook-static/assets/{triangle-alert-BkdD8lW-.js → triangle-alert-YJECENS1.js} +1 -1
  251. package/storybook-static/assets/{useODataSelectBase--GVXfd0Y.js → useODataSelectBase-BXlViAjV.js} +1 -1
  252. package/storybook-static/assets/{useODataTreeData-DZETFgtg.js → useODataTreeData-CNceXy5R.js} +1 -1
  253. package/storybook-static/assets/usePickerQuery-_QGEmwCx.js +1 -0
  254. package/storybook-static/assets/usePickerTriggerController-CHg5GzEW.js +6 -0
  255. package/storybook-static/assets/{x-BVlwcuXX.js → x-DxGUdYeK.js} +1 -1
  256. package/storybook-static/assets/zxing_reader-BxB2YfIY.wasm +0 -0
  257. package/storybook-static/iframe.html +2 -2
  258. package/storybook-static/index.json +1 -1
  259. package/storybook-static/project.json +1 -1
  260. package/storybook-static/assets/FormattedTableCell-WmCmgK5f.js +0 -15
  261. package/storybook-static/assets/LayoutPicker-DJ_3VmmS.js +0 -376
  262. package/storybook-static/assets/ModalManagerProvider-Bx4ZvzkV.js +0 -1
  263. package/storybook-static/assets/Select-Dvx7ScXo.js +0 -12
  264. package/storybook-static/assets/TreePickerBase-DFww9BKU.js +0 -76
  265. package/storybook-static/assets/TreeTable.stories-oXbPYQ4z.js +0 -138
  266. package/storybook-static/assets/iframe-CjMLLeiq.js +0 -1
  267. package/storybook-static/assets/react-Dk8xkSAa.js +0 -9
  268. package/storybook-static/assets/usePickerQuery-IES7kJEs.js +0 -1
  269. package/storybook-static/assets/usePickerTriggerController-CXH16qSz.js +0 -6
  270. /package/storybook-static/assets/{ModalManagerProvider-CTRpBlaO.css → Modal-CTRpBlaO.css} +0 -0
package/README.md CHANGED
@@ -149,6 +149,42 @@ import "@ryuzaki13/react-foundation-ui/styles.css";
149
149
 
150
150
  Для `accent` точная форма содержит `content`, `surface` и `border`. Для статуса обязательна карта `text` с `base`; `hover` и `active` имеют последовательные fallback. Карта `fill` и её поля опциональны, а `border` может отдельно задать `base`, `hover`, `active` и `focus`. Такой контракт позволяет переносить существующие темы без аппроксимации цветов и при этом сохраняет все новые semantic-токены foundation UI.
151
151
 
152
+ ## Сканирование штрихкодов
153
+
154
+ Subpath `@ryuzaki13/react-foundation-ui/barcode-scanner` предоставляет одноразовый модальный сканер для browser-only React-приложений. Он запрашивает камеру только после монтирования, отдаёт первый распознанный код, освобождает `MediaStream` перед закрытием и показывает локализованные ошибки с повторным запуском.
155
+
156
+ ```tsx
157
+ import { useState } from "react";
158
+
159
+ import {
160
+ BarcodeScannerDialog,
161
+ type BarcodeScanResult
162
+ } from "@ryuzaki13/react-foundation-ui/barcode-scanner";
163
+
164
+ export function BarcodeField() {
165
+ const [opened, setOpened] = useState(false);
166
+ const [result, setResult] = useState<BarcodeScanResult | null>(null);
167
+
168
+ return (
169
+ <>
170
+ <button type="button" onClick={() => setOpened(true)}>
171
+ Сканировать
172
+ </button>
173
+ {opened ? (
174
+ <BarcodeScannerDialog
175
+ formats={["ean_13", "ean_8", "upc_a", "upc_e", "code_128", "qr_code"]}
176
+ onDetected={setResult}
177
+ onClose={() => setOpened(false)}
178
+ />
179
+ ) : null}
180
+ {result ? <output>{result.value}</output> : null}
181
+ </>
182
+ );
183
+ }
184
+ ```
185
+
186
+ Пакет сам устанавливает `@yudiel/react-qr-scanner` и согласованную с ним версию `zxing_reader.wasm`. `prepareZXingModule` автоматически направляет полифилл на asset host-сборки, поэтому сканер не обращается к CDN. Host-сборка PWA должна добавлять `wasm` в precache. Камера доступна только в secure context: HTTPS либо `localhost`.
187
+
152
188
  ## Просмотр изображений
153
189
 
154
190
  `ImageViewer` из точечного entrypoint `@ryuzaki13/react-foundation-ui/image` предоставляет controlled lightbox для одного изображения или галереи. Реализация использует Yet Another React Lightbox как внутренний runtime, но наружу публикует только foundation-контракты `ImageViewerImage`, `ImageViewerFeatures`, `ImageViewerLabels` и `ImageViewerStyle`.
@@ -0,0 +1,46 @@
1
+ import { type ComponentProps, type ReactNode } from "react";
2
+ import { Scanner, type IScannerError } from "@yudiel/react-qr-scanner";
3
+ type ScannerFormats = NonNullable<ComponentProps<typeof Scanner>["formats"]>;
4
+ export type BarcodeScannerFormat = ScannerFormats[number];
5
+ export type BarcodeScannerErrorKind = IScannerError["kind"];
6
+ export type BarcodeScannerError = Readonly<IScannerError>;
7
+ export type BarcodeScanResult = {
8
+ readonly value: string;
9
+ readonly format: string;
10
+ };
11
+ export type BarcodeScannerControls = {
12
+ readonly finder?: boolean;
13
+ readonly torch?: boolean;
14
+ readonly zoom?: boolean;
15
+ };
16
+ export type BarcodeScannerDialogProps = {
17
+ /** Вызывается один раз для первого распознанного кода. */
18
+ readonly onDetected: (result: BarcodeScanResult) => void;
19
+ /** Закрывает пользовательский сценарий и вызывается также после успешного сканирования. */
20
+ readonly onClose: () => void;
21
+ /** Получает исходную типизированную ошибку камеры для диагностики host-приложения. */
22
+ readonly onError?: (error: BarcodeScannerError) => void;
23
+ /** Ограничивает распознавание нужными форматами и уменьшает ложные совпадения. */
24
+ readonly formats?: readonly BarcodeScannerFormat[];
25
+ /** Настройки предпочитаемой камеры и разрешения видеопотока. */
26
+ readonly constraints?: MediaTrackConstraints;
27
+ /** Встроенные элементы управления сканера. */
28
+ readonly controls?: BarcodeScannerControls;
29
+ /** Звуковое подтверждение или URL собственного звука. */
30
+ readonly sound?: boolean | string;
31
+ /** Закрывает камеру при сворачивании вкладки или установленной PWA. */
32
+ readonly closeWhenDocumentHidden?: boolean;
33
+ readonly title?: string;
34
+ readonly hint?: ReactNode;
35
+ readonly retryLabel?: string;
36
+ readonly errorMessages?: Partial<Record<BarcodeScannerErrorKind, string>>;
37
+ readonly className?: string;
38
+ };
39
+ /**
40
+ * Одноразовый сканер штрихкодов в модальном окне. Компонент монтируется только
41
+ * после явного действия пользователя, освобождает MediaStream до закрытия и
42
+ * сохраняет ссылку на поток на случай, если дочерний Scanner уже очистил ref.
43
+ */
44
+ export declare function BarcodeScannerDialog({ onDetected, onClose, onError, formats, constraints, controls, sound, closeWhenDocumentHidden, title, hint, retryLabel, errorMessages, className }: BarcodeScannerDialogProps): import("react").JSX.Element;
45
+ export {};
46
+ //# sourceMappingURL=BarcodeScannerDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BarcodeScannerDialog.d.ts","sourceRoot":"","sources":["../../src/barcode-scanner/BarcodeScannerDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4C,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtG,OAAO,EAAsB,OAAO,EAAyB,KAAK,aAAa,EAAuB,MAAM,0BAA0B,CAAC;AAkBvI,KAAK,cAAc,GAAG,WAAW,CAAC,cAAc,CAAC,OAAO,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAE7E,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AAC1D,MAAM,MAAM,uBAAuB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AAC5D,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;AAE1D,MAAM,MAAM,iBAAiB,GAAG;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACvC,0DAA0D;IAC1D,QAAQ,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACzD,2FAA2F;IAC3F,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;IAC7B,sFAAsF;IACtF,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACxD,kFAAkF;IAClF,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACnD,gEAAgE;IAChE,QAAQ,CAAC,WAAW,CAAC,EAAE,qBAAqB,CAAC;IAC7C,8CAA8C;IAC9C,QAAQ,CAAC,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAC3C,yDAAyD;IACzD,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAClC,uEAAuE;IACvE,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAC3C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1E,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAiCF;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,EACpC,UAAU,EACV,OAAO,EACP,OAAO,EACP,OAAwB,EACxB,WAAgC,EAChC,QAA0B,EAC1B,KAAa,EACb,uBAA8B,EAC9B,KAAgC,EAChC,IAA0C,EAC1C,UAAwB,EACxB,aAAa,EACb,SAAS,EACT,EAAE,yBAAyB,+BA+G3B"}
@@ -0,0 +1,3 @@
1
+ export { BarcodeScannerDialog } from "./BarcodeScannerDialog";
2
+ export type { BarcodeScanResult, BarcodeScannerControls, BarcodeScannerDialogProps, BarcodeScannerError, BarcodeScannerErrorKind, BarcodeScannerFormat } from "./BarcodeScannerDialog";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/barcode-scanner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EACX,iBAAiB,EACjB,sBAAsB,EACtB,yBAAyB,EACzB,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACpB,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,135 @@
1
+ import { n as e } from "../chunks/button-BaUlN-nt.js";
2
+ import { n as t, r as n } from "../chunks/modal-BGAi96zR.js";
3
+ import { useCallback as r, useEffect as i, useRef as a, useState as o } from "react";
4
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
5
+ import { Scanner as l, prepareZXingModule as u } from "@yudiel/react-qr-scanner";
6
+ import d from "zxing-wasm/reader/zxing_reader.wasm?url";
7
+ var f = {
8
+ root: "-bko3o",
9
+ viewport: "K0Pwy-",
10
+ scanner: "mXbD4L",
11
+ video: "o-ELdM",
12
+ error: "yEOcB8",
13
+ hint: "Nhg42b"
14
+ };
15
+ //#endregion
16
+ //#region src/barcode-scanner/BarcodeScannerDialog.tsx
17
+ u({ overrides: { locateFile: (e, t) => e.endsWith(".wasm") ? d : `${t}${e}` } });
18
+ var p = [
19
+ "ean_13",
20
+ "ean_8",
21
+ "upc_a",
22
+ "upc_e",
23
+ "code_128"
24
+ ], m = {
25
+ facingMode: { ideal: "environment" },
26
+ width: { ideal: 1280 },
27
+ height: { ideal: 720 }
28
+ }, h = {
29
+ finder: !0,
30
+ torch: !0,
31
+ zoom: !0
32
+ }, g = {
33
+ "permission-denied": "Доступ к камере запрещён. Разрешите его в настройках сайта.",
34
+ "no-camera": "На устройстве не найдена камера.",
35
+ "in-use": "Камера уже используется другим приложением или вкладкой.",
36
+ overconstrained: "Камера не поддерживает запрошенные параметры.",
37
+ "insecure-context": "Для работы камеры необходим HTTPS.",
38
+ unsupported: "Этот браузер не поддерживает доступ к камере.",
39
+ aborted: "Запуск камеры был прерван.",
40
+ security: "Доступ к камере заблокирован политикой безопасности.",
41
+ "type-error": "Переданы некорректные параметры камеры.",
42
+ unknown: "Не удалось запустить сканер."
43
+ };
44
+ function _(e) {
45
+ e?.getTracks().forEach((e) => e.stop());
46
+ }
47
+ function v({ onDetected: u, onClose: d, onError: v, formats: y = p, constraints: b = m, controls: x = h, sound: S = !1, closeWhenDocumentHidden: C = !0, title: w = "Сканирование штрихкода", hint: T = "Расположите штрихкод внутри рамки", retryLabel: E = "Повторить", errorMessages: D, className: O }) {
48
+ let k = a(null), A = a(null), j = a(!1), [M, N] = o(null), P = r(() => {
49
+ _(k.current?.getStream() ?? A.current), A.current = null;
50
+ }, []), F = r(() => {
51
+ P(), d();
52
+ }, [d, P]);
53
+ i(() => {
54
+ if (M) return;
55
+ let e = 0, t = () => {
56
+ let n = k.current?.getStream();
57
+ if (n) {
58
+ A.current = n;
59
+ return;
60
+ }
61
+ e = window.requestAnimationFrame(t);
62
+ };
63
+ return e = window.requestAnimationFrame(t), () => {
64
+ window.cancelAnimationFrame(e), _(A.current), A.current = null;
65
+ };
66
+ }, [M]), i(() => {
67
+ if (!C) return;
68
+ let e = () => {
69
+ document.visibilityState === "hidden" && F();
70
+ };
71
+ return document.addEventListener("visibilitychange", e), () => document.removeEventListener("visibilitychange", e);
72
+ }, [F, C]);
73
+ let I = r((e) => {
74
+ let t = e[0];
75
+ !t || j.current || (j.current = !0, P(), u({
76
+ value: t.rawValue,
77
+ format: t.format
78
+ }), d());
79
+ }, [
80
+ d,
81
+ u,
82
+ P
83
+ ]), L = r((e) => {
84
+ P(), N(e), v?.(e);
85
+ }, [v, P]);
86
+ function R() {
87
+ j.current = !1, N(null);
88
+ }
89
+ let z = O ? `${f.root} ${O}` : f.root, B = M ? D?.[M.kind] ?? g[M.kind] : null;
90
+ return /* @__PURE__ */ s(t, {
91
+ isOpen: !0,
92
+ onClose: F,
93
+ size: "xl",
94
+ title: w,
95
+ children: /* @__PURE__ */ s(n, { children: /* @__PURE__ */ c("section", {
96
+ className: z,
97
+ "aria-label": w,
98
+ children: [/* @__PURE__ */ s("div", {
99
+ className: f.viewport,
100
+ children: M ? /* @__PURE__ */ c("div", {
101
+ className: f.error,
102
+ children: [/* @__PURE__ */ s("p", {
103
+ role: "alert",
104
+ children: B
105
+ }), /* @__PURE__ */ s(e, {
106
+ type: "button",
107
+ variant: "infoOutline",
108
+ onClick: R,
109
+ children: E
110
+ })]
111
+ }) : /* @__PURE__ */ s(l, {
112
+ ref: k,
113
+ formats: [...y],
114
+ constraints: b,
115
+ allowMultiple: !1,
116
+ sound: S,
117
+ components: x,
118
+ classNames: {
119
+ container: f.scanner,
120
+ video: f.video
121
+ },
122
+ onScan: I,
123
+ onError: L
124
+ })
125
+ }), !M && T ? /* @__PURE__ */ s("p", {
126
+ className: f.hint,
127
+ children: T
128
+ }) : null]
129
+ }) })
130
+ });
131
+ }
132
+ //#endregion
133
+ export { v as BarcodeScannerDialog };
134
+
135
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/barcode-scanner/BarcodeScannerDialog.module.scss","../../src/barcode-scanner/BarcodeScannerDialog.tsx"],"sourcesContent":[".root {\n\tdisplay: grid;\n\tgap: var(--space-md);\n\tmin-inline-size: 0;\n}\n\n.viewport {\n\tposition: relative;\n\toverflow: hidden;\n\tinline-size: 100%;\n\taspect-ratio: 4 / 3;\n\tborder: var(--border);\n\tborder-radius: var(--radius-md);\n\tbackground: #000;\n}\n\n.scanner,\n.video {\n\tinline-size: 100%;\n\tblock-size: 100%;\n}\n\n.video {\n\tobject-fit: cover;\n}\n\n.error {\n\tdisplay: grid;\n\tplace-content: center;\n\tjustify-items: center;\n\tgap: var(--space-md);\n\tmin-block-size: 100%;\n\tpadding: var(--space-lg);\n\tbackground: var(--surface-0);\n\tcolor: var(--content-0);\n\ttext-align: center;\n\n\tp {\n\t\tmargin: 0;\n\t}\n}\n\n.hint {\n\tmargin: 0;\n\tcolor: var(--content-1);\n\tfont-size: var(--font-size-sm);\n\ttext-align: center;\n}\n","import { useCallback, useEffect, useRef, useState, type ComponentProps, type ReactNode } from \"react\";\n\nimport { prepareZXingModule, Scanner, type IDetectedBarcode, type IScannerError, type IScannerHandle } from \"@yudiel/react-qr-scanner\";\nimport zxingReaderWasmUrl from \"zxing-wasm/reader/zxing_reader.wasm?url\";\n\nimport { Button } from \"../button\";\nimport { Modal, ModalContent } from \"../modal\";\n\nimport styles from \"./BarcodeScannerDialog.module.scss\";\n\n/**\n * Полифилл должен получать WASM из npm-артефакта foundation UI, чтобы первое\n * сканирование не зависело от доступности внешнего CDN и работало в PWA offline.\n */\nprepareZXingModule({\n\toverrides: {\n\t\tlocateFile: (path: string, prefix: string) => (path.endsWith(\".wasm\") ? zxingReaderWasmUrl : `${prefix}${path}`)\n\t}\n});\n\ntype ScannerFormats = NonNullable<ComponentProps<typeof Scanner>[\"formats\"]>;\n\nexport type BarcodeScannerFormat = ScannerFormats[number];\nexport type BarcodeScannerErrorKind = IScannerError[\"kind\"];\nexport type BarcodeScannerError = Readonly<IScannerError>;\n\nexport type BarcodeScanResult = {\n\treadonly value: string;\n\treadonly format: string;\n};\n\nexport type BarcodeScannerControls = {\n\treadonly finder?: boolean;\n\treadonly torch?: boolean;\n\treadonly zoom?: boolean;\n};\n\nexport type BarcodeScannerDialogProps = {\n\t/** Вызывается один раз для первого распознанного кода. */\n\treadonly onDetected: (result: BarcodeScanResult) => void;\n\t/** Закрывает пользовательский сценарий и вызывается также после успешного сканирования. */\n\treadonly onClose: () => void;\n\t/** Получает исходную типизированную ошибку камеры для диагностики host-приложения. */\n\treadonly onError?: (error: BarcodeScannerError) => void;\n\t/** Ограничивает распознавание нужными форматами и уменьшает ложные совпадения. */\n\treadonly formats?: readonly BarcodeScannerFormat[];\n\t/** Настройки предпочитаемой камеры и разрешения видеопотока. */\n\treadonly constraints?: MediaTrackConstraints;\n\t/** Встроенные элементы управления сканера. */\n\treadonly controls?: BarcodeScannerControls;\n\t/** Звуковое подтверждение или URL собственного звука. */\n\treadonly sound?: boolean | string;\n\t/** Закрывает камеру при сворачивании вкладки или установленной PWA. */\n\treadonly closeWhenDocumentHidden?: boolean;\n\treadonly title?: string;\n\treadonly hint?: ReactNode;\n\treadonly retryLabel?: string;\n\treadonly errorMessages?: Partial<Record<BarcodeScannerErrorKind, string>>;\n\treadonly className?: string;\n};\n\nconst defaultFormats = [\"ean_13\", \"ean_8\", \"upc_a\", \"upc_e\", \"code_128\"] satisfies BarcodeScannerFormat[];\n\nconst defaultConstraints = {\n\tfacingMode: { ideal: \"environment\" },\n\twidth: { ideal: 1280 },\n\theight: { ideal: 720 }\n} satisfies MediaTrackConstraints;\n\nconst defaultControls = {\n\tfinder: true,\n\ttorch: true,\n\tzoom: true\n} satisfies BarcodeScannerControls;\n\nconst defaultErrorMessages = {\n\t\"permission-denied\": \"Доступ к камере запрещён. Разрешите его в настройках сайта.\",\n\t\"no-camera\": \"На устройстве не найдена камера.\",\n\t\"in-use\": \"Камера уже используется другим приложением или вкладкой.\",\n\toverconstrained: \"Камера не поддерживает запрошенные параметры.\",\n\t\"insecure-context\": \"Для работы камеры необходим HTTPS.\",\n\tunsupported: \"Этот браузер не поддерживает доступ к камере.\",\n\taborted: \"Запуск камеры был прерван.\",\n\tsecurity: \"Доступ к камере заблокирован политикой безопасности.\",\n\t\"type-error\": \"Переданы некорректные параметры камеры.\",\n\tunknown: \"Не удалось запустить сканер.\"\n} satisfies Record<BarcodeScannerErrorKind, string>;\n\nfunction stopMediaStream(stream: MediaStream | null | undefined) {\n\tstream?.getTracks().forEach((track) => track.stop());\n}\n\n/**\n * Одноразовый сканер штрихкодов в модальном окне. Компонент монтируется только\n * после явного действия пользователя, освобождает MediaStream до закрытия и\n * сохраняет ссылку на поток на случай, если дочерний Scanner уже очистил ref.\n */\nexport function BarcodeScannerDialog({\n\tonDetected,\n\tonClose,\n\tonError,\n\tformats = defaultFormats,\n\tconstraints = defaultConstraints,\n\tcontrols = defaultControls,\n\tsound = false,\n\tcloseWhenDocumentHidden = true,\n\ttitle = \"Сканирование штрихкода\",\n\thint = \"Расположите штрихкод внутри рамки\",\n\tretryLabel = \"Повторить\",\n\terrorMessages,\n\tclassName\n}: BarcodeScannerDialogProps) {\n\tconst scannerRef = useRef<IScannerHandle>(null);\n\tconst streamRef = useRef<MediaStream | null>(null);\n\tconst handledRef = useRef(false);\n\tconst [error, setError] = useState<BarcodeScannerError | null>(null);\n\n\tconst stopCamera = useCallback(() => {\n\t\tstopMediaStream(scannerRef.current?.getStream() ?? streamRef.current);\n\t\tstreamRef.current = null;\n\t}, []);\n\n\tconst closeScanner = useCallback(() => {\n\t\tstopCamera();\n\t\tonClose();\n\t}, [onClose, stopCamera]);\n\n\tuseEffect(() => {\n\t\tif (error) return;\n\n\t\tlet frameId = 0;\n\t\tconst rememberStream = () => {\n\t\t\tconst stream = scannerRef.current?.getStream();\n\t\t\tif (stream) {\n\t\t\t\tstreamRef.current = stream;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tframeId = window.requestAnimationFrame(rememberStream);\n\t\t};\n\n\t\tframeId = window.requestAnimationFrame(rememberStream);\n\n\t\treturn () => {\n\t\t\twindow.cancelAnimationFrame(frameId);\n\t\t\tstopMediaStream(streamRef.current);\n\t\t\tstreamRef.current = null;\n\t\t};\n\t}, [error]);\n\n\tuseEffect(() => {\n\t\tif (!closeWhenDocumentHidden) return;\n\n\t\tconst handleVisibilityChange = () => {\n\t\t\tif (document.visibilityState === \"hidden\") closeScanner();\n\t\t};\n\n\t\tdocument.addEventListener(\"visibilitychange\", handleVisibilityChange);\n\t\treturn () => document.removeEventListener(\"visibilitychange\", handleVisibilityChange);\n\t}, [closeScanner, closeWhenDocumentHidden]);\n\n\tconst handleScan = useCallback(\n\t\t(detectedCodes: IDetectedBarcode[]) => {\n\t\t\tconst detectedCode = detectedCodes[0];\n\t\t\tif (!detectedCode || handledRef.current) return;\n\n\t\t\thandledRef.current = true;\n\t\t\tstopCamera();\n\t\t\tonDetected({ value: detectedCode.rawValue, format: detectedCode.format });\n\t\t\tonClose();\n\t\t},\n\t\t[onClose, onDetected, stopCamera]\n\t);\n\n\tconst handleError = useCallback(\n\t\t(scannerError: IScannerError) => {\n\t\t\tstopCamera();\n\t\t\tsetError(scannerError);\n\t\t\tonError?.(scannerError);\n\t\t},\n\t\t[onError, stopCamera]\n\t);\n\n\tfunction retryScanning() {\n\t\thandledRef.current = false;\n\t\tsetError(null);\n\t}\n\n\tconst rootClassName = className ? `${styles.root} ${className}` : styles.root;\n\tconst visibleErrorMessage = error ? (errorMessages?.[error.kind] ?? defaultErrorMessages[error.kind]) : null;\n\n\treturn (\n\t\t<Modal isOpen onClose={closeScanner} size=\"xl\" title={title}>\n\t\t\t<ModalContent>\n\t\t\t\t<section className={rootClassName} aria-label={title}>\n\t\t\t\t\t<div className={styles.viewport}>\n\t\t\t\t\t\t{error ? (\n\t\t\t\t\t\t\t<div className={styles.error}>\n\t\t\t\t\t\t\t\t<p role=\"alert\">{visibleErrorMessage}</p>\n\t\t\t\t\t\t\t\t<Button type=\"button\" variant=\"infoOutline\" onClick={retryScanning}>\n\t\t\t\t\t\t\t\t\t{retryLabel}\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Scanner\n\t\t\t\t\t\t\t\tref={scannerRef}\n\t\t\t\t\t\t\t\tformats={[...formats]}\n\t\t\t\t\t\t\t\tconstraints={constraints}\n\t\t\t\t\t\t\t\tallowMultiple={false}\n\t\t\t\t\t\t\t\tsound={sound}\n\t\t\t\t\t\t\t\tcomponents={controls}\n\t\t\t\t\t\t\t\tclassNames={{ container: styles.scanner, video: styles.video }}\n\t\t\t\t\t\t\t\tonScan={handleScan}\n\t\t\t\t\t\t\t\tonError={handleError}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t\t{!error && hint ? <p className={styles.hint}>{hint}</p> : null}\n\t\t\t\t</section>\n\t\t\t</ModalContent>\n\t\t</Modal>\n\t);\n}\n"],"mappings":"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"}