@ryuzaki13/react-foundation-ui 1.8.6 → 1.8.8
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.
- package/dist/advanced-search/index.js +2 -2
- package/dist/base-table/index.js +1 -1
- package/dist/chunks/{base-table-CYbtifH0.js → base-table-CdcVMDGY.js} +2 -2
- package/dist/chunks/{base-table-CYbtifH0.js.map → base-table-CdcVMDGY.js.map} +1 -1
- package/dist/chunks/{context-menu-L4KM0FRD.js → context-menu-CE_wfxct.js} +2 -2
- package/dist/chunks/{context-menu-L4KM0FRD.js.map → context-menu-CE_wfxct.js.map} +1 -1
- package/dist/chunks/date-input-g6l1iDmf.js.map +1 -1
- package/dist/chunks/{multi-select-CCgoTHWI.js → multi-select-CHZhWoq6.js} +2 -2
- package/dist/chunks/{multi-select-CCgoTHWI.js.map → multi-select-CHZhWoq6.js.map} +1 -1
- package/dist/chunks/{picker-Cb3D2Hts.js → picker-BcB3rSQt.js} +2 -2
- package/dist/chunks/picker-BcB3rSQt.js.map +1 -0
- package/dist/chunks/{select-Baek-IUe.js → select-BorNxjrG.js} +2 -2
- package/dist/chunks/{select-Baek-IUe.js.map → select-BorNxjrG.js.map} +1 -1
- package/dist/chunks/{table-CrQiurtA.js → table-DcABGh_F.js} +2 -2
- package/dist/chunks/{table-CrQiurtA.js.map → table-DcABGh_F.js.map} +1 -1
- package/dist/context-menu/index.js +1 -1
- package/dist/layout-picker/index.js +1 -1
- package/dist/listbox/index.js +1 -1
- package/dist/multi-select/index.js +1 -1
- package/dist/picker/index.js +1 -1
- package/dist/preset-select/index.js +1 -1
- package/dist/select/index.js +1 -1
- package/dist/simple-table/index.js +1 -1
- package/dist/slider/index.js +1 -1
- package/dist/state-select/index.js +1 -1
- package/dist/styles.css +1 -1
- package/dist/table/index.js +1 -1
- package/dist/table-sorting/index.js +1 -1
- package/dist/tree-select/index.js +1 -1
- package/dist/tree-table/index.js +1 -1
- package/package.json +4 -4
- package/storybook-static/assets/{Badge-CV8uR5lW.js → Badge-CxQIV1VM.js} +1 -1
- package/storybook-static/assets/{Badge.stories-DqTFDEB6.js → Badge.stories-BJkImUYK.js} +1 -1
- package/storybook-static/assets/{BadgeList-CVWvhSS7.js → BadgeList-DCcUez-d.js} +1 -1
- package/storybook-static/assets/{Button-C5Z6nJ9s.js → Button-BM_JnsIi.js} +1 -1
- package/storybook-static/assets/{Button-DtySOeyD.js → Button-Dh35R_JE.js} +1 -1
- package/storybook-static/assets/{Button.stories--Wr67DaY.js → Button.stories-BsgEwN-G.js} +1 -1
- package/storybook-static/assets/{CalendarView-ZzqQ8UIe.js → CalendarView-Bu5aaqrw.js} +1 -1
- package/storybook-static/assets/{CheckBox-BfNP6vO6.js → CheckBox-B93BCdtW.js} +1 -1
- package/storybook-static/assets/{CheckBox-BBNTe4u8.js → CheckBox-DB_H7Jkd.js} +1 -1
- package/storybook-static/assets/{CheckBox.module-CoYygdZx.js → CheckBox.module-BOAVN-Ny.js} +1 -1
- package/storybook-static/assets/{CheckBox.stories-B4Sv2TXp.js → CheckBox.stories-ChtE7IN-.js} +1 -1
- package/storybook-static/assets/{Color-6AOWCN3U-Ce5w8Y2l.js → Color-6AOWCN3U-CuY1qZ6d.js} +1 -1
- package/storybook-static/assets/{ContextMenu-Boi0R7-s.js → ContextMenu-B30yur26.js} +1 -1
- package/storybook-static/assets/{ContextMenu-D-lV53Zc.js → ContextMenu-DeoYEX8n.js} +1 -1
- package/storybook-static/assets/{ContextMenu.stories-D_rxDbLk.js → ContextMenu.stories-B80uu025.js} +1 -1
- package/storybook-static/assets/{CustomOptionButton-VYfjUfhW.js → CustomOptionButton-DQp71AHJ.js} +1 -1
- package/storybook-static/assets/{DateInput-f-RcBdOb.js → DateInput-CMhHGS-s.js} +1 -1
- package/storybook-static/assets/{DateInput-q2hPsJcH.js → DateInput-wIlcdKHD.js} +1 -1
- package/storybook-static/assets/{DateInput.stories-zQzjIsfx.js → DateInput.stories-DS45syC3.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-DQBOF8f5.js → DateRangePresetSelect-31S_37_9.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-Ciikik1_.js → DateRangePresetSelect-DgpOHDW1.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect.stories-BF8IP5Ep.js → DateRangePresetSelect.stories-3VlGka98.js} +1 -1
- package/storybook-static/assets/{Detail-CEl8URNQ.js → Detail-CxFnUUkK.js} +1 -1
- package/storybook-static/assets/{Detail.stories-Mr3ypLAA.js → Detail.stories-DqgQuwn1.js} +1 -1
- package/storybook-static/assets/{Dialog-Dj2y3EO1.js → Dialog-B0VCykP7.js} +1 -1
- package/storybook-static/assets/{Dialog-BydPFV17.js → Dialog-CdJK__QW.js} +1 -1
- package/storybook-static/assets/{Dialog.stories-C1WlZdyp.js → Dialog.stories-C1ABO4hq.js} +1 -1
- package/storybook-static/assets/{Disclosure-DH77E5hY.js → Disclosure-g89eWjtw.js} +1 -1
- package/storybook-static/assets/{Disclosure.stories-B9ZVczUX.js → Disclosure.stories-B2CCl9Dg.js} +1 -1
- package/storybook-static/assets/{DisclosureGroup-CIoFeosY.js → DisclosureGroup-DZ-1k-kK.js} +1 -1
- package/storybook-static/assets/{DocsRenderer-JROSPFPF-CbJN3X6f.js → DocsRenderer-JROSPFPF-C54xfLi3.js} +2 -2
- package/storybook-static/assets/{DropZone-DTBV-X-J.js → DropZone-CpVX5FJc.js} +1 -1
- package/storybook-static/assets/{DropZone-CR7xRn_b.js → DropZone-FboQPtkt.js} +1 -1
- package/storybook-static/assets/{DropZone.stories-Cw_og1Cs.js → DropZone.stories-Dtt5tKix.js} +1 -1
- package/storybook-static/assets/{DropdownMenu-CVIeHT8N.js → DropdownMenu--_ifmQMt.js} +1 -1
- package/storybook-static/assets/{ExpandableActionPanel-D8U6v8X7.js → ExpandableActionPanel-B2g9YRDI.js} +1 -1
- package/storybook-static/assets/{ExpandableActionPanel.stories-D42CZyOc.js → ExpandableActionPanel.stories-DnhAdkcl.js} +1 -1
- package/storybook-static/assets/{Flex-Bcsl0U5O.js → Flex-B-x1Ohkp.js} +1 -1
- package/storybook-static/assets/{Flex.stories-C0vSa3mh.js → Flex.stories-BYEkhW_Q.js} +1 -1
- package/storybook-static/assets/{FlexContainer-LmZIdhq2.js → FlexContainer-BWyPlTMB.js} +1 -1
- package/storybook-static/assets/{FlexItem-vkDYa5tA.js → FlexItem-pu3E11Sf.js} +1 -1
- package/storybook-static/assets/{FloatingPopover-DvU3oc_q.js → FloatingPopover-DOyMIo2-.js} +1 -1
- package/storybook-static/assets/FormattedTableCell-Cja58sq0.js +15 -0
- package/storybook-static/assets/{Grid-BCzygAqy.js → Grid-CzO0Ae1r.js} +1 -1
- package/storybook-static/assets/{Grid-Wl0Y0YAh.js → Grid-DDQ5Q1Zu.js} +1 -1
- package/storybook-static/assets/{Grid.stories-G6gMmKCP.js → Grid.stories-Bh-o6XTQ.js} +1 -1
- package/storybook-static/assets/{GridContainer-qDguE1HS.js → GridContainer-fKYgDsLl.js} +1 -1
- package/storybook-static/assets/{ImageCropper.stories-u6rOvDbd.js → ImageCropper.stories-Dy2RiAcH.js} +3 -3
- package/storybook-static/assets/{ImageRenderer-BYIRHN5G.js → ImageRenderer-qllJTZXD.js} +1 -1
- package/storybook-static/assets/{ImageRenderer.stories-BMEHEIVH.js → ImageRenderer.stories-DvE7n1QW.js} +1 -1
- package/storybook-static/assets/{ImageView.stories-DiEA93Yz.js → ImageView.stories-BmxCb-j1.js} +1 -1
- package/storybook-static/assets/{ImageViewer.stories-DyxctGxM.js → ImageViewer.stories-7cW5swP8.js} +2 -2
- package/storybook-static/assets/{ImageViewerRuntime--h_3C2s0.js → ImageViewerRuntime-CZu7J7wR.js} +2 -2
- package/storybook-static/assets/{Input-B2kOwWOU.js → Input-DWC0iHTm.js} +1 -1
- package/storybook-static/assets/{Input-CViRQ_rj.js → Input-JgKfpyoY.js} +1 -1
- package/storybook-static/assets/{Input.stories-D9eo9MWc.js → Input.stories-D_3AMqSf.js} +1 -1
- package/storybook-static/assets/{InputDateTime-T9_iyG4G.js → InputDateTime-DZOKr9oV.js} +1 -1
- package/storybook-static/assets/{InputDateTime.stories-DzegljaN.js → InputDateTime.stories-CFVXMtGS.js} +1 -1
- package/storybook-static/assets/{InputFile-CA3YpXnm.js → InputFile-BM_2v8Vr.js} +1 -1
- package/storybook-static/assets/{InputFile-Cvdj6RfC.js → InputFile-QkBKG4MF.js} +1 -1
- package/storybook-static/assets/{InputFile.stories-C18UaXPS.js → InputFile.stories-y_bqA0ji.js} +1 -1
- package/storybook-static/assets/{InputFiles-nS_qsXY7.js → InputFiles-0MQlpVXZ.js} +1 -1
- package/storybook-static/assets/{InputFiles-C4OkTG9M.js → InputFiles-CPMaf-0m.js} +1 -1
- package/storybook-static/assets/{InputFiles.stories-BYd0Pe0R.js → InputFiles.stories-FvkbnEu9.js} +1 -1
- package/storybook-static/assets/{InputFilesList-CXPf7Ui_.js → InputFilesList-LSKKFWI2.js} +1 -1
- package/storybook-static/assets/{InputImage-kd50L1Gf.js → InputImage-BtWMRvPj.js} +1 -1
- package/storybook-static/assets/{InputImage-jDVIxP7S.js → InputImage-CtHvsmW2.js} +1 -1
- package/storybook-static/assets/{InputImage.stories-D-xmS4Qj.js → InputImage.stories-DB4Dpqrp.js} +1 -1
- package/storybook-static/assets/{InteractiveComponents-D13nzSK7.js → InteractiveComponents-TycCPNdw.js} +1 -1
- package/storybook-static/assets/{InteractiveComponents.stories-yITzDh-Y.js → InteractiveComponents.stories-BPL6ph-t.js} +1 -1
- package/storybook-static/assets/{LayoutPicker-BfYXGIKb.js → LayoutPicker-121F1oKo.js} +1 -1
- package/storybook-static/assets/{LayoutPicker-9FVo0bF3.js → LayoutPicker-amQe8EyF.js} +1 -1
- package/storybook-static/assets/{LayoutPicker.stories-B-UnuGFM.js → LayoutPicker.stories-DpcjEEH4.js} +1 -1
- package/storybook-static/assets/{Listbox-9LVlsDzw.js → Listbox-D-Sqd9jb.js} +1 -1
- package/storybook-static/assets/{Listbox-C53-i-L6.js → Listbox-P5hFPYDA.js} +1 -1
- package/storybook-static/assets/{Listbox.stories-CCN72ABE.js → Listbox.stories-CL85ceLu.js} +1 -1
- package/storybook-static/assets/{Modal-CoXpuByh.js → Modal-Cn7uJut0.js} +1 -1
- package/storybook-static/assets/{Modal.stories-DAj_oPSt.js → Modal.stories-DgRduIwP.js} +1 -1
- package/storybook-static/assets/{ModalManagerProvider-C7pGT0B3.js → ModalManagerProvider-BpTBqDR5.js} +1 -1
- package/storybook-static/assets/{MultiSelect-DZ2krz-D.js → MultiSelect-BAHGljvC.js} +1 -1
- package/storybook-static/assets/{MultiSelect-DqeGNK15.js → MultiSelect-Bdq-guyW.js} +1 -1
- package/storybook-static/assets/{MultiSelect.stories-BoVHXMbn.js → MultiSelect.stories-6C-TQL1s.js} +1 -1
- package/storybook-static/assets/{NoData-N6Pbu0LD.js → NoData-mxG4mL4e.js} +1 -1
- package/storybook-static/assets/{NotificationsHost--uPz1G3j.js → NotificationsHost-CygepfX-.js} +1 -1
- package/storybook-static/assets/{NotificationsHost.stories-B-X-Ljxs.js → NotificationsHost.stories-B7ZmvjI6.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect-7U6nJdqB.js → ODataMultiSelect-BHl4B00F.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect.stories-B-t6MsOr.js → ODataMultiSelect.stories-BHSj5rjf.js} +1 -1
- package/storybook-static/assets/{ODataSelect-Dy-fSgE6.js → ODataSelect-foaFaP6d.js} +1 -1
- package/storybook-static/assets/{ODataSelect.stories-DhqHtcmD.js → ODataSelect.stories-82q9oBl6.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect-Ol0nuytU.js → ODataTreeMultiSelect-CyFx96Sj.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect.stories-BupVzhbY.js → ODataTreeMultiSelect.stories-zLBWRIRi.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect-EkpDmDyk.js → ODataTreeSelect-DyPqYfQa.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect.stories-CFdbwyEg.js → ODataTreeSelect.stories-BSowZVpd.js} +1 -1
- package/storybook-static/assets/{OneStepScroller-rmyPl9f5.js → OneStepScroller-B_7N8BYz.js} +1 -1
- package/storybook-static/assets/Option-CVAAv8AB.css +1 -0
- package/storybook-static/assets/{Option-72PrSDkj.js → Option-DvXrygAo.js} +1 -1
- package/storybook-static/assets/{OptionButton-Br8QoJL7.js → OptionButton-CaiIhG8s.js} +1 -1
- package/storybook-static/assets/{PeriodSelect-DEZVGWGR.js → PeriodSelect-CcheHEx9.js} +1 -1
- package/storybook-static/assets/{PeriodSelect-C5Xk-g4Y.js → PeriodSelect-DQWcrf3z.js} +1 -1
- package/storybook-static/assets/{PeriodSelect.stories-BVBP97HW.js → PeriodSelect.stories-BoZAwgxD.js} +1 -1
- package/storybook-static/assets/{PickerTriggerActions-DSmRHX1I.js → PickerTriggerActions-C7iwI6po.js} +1 -1
- package/storybook-static/assets/{Popover-BpbeIq6-.js → Popover-BA61XeKS.js} +1 -1
- package/storybook-static/assets/{Popover-1KQwBxEJ.js → Popover-DemWjUAR.js} +1 -1
- package/storybook-static/assets/{Popover.stories-6RDZ0TND.js → Popover.stories-BZtYXuDy.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput-BdkKzY69.js → PresetRangeDateInput-BPRlqmwn.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput-CDhgmyFs.js → PresetRangeDateInput-QZD02nll.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput.stories-BoE41IUK.js → PresetRangeDateInput.stories-fqhQho_t.js} +1 -1
- package/storybook-static/assets/{PresetSelect-CA5AyOOy.js → PresetSelect-604ElKuM.js} +1 -1
- package/storybook-static/assets/README-BSfoRcmy.js +648 -0
- package/storybook-static/assets/README-B_PcyrCy.js +876 -0
- package/storybook-static/assets/README-Bbmv2xJo.js +860 -0
- package/storybook-static/assets/README-C1ki7lL7.js +417 -0
- package/storybook-static/assets/README-CFCpUZA-.js +1093 -0
- package/storybook-static/assets/README-CMoAGNQ5.js +282 -0
- package/storybook-static/assets/README-CN_Y4pYZ.js +273 -0
- package/storybook-static/assets/README-COR9RMzk.js +1487 -0
- package/storybook-static/assets/README-CRfJujEw.js +1309 -0
- package/storybook-static/assets/README-CZ49-EeH.js +347 -0
- package/storybook-static/assets/README-D01AizPk.js +288 -0
- package/storybook-static/assets/README-DL6uUTPo.js +694 -0
- package/storybook-static/assets/README-DSHEoxUa.js +334 -0
- package/storybook-static/assets/README-Q-znYcgF.js +338 -0
- package/storybook-static/assets/README-qNwFrtLd.js +420 -0
- package/storybook-static/assets/{RadioButton-IDzSzftl.js → RadioButton-CbD6ZIHI.js} +1 -1
- package/storybook-static/assets/{RadioButton-DCoo55ld.js → RadioButton-DndugDg6.js} +1 -1
- package/storybook-static/assets/{RadioButton.stories-BEk1uc2x.js → RadioButton.stories-DLBVXRhH.js} +1 -1
- package/storybook-static/assets/{RadioGroup-VSiqFUI1.js → RadioGroup-CtB8u1R5.js} +1 -1
- package/storybook-static/assets/{RadioGroup-CbBmuFtC.js → RadioGroup-Cvgo5T_8.js} +1 -1
- package/storybook-static/assets/{RadioGroup.stories-DR7Vskyy.js → RadioGroup.stories-L1ZkFYiC.js} +1 -1
- package/storybook-static/assets/{Scrollable-CDZ18AWy.js → Scrollable-CGvhxTPd.js} +1 -1
- package/storybook-static/assets/{Select-IWQpo0LQ.js → Select-ByBilOog.js} +1 -1
- package/storybook-static/assets/{Select-YjugVUKX.js → Select-D4MdId1m.js} +1 -1
- package/storybook-static/assets/{Select.stories-4JpnXfaB.js → Select.stories-Dt-IM20Z.js} +1 -1
- package/storybook-static/assets/{SerializableSelect-oxnbV26a.js → SerializableSelect-nkDX-4xv.js} +1 -1
- package/storybook-static/assets/{SerializableSelect.stories-CjVcuU4t.js → SerializableSelect.stories-BWozK3v0.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput-DFPke7bv.js → SingleDateTimeInput-BM3iEHnL.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput-CQ1_ABKA.js → SingleDateTimeInput-DwIACH7q.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput.stories--Nky_yBh.js → SingleDateTimeInput.stories-GluT9Gra.js} +1 -1
- package/storybook-static/assets/{Slider-DGVl0dbV.js → Slider-Cijr3rDj.js} +1 -1
- package/storybook-static/assets/{Slider-L7pqW7xG.js → Slider-DZF2K2Ew.js} +1 -1
- package/storybook-static/assets/{Slider.stories-DkqUavTk.js → Slider.stories-CKkDEud8.js} +1 -1
- package/storybook-static/assets/{SliderInput-B7U8M2UN.js → SliderInput-BpmhOQah.js} +1 -1
- package/storybook-static/assets/{SliderInput-Dn5-Dt4w.js → SliderInput-D_DduGKi.js} +1 -1
- package/storybook-static/assets/{SliderInput.stories-B9WBQOiA.js → SliderInput.stories-vb6qkP3q.js} +1 -1
- package/storybook-static/assets/{Sortable-DxdXjG1a.js → Sortable-CbhgYqYI.js} +1 -1
- package/storybook-static/assets/{Sortable.stories-D1rp2l9M.js → Sortable.stories-BGYwnEIs.js} +1 -1
- package/storybook-static/assets/{Splitter-yZpkev96.js → Splitter-CIrkYu0w.js} +1 -1
- package/storybook-static/assets/{Splitter.stories-C3TCKNhu.js → Splitter.stories-BiWcwOKt.js} +1 -1
- package/storybook-static/assets/{StateSelect-CaAFL9Jr.js → StateSelect-PvcnwH-_.js} +1 -1
- package/storybook-static/assets/{StateSelect-DZjPblfU.js → StateSelect-ZSH1VqJo.js} +1 -1
- package/storybook-static/assets/{StateSelect.stories-D7EwT0sO.js → StateSelect.stories-XIHGksRX.js} +1 -1
- package/storybook-static/assets/{StringToggle.stories-DuaWy2LK.js → StringToggle.stories-ZIPWDjST.js} +1 -1
- package/storybook-static/assets/{Switch-C0GQ2oXw.js → Switch-Bf1TvVDU.js} +1 -1
- package/storybook-static/assets/{Switch-DCNQT47U.js → Switch-DHkppwyI.js} +1 -1
- package/storybook-static/assets/{Switch.stories-CAIEfQb6.js → Switch.stories-DflM2SkS.js} +1 -1
- package/storybook-static/assets/{Table-Be1uta4G.js → Table-CzJkgWa8.js} +1 -1
- package/storybook-static/assets/Table.stories-BaalIcC1.js +207 -0
- package/storybook-static/assets/{Tabs-Co7Z92UK.js → Tabs-Cys2Volu.js} +1 -1
- package/storybook-static/assets/{Tabs.stories-D84U8aJM.js → Tabs.stories-D_fVcYeD.js} +2 -2
- package/storybook-static/assets/{TabsBox-CUpOXGdh.js → TabsBox-B9W9qy2m.js} +1 -1
- package/storybook-static/assets/{TagInput-BbLK6uxZ.js → TagInput-CnPuhz64.js} +1 -1
- package/storybook-static/assets/{TagInput.stories-D34JCfyM.js → TagInput.stories-CU9IW-n_.js} +1 -1
- package/storybook-static/assets/{Text-DtJw3wMU.js → Text-CellD6Ua.js} +1 -1
- package/storybook-static/assets/{Textarea-C9MWeqLC.js → Textarea-BIne8oBO.js} +1 -1
- package/storybook-static/assets/{Textarea-Cz6RWJdh.js → Textarea-CNJiLJKb.js} +1 -1
- package/storybook-static/assets/{Textarea.stories-DqK16XGS.js → Textarea.stories-BfgWsqEp.js} +1 -1
- package/storybook-static/assets/{TimePanel-DcZ-UUgO.js → TimePanel-BY8XyZeb.js} +1 -1
- package/storybook-static/assets/{TimePanel.stories-BafOmX3I.js → TimePanel.stories-BEqFKJd3.js} +1 -1
- package/storybook-static/assets/{Toggle-oYTkCbEJ.js → Toggle-CTmUXxr_.js} +1 -1
- package/storybook-static/assets/{Toggle-CgU6o7qM.js → Toggle-Dyiyi7DV.js} +1 -1
- package/storybook-static/assets/{Toggle.stories-CbmOBWIu.js → Toggle.stories-DysLQdUc.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect-B4WfXc4Z.js → TreeMultiSelect-CDOGzEjr.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect-DN_CYg-F.js → TreeMultiSelect-DUQQUlTr.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect.stories-DYVj6Rm6.js → TreeMultiSelect.stories-Ca1Ezfej.js} +1 -1
- package/storybook-static/assets/{TreePickerBase-8gA_hIXn.js → TreePickerBase-CHdoSW2m.js} +1 -1
- package/storybook-static/assets/{TreeSelect-2bjYl5ox.js → TreeSelect-DBpqAEoz.js} +1 -1
- package/storybook-static/assets/{TreeSelect-CTtmHF-B.js → TreeSelect-DvmeQO0H.js} +1 -1
- package/storybook-static/assets/{TreeSelect.stories-BEAY61pJ.js → TreeSelect.stories-zRpBXhMU.js} +1 -1
- package/storybook-static/assets/{TreeTable-B4BaHybr.js → TreeTable-Dpr1hsTN.js} +1 -1
- package/storybook-static/assets/{TreeTable.stories-lLwH2Gzl.js → TreeTable.stories-D4mBQSif.js} +2 -2
- package/storybook-static/assets/{WithTooltip-7X4HQR7L-Cakt_JaX.js → WithTooltip-7X4HQR7L-DQ4Qthn2.js} +1 -1
- package/storybook-static/assets/{array-D-_yMMUK-CIRmlF93.js → array-D-_yMMUK-BQ0uu1hZ.js} +1 -1
- package/storybook-static/assets/{async-DFALSYBD.js → async-phnLSjcK.js} +1 -1
- package/storybook-static/assets/axe-_9eNhXQJ.js +20 -0
- package/storybook-static/assets/{blocks-Dr191OF5.js → blocks-Dx5UE11l.js} +6 -6
- package/storybook-static/assets/check-Bn8-yPh2.js +1 -0
- package/storybook-static/assets/chevron-down-BZ9pvYFr.js +1 -0
- package/storybook-static/assets/chevron-left-DWqaY-om.js +1 -0
- package/storybook-static/assets/chevron-right-NPmcbCK0.js +1 -0
- package/storybook-static/assets/{chunk-242VQQM5-BMWWiybC.js → chunk-242VQQM5-bHL6qIJq.js} +1 -1
- package/storybook-static/assets/{chunk-DRQKCCAG-CqE-Zrl9.js → chunk-DRQKCCAG-DvsmU7ha.js} +1 -1
- package/storybook-static/assets/{chunk-IMSF75WX-yvVUwIQZ.js → chunk-IMSF75WX-CGYlPTyG.js} +1 -1
- package/storybook-static/assets/{chunk-KJHJLCBK-D-yQfkOi.js → chunk-KJHJLCBK-yRlRMfNs.js} +1 -1
- package/storybook-static/assets/{chunk-QQBDHPVZ-B98qboss.js → chunk-QQBDHPVZ-DC5n6Pix.js} +1 -1
- package/storybook-static/assets/{chunk-W22LQPXL-BR_vFDlt.js → chunk-W22LQPXL-BYQdtiug.js} +1 -1
- package/storybook-static/assets/{circle-alert-Is-jAV5H.js → circle-alert-CJwtzjGy.js} +1 -1
- package/storybook-static/assets/circle-check-DwTtGRlB.js +1 -0
- package/storybook-static/assets/{components-DqFIc_sf.js → components-Cs2kpiik.js} +12 -12
- package/storybook-static/assets/{contextMenu-CWKJO78E.js → contextMenu-B5c0sszu.js} +1 -1
- package/storybook-static/assets/{createControlledStoryRender-DHsyXc1B.js → createControlledStoryRender-BouhvX-R.js} +1 -1
- package/storybook-static/assets/{date-segments-D3HouZ37.js → date-segments-DeoMkKv9.js} +1 -1
- package/storybook-static/assets/{defaultRenderers-V5HI39JH.js → defaultRenderers-BHXboKuy.js} +1 -1
- package/storybook-static/assets/{dom-B3G_GtJw.js → dom-DBd_DWF8.js} +1 -1
- package/storybook-static/assets/{download-B61X2hm8.js → download-r-5pPKGQ.js} +1 -1
- package/storybook-static/assets/{error-BZrNlEUO.js → error-De9R4E_F.js} +1 -1
- package/storybook-static/assets/{file-vPGnhPr-.js → file-CwRoWxeB.js} +1 -1
- package/storybook-static/assets/floating-ui.react-69N16zFe.js +1 -0
- package/storybook-static/assets/formatter-L2YTDE3Q-CRGuSxAF.js +1 -0
- package/storybook-static/assets/{formatters-CBgrBeSA-DY6OIAc8.js → formatters-CBgrBeSA-CqB1pZxS.js} +1 -1
- package/storybook-static/assets/{foundationLib-10USAmEi.js → foundationLib-BIHXPLOP.js} +1 -1
- package/storybook-static/assets/{hooks-C8GJ9Cvf.js → hooks-DC_oxxhF.js} +2 -2
- package/storybook-static/assets/{iframe-Bu7ux79g.js → iframe-C5-IVaAZ.js} +23 -23
- package/storybook-static/assets/iframe-CKeBtmwl.js +1 -0
- package/storybook-static/assets/{info-CnuHFdaB.js → info-CNW3iwvW.js} +1 -1
- package/storybook-static/assets/{matchers-JIUQ3HVY-DvR2XErZ.js → matchers-JIUQ3HVY-C789_MAK.js} +1 -1
- package/storybook-static/assets/{media-BycWpjAl.js → media-D9cE2tzi.js} +1 -1
- package/storybook-static/assets/odata-CGxTTNvg.js +1 -0
- package/storybook-static/assets/{odata-service-B6TxBSLm-BW9QLSrS.js → odata-service-B6TxBSLm-Bq8Ya67E.js} +1 -1
- package/storybook-static/assets/{odataFetchFn-CAzdQ6ar.js → odataFetchFn-BS9TBmIl.js} +1 -1
- package/storybook-static/assets/{odataStoryFixtures-CX6euJaD.js → odataStoryFixtures-C83OxXaj.js} +2 -2
- package/storybook-static/assets/{persisted-BKBboERB.js → persisted-BPpV66dG.js} +1 -1
- package/storybook-static/assets/{preload-helper-BHmFeTtP.js → preload-helper-wdlQj8DP.js} +1 -1
- package/storybook-static/assets/react-18-D4o7zN8K.js +9 -0
- package/storybook-static/assets/react-B0_DoKoo.js +9 -0
- package/storybook-static/assets/{react-C21x__mS.js → react-BZJXY1be.js} +1 -1
- package/storybook-static/assets/{react-qN2cStNd.js → react-Bl2r1tuC.js} +1 -1
- package/storybook-static/assets/{react-CvkUhHUq.js → react-GkniIHEK.js} +1 -1
- package/storybook-static/assets/{react-dom-2o2phaJG.js → react-dom-BzEl8usk.js} +1 -1
- package/storybook-static/assets/{refresh-cw-ByNiehPJ.js → refresh-cw-BIVSqnGe.js} +1 -1
- package/storybook-static/assets/{rolldown-runtime-C0FnF6B9.js → rolldown-runtime-DkW27tQK.js} +1 -1
- package/storybook-static/assets/{settings-2-BGG8WBgX.js → settings-2-9-qrKLUO.js} +1 -1
- package/storybook-static/assets/{shim-BUMlC1GG.js → shim-DlYORV19.js} +1 -1
- package/storybook-static/assets/{sortable-6C6S-hq-.js → sortable-BTkW6ZiT.js} +1 -1
- package/storybook-static/assets/syntaxhighlighter-QEQV7K2Y-Ch82sVZk.js +6 -0
- package/storybook-static/assets/{theming-mTWhffkp.js → theming-Cvtrnj7n.js} +1 -1
- package/storybook-static/assets/{trash-2-EYPGQg68.js → trash-2-D4oKWLBp.js} +1 -1
- package/storybook-static/assets/{treeStoryFixtures-Ci7STpiz.js → treeStoryFixtures-DXHh9GL3.js} +1 -1
- package/storybook-static/assets/{triangle-alert-qcSLqRkW.js → triangle-alert-CBOrIa31.js} +1 -1
- package/storybook-static/assets/{ui.module-D4CuGr8r.js → ui.module-Cat84Nza.js} +1 -1
- package/storybook-static/assets/{uiClasses-CVGbL980.js → uiClasses-B9c6dZuu.js} +1 -1
- package/storybook-static/assets/{useFlexClasses-Gn9spXEB.js → useFlexClasses-SgVG37Bb.js} +1 -1
- package/storybook-static/assets/{useODataSelectBase-LQU24QnI.js → useODataSelectBase-B6fc-K7G.js} +1 -1
- package/storybook-static/assets/{useODataTreeData-0I485gNf.js → useODataTreeData-BEHsAQxw.js} +1 -1
- package/storybook-static/assets/usePickerDefaultFilter-5Q1pAV4d.js +1 -0
- package/storybook-static/assets/{usePickerQuery-B0a5nSeM.js → usePickerQuery-B-2MddV7.js} +1 -1
- package/storybook-static/assets/{usePickerTriggerController-DMRm063p.js → usePickerTriggerController-CyBsILzT.js} +1 -1
- package/storybook-static/assets/{utils-DUM89eIj.js → utils-tg3ibbzi.js} +1 -1
- package/storybook-static/assets/x-BZ_zKXO5.js +1 -0
- package/storybook-static/iframe.html +7 -7
- package/storybook-static/index.json +1 -1
- package/storybook-static/project.json +1 -1
- package/storybook-static/sb-addons/chromatic-com-storybook-1/manager-bundle.js +35 -33
- package/storybook-static/sb-manager/globals-runtime.js +7 -7
- package/storybook-static/sb-manager/globals.js +1 -1
- package/storybook-static/sb-manager/runtime.js +88 -89
- package/storybook-static/vite-inject-mocker-entry.js +2 -2
- package/dist/chunks/picker-Cb3D2Hts.js.map +0 -1
- package/storybook-static/assets/FormattedTableCell-CGREP0wz.js +0 -15
- package/storybook-static/assets/Option-CwetjUM8.css +0 -1
- package/storybook-static/assets/Table.stories-ByUJbaZl.js +0 -207
- package/storybook-static/assets/axe-Bq-2xuso.js +0 -20
- package/storybook-static/assets/browserAndReact-BDUP5jYY.js +0 -70
- package/storybook-static/assets/check-D56EYchd.js +0 -1
- package/storybook-static/assets/chevron-down-CzEzTRkp.js +0 -1
- package/storybook-static/assets/chevron-left-Dl69q13G.js +0 -1
- package/storybook-static/assets/chevron-right-CJNjsAmt.js +0 -1
- package/storybook-static/assets/circle-check-6tyIZ3Kl.js +0 -1
- package/storybook-static/assets/filesAndExcel-Bs3kqlsI.js +0 -92
- package/storybook-static/assets/floating-ui.react-bhmHzD7p.js +0 -1
- package/storybook-static/assets/formatter-L2YTDE3Q-x0raBH34.js +0 -1
- package/storybook-static/assets/formatters-NGPd1d-h.js +0 -202
- package/storybook-static/assets/formatters-runtime-CCfGWt-f.js +0 -329
- package/storybook-static/assets/iframe-BEvUkaBB.js +0 -1
- package/storybook-static/assets/odata-BslPtJet.js +0 -1
- package/storybook-static/assets/odataAndTables-Cyl3UJOz.js +0 -77
- package/storybook-static/assets/pureUtilities-Bj6GraNW.js +0 -30
- package/storybook-static/assets/react-18-CgkwBzTo.js +0 -9
- package/storybook-static/assets/react-CjYyitxm.js +0 -9
- package/storybook-static/assets/runtimeAndState-mq-BaPyx.js +0 -93
- package/storybook-static/assets/syntaxhighlighter-T5IQBZDB-B5rzfkHU.js +0 -6
- package/storybook-static/assets/usePickerDefaultFilter-Be420WNF.js +0 -1
- package/storybook-static/assets/x-FZLq51ZK.js +0 -1
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{n as t}from"./iframe-C5-IVaAZ.js";import{i as n,r}from"./react-Bl2r1tuC.js";import{l as i,m as a}from"./blocks-Dx5UE11l.js";function o(e){let t={a:`a`,code:`code`,h1:`h1`,h2:`h2`,h3:`h3`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,table:`table`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,...n(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(i,{title:`Foundation Lib/API/Formatters/Boolean`}),`
|
|
2
|
+
`,(0,c.jsxs)(t.h1,{id:`boolean-и-abap-boolean-через-ryuzaki13react-foundation-libformatters`,children:[`Boolean и ABAP boolean через `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/formatters`})]}),`
|
|
3
|
+
`,(0,c.jsxs)(t.p,{children:[`Подмодуль `,(0,c.jsx)(t.code,{children:`boolean`}),` преобразует значения между JavaScript `,(0,c.jsx)(t.code,{children:`boolean`}),` и двухсимвольным ABAP-контрактом:`]}),`
|
|
4
|
+
`,(0,c.jsxs)(t.ul,{children:[`
|
|
5
|
+
`,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`"X"`}),` — истина;`]}),`
|
|
6
|
+
`,(0,c.jsxs)(t.li,{children:[`один обычный пробел `,(0,c.jsx)(t.code,{children:`" "`}),` — ложь.`]}),`
|
|
7
|
+
`]}),`
|
|
8
|
+
`,(0,c.jsxs)(t.p,{children:[`Также он предоставляет более широкий parser `,(0,c.jsx)(t.code,{children:`parseBoolean`}),` для простых пользовательских или transport-значений.`]}),`
|
|
9
|
+
`,(0,c.jsxs)(t.p,{children:[`README рассчитан на разработчика без доступа к исходному коду. Ниже описано точное, местами неочевидное поведение всех трёх публичных функций. Особенно важно не путать строгий `,(0,c.jsx)(t.code,{children:`parseAbapBoolean`}),`, расширенный `,(0,c.jsx)(t.code,{children:`parseBoolean`}),` и truthy-семантику `,(0,c.jsx)(t.code,{children:`toAbapBoolean`}),`.`]}),`
|
|
10
|
+
`,(0,c.jsx)(t.h2,{id:`содержание`,children:`Содержание`}),`
|
|
11
|
+
`,(0,c.jsxs)(t.ul,{children:[`
|
|
12
|
+
`,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#%D0%BD%D0%B0%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B8-%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B`,children:`Назначение и границы`})}),`
|
|
13
|
+
`,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-%D0%B8-%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82`,children:`Установка и импорт`})}),`
|
|
14
|
+
`,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5-%D0%BF%D0%BE%D0%BD%D1%8F%D1%82%D0%B8%D1%8F`,children:`Минимальные понятия`})}),`
|
|
15
|
+
`,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#%D0%BA%D0%B0%D0%BA-%D0%B2%D1%8B%D0%B1%D1%80%D0%B0%D1%82%D1%8C-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8E`,children:`Как выбрать функцию`})}),`
|
|
16
|
+
`,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#parseabapboolean`,children:(0,c.jsx)(t.code,{children:`parseAbapBoolean`})})}),`
|
|
17
|
+
`,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#parseboolean`,children:(0,c.jsx)(t.code,{children:`parseBoolean`})})}),`
|
|
18
|
+
`,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#toabapboolean`,children:(0,c.jsx)(t.code,{children:`toAbapBoolean`})})}),`
|
|
19
|
+
`,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5-%D1%80%D0%B5%D1%86%D0%B5%D0%BF%D1%82%D1%8B`,children:`Практические рецепты`})}),`
|
|
20
|
+
`,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B8-%D0%B8-%D0%BE%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%87%D0%B5%D0%BD%D0%B8%D1%8F`,children:`Ошибки и ограничения`})}),`
|
|
21
|
+
`,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5`,children:`Тестирование`})}),`
|
|
22
|
+
`,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#%D0%BA%D1%80%D0%B0%D1%82%D0%BA%D0%B8%D0%B9-%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA`,children:`Краткий справочник`})}),`
|
|
23
|
+
`,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`#%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81%D1%8B-%D0%B8-%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%8B`,children:`Вопросы и ответы`})}),`
|
|
24
|
+
`]}),`
|
|
25
|
+
`,(0,c.jsx)(t.h2,{id:`назначение-и-границы`,children:`Назначение и границы`}),`
|
|
26
|
+
`,(0,c.jsx)(t.h3,{id:`что-делает-подмодуль`,children:`Что делает подмодуль`}),`
|
|
27
|
+
`,(0,c.jsxs)(t.ul,{children:[`
|
|
28
|
+
`,(0,c.jsxs)(t.li,{children:[`строго читает ABAP boolean `,(0,c.jsx)(t.code,{children:`"X"`}),`;`]}),`
|
|
29
|
+
`,(0,c.jsx)(t.li,{children:`распознаёт небольшой набор строковых true-значений;`}),`
|
|
30
|
+
`,(0,c.jsx)(t.li,{children:`применяет стандартную JavaScript truthy/falsy-семантику к нестроковым значениям;`}),`
|
|
31
|
+
`,(0,c.jsxs)(t.li,{children:[`формирует `,(0,c.jsx)(t.code,{children:`AbapBoolean`}),`, то есть `,(0,c.jsx)(t.code,{children:`"X" | " "`}),`.`]}),`
|
|
32
|
+
`]}),`
|
|
33
|
+
`,(0,c.jsx)(t.h3,{id:`чего-подмодуль-не-делает`,children:`Чего подмодуль не делает`}),`
|
|
34
|
+
`,(0,c.jsxs)(t.ul,{children:[`
|
|
35
|
+
`,(0,c.jsxs)(t.li,{children:[`не нормализует пробелы через `,(0,c.jsx)(t.code,{children:`trim()`}),`;`]}),`
|
|
36
|
+
`,(0,c.jsxs)(t.li,{children:[`не принимает `,(0,c.jsx)(t.code,{children:`"да"`}),`, `,(0,c.jsx)(t.code,{children:`"нет"`}),`, `,(0,c.jsx)(t.code,{children:`"yes"`}),`, `,(0,c.jsx)(t.code,{children:`"no"`}),`, `,(0,c.jsx)(t.code,{children:`"on"`}),`, `,(0,c.jsx)(t.code,{children:`"off"`}),`;`]}),`
|
|
37
|
+
`,(0,c.jsx)(t.li,{children:`не валидирует внешний DTO целиком;`}),`
|
|
38
|
+
`,(0,c.jsxs)(t.li,{children:[`не сообщает, почему значение было интерпретировано как `,(0,c.jsx)(t.code,{children:`false`}),`;`]}),`
|
|
39
|
+
`,(0,c.jsxs)(t.li,{children:[`не отличает отсутствующее значение от явно переданного `,(0,c.jsx)(t.code,{children:`false`}),`;`]}),`
|
|
40
|
+
`,(0,c.jsx)(t.li,{children:`не сериализует JSON, URL или OData query;`}),`
|
|
41
|
+
`,(0,c.jsxs)(t.li,{children:[`не гарантирует, что широкий `,(0,c.jsx)(t.code,{children:`toAbapBoolean(unknown)`}),` подходит конкретному backend-контракту.`]}),`
|
|
42
|
+
`]}),`
|
|
43
|
+
`,(0,c.jsx)(t.h2,{id:`установка-и-импорт`,children:`Установка и импорт`}),`
|
|
44
|
+
`,(0,c.jsx)(t.p,{children:`Установите пакет:`}),`
|
|
45
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-bash`,children:`npm install @ryuzaki13/react-foundation-lib
|
|
46
|
+
`})}),`
|
|
47
|
+
`,(0,c.jsxs)(t.p,{children:[`Все boolean helpers импортируются из единственного опубликованного subpath `,(0,c.jsx)(t.code,{children:`/formatters`}),`:`]}),`
|
|
48
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import { parseAbapBoolean, parseBoolean, toAbapBoolean } from "@ryuzaki13/react-foundation-lib/formatters";
|
|
49
|
+
|
|
50
|
+
import type { AbapBoolean } from "@ryuzaki13/react-foundation-lib/types";
|
|
51
|
+
`})}),`
|
|
52
|
+
`,(0,c.jsxs)(t.p,{children:[`Отдельного package export `,(0,c.jsx)(t.code,{children:`/formatters/boolean`}),` нет:`]}),`
|
|
53
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`// Неправильно.
|
|
54
|
+
import { parseAbapBoolean } from "@ryuzaki13/react-foundation-lib/formatters/boolean";
|
|
55
|
+
|
|
56
|
+
// Правильно.
|
|
57
|
+
import { parseAbapBoolean } from "@ryuzaki13/react-foundation-lib/formatters";
|
|
58
|
+
`})}),`
|
|
59
|
+
`,(0,c.jsx)(t.p,{children:`Функции не зависят от React, DOM или browser API и могут выполняться в browser, Node.js и worker runtime.`}),`
|
|
60
|
+
`,(0,c.jsx)(t.h2,{id:`минимальные-понятия`,children:`Минимальные понятия`}),`
|
|
61
|
+
`,(0,c.jsx)(t.h3,{id:`javascript-boolean`,children:`JavaScript boolean`}),`
|
|
62
|
+
`,(0,c.jsxs)(t.p,{children:[`Тип `,(0,c.jsx)(t.code,{children:`boolean`}),` имеет только два значения:`]}),`
|
|
63
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const enabled: boolean = true;
|
|
64
|
+
const disabled: boolean = false;
|
|
65
|
+
`})}),`
|
|
66
|
+
`,(0,c.jsxs)(t.p,{children:[`Строки `,(0,c.jsx)(t.code,{children:`"true"`}),` и `,(0,c.jsx)(t.code,{children:`"false"`}),` не являются boolean:`]}),`
|
|
67
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`typeof true; // "boolean"
|
|
68
|
+
typeof "true"; // "string"
|
|
69
|
+
`})}),`
|
|
70
|
+
`,(0,c.jsx)(t.h3,{id:`truthy-и-falsy`,children:`Truthy и falsy`}),`
|
|
71
|
+
`,(0,c.jsx)(t.p,{children:`JavaScript умеет приводить произвольное значение к boolean:`}),`
|
|
72
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`Boolean(1); // true
|
|
73
|
+
Boolean(0); // false
|
|
74
|
+
Boolean("text"); // true
|
|
75
|
+
Boolean(""); // false
|
|
76
|
+
Boolean({}); // true
|
|
77
|
+
Boolean([]); // true
|
|
78
|
+
`})}),`
|
|
79
|
+
`,(0,c.jsx)(t.p,{children:`Основные falsy-значения:`}),`
|
|
80
|
+
`,(0,c.jsxs)(t.ul,{children:[`
|
|
81
|
+
`,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`false`}),`;`]}),`
|
|
82
|
+
`,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`0`}),` и `,(0,c.jsx)(t.code,{children:`-0`}),`;`]}),`
|
|
83
|
+
`,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`0n`}),`;`]}),`
|
|
84
|
+
`,(0,c.jsxs)(t.li,{children:[`пустая строка `,(0,c.jsx)(t.code,{children:`""`}),`;`]}),`
|
|
85
|
+
`,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`null`}),`;`]}),`
|
|
86
|
+
`,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`undefined`}),`;`]}),`
|
|
87
|
+
`,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`NaN`}),`.`]}),`
|
|
88
|
+
`]}),`
|
|
89
|
+
`,(0,c.jsxs)(t.p,{children:[`Почти всё остальное truthy. В частности, строки `,(0,c.jsx)(t.code,{children:`"false"`}),`, `,(0,c.jsx)(t.code,{children:`"0 "`}),`, объекты и массивы truthy.`]}),`
|
|
90
|
+
`,(0,c.jsx)(t.h3,{id:`abap-boolean`,children:`ABAP boolean`}),`
|
|
91
|
+
`,(0,c.jsx)(t.p,{children:`Публичный тип пакета:`}),`
|
|
92
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`type AbapBoolean = "X" | " ";
|
|
93
|
+
`})}),`
|
|
94
|
+
`,(0,c.jsx)(t.p,{children:`Ложь представлена не пустой строкой, а ровно одним пробелом. Это важно при сравнении, логировании и сериализации:`}),`
|
|
95
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const value: AbapBoolean = " ";
|
|
96
|
+
|
|
97
|
+
console.log(value.length); // 1
|
|
98
|
+
console.log(value === ""); // false
|
|
99
|
+
`})}),`
|
|
100
|
+
`,(0,c.jsx)(t.h3,{id:`unknown`,children:(0,c.jsx)(t.code,{children:`unknown`})}),`
|
|
101
|
+
`,(0,c.jsxs)(t.p,{children:[`Все три функции принимают `,(0,c.jsx)(t.code,{children:`unknown`}),`. Это означает, что caller может передать любое runtime-значение, а функция сама выберет ветку обработки.`]}),`
|
|
102
|
+
`,(0,c.jsx)(t.p,{children:`Широкий вход удобен на transport boundary, но не превращает функцию в строгий validator. Если нужно отклонять неизвестные значения, сначала реализуйте явную validation policy.`}),`
|
|
103
|
+
`,(0,c.jsx)(t.h2,{id:`как-выбрать-функцию`,children:`Как выбрать функцию`}),`
|
|
104
|
+
`,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Задача`}),(0,c.jsx)(t.th,{children:`Функция`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsxs)(t.td,{children:[`Прочитать точное backend-значение `,(0,c.jsx)(t.code,{children:`"X"`}),`/`,(0,c.jsx)(t.code,{children:`" "`})]}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`parseAbapBoolean`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsxs)(t.td,{children:[`Прочитать `,(0,c.jsx)(t.code,{children:`true`}),`, `,(0,c.jsx)(t.code,{children:`"true"`}),`, `,(0,c.jsx)(t.code,{children:`"X"`}),`, `,(0,c.jsx)(t.code,{children:`"x"`}),`, `,(0,c.jsx)(t.code,{children:`1`}),`, `,(0,c.jsx)(t.code,{children:`"1"`})]}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`parseBoolean`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsxs)(t.td,{children:[`Записать JavaScript boolean в ABAP `,(0,c.jsx)(t.code,{children:`"X"`}),`/`,(0,c.jsx)(t.code,{children:`" "`})]}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`toAbapBoolean`})})]})]})]}),`
|
|
105
|
+
`,(0,c.jsx)(t.p,{children:`Для DTO с известным ABAP-контрактом предпочтительная пара:`}),`
|
|
106
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const enabled = parseAbapBoolean(dto.ENABLED);
|
|
107
|
+
const payload = { ENABLED: toAbapBoolean(enabled) };
|
|
108
|
+
`})}),`
|
|
109
|
+
`,(0,c.jsxs)(t.p,{children:[`Не заменяйте строгий parser на `,(0,c.jsx)(t.code,{children:`parseBoolean`}),` без осознанного расширения контракта: lowercase `,(0,c.jsx)(t.code,{children:`"x"`}),` строгий parser отвергает, а расширенный принимает.`]}),`
|
|
110
|
+
`,(0,c.jsx)(t.h2,{id:`parseabapboolean`,children:(0,c.jsx)(t.code,{children:`parseAbapBoolean`})}),`
|
|
111
|
+
`,(0,c.jsx)(t.h3,{id:`сигнатура`,children:`Сигнатура`}),`
|
|
112
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`function parseAbapBoolean(value: unknown): boolean;
|
|
113
|
+
`})}),`
|
|
114
|
+
`,(0,c.jsxs)(t.p,{children:[`Функция возвращает `,(0,c.jsx)(t.code,{children:`true`}),` только для строки, которая в точности равна uppercase `,(0,c.jsx)(t.code,{children:`"X"`}),`.`]}),`
|
|
115
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`parseAbapBoolean("X"); // true
|
|
116
|
+
parseAbapBoolean(" "); // false
|
|
117
|
+
`})}),`
|
|
118
|
+
`,(0,c.jsx)(t.h3,{id:`точная-таблица-поведения`,children:`Точная таблица поведения`}),`
|
|
119
|
+
`,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`Вход`}),(0,c.jsx)(t.th,{children:`Результат`}),(0,c.jsx)(t.th,{children:`Причина`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`"X"`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`true`})}),(0,c.jsx)(t.td,{children:`точное допустимое значение`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`"x"`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`false`})}),(0,c.jsx)(t.td,{children:`регистр отличается`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`" X "`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`false`})}),(0,c.jsxs)(t.td,{children:[`функция не вызывает `,(0,c.jsx)(t.code,{children:`trim()`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`"true"`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`false`})}),(0,c.jsx)(t.td,{children:`это не ABAP marker`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`"1"`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`false`})}),(0,c.jsx)(t.td,{children:`это не ABAP marker`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`" "`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`false`})}),(0,c.jsx)(t.td,{children:`ABAP false`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`""`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`false`})}),(0,c.jsx)(t.td,{children:`пустая строка`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`true`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`false`})}),(0,c.jsxs)(t.td,{children:[`функция требует строку `,(0,c.jsx)(t.code,{children:`"X"`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`1`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`false`})}),(0,c.jsxs)(t.td,{children:[`функция требует строку `,(0,c.jsx)(t.code,{children:`"X"`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`null`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`false`})}),(0,c.jsx)(t.td,{children:`любое другое значение даёт false`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`undefined`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`false`})}),(0,c.jsx)(t.td,{children:`любое другое значение даёт false`})]})]})]}),`
|
|
120
|
+
`,(0,c.jsx)(t.h3,{id:`важное-следствие`,children:`Важное следствие`}),`
|
|
121
|
+
`,(0,c.jsx)(t.p,{children:`Функция не отличает несколько разных ситуаций:`}),`
|
|
122
|
+
`,(0,c.jsxs)(t.ul,{children:[`
|
|
123
|
+
`,(0,c.jsxs)(t.li,{children:[`backend явно прислал `,(0,c.jsx)(t.code,{children:`" "`}),`;`]}),`
|
|
124
|
+
`,(0,c.jsx)(t.li,{children:`поле отсутствует;`}),`
|
|
125
|
+
`,(0,c.jsxs)(t.li,{children:[`backend прислал ошибочное `,(0,c.jsx)(t.code,{children:`"x"`}),`;`]}),`
|
|
126
|
+
`,(0,c.jsx)(t.li,{children:`backend прислал число;`}),`
|
|
127
|
+
`,(0,c.jsxs)(t.li,{children:[`caller передал `,(0,c.jsx)(t.code,{children:`null`}),`.`]}),`
|
|
128
|
+
`]}),`
|
|
129
|
+
`,(0,c.jsxs)(t.p,{children:[`Во всех случаях результат равен `,(0,c.jsx)(t.code,{children:`false`}),`. Если различие важно, проверьте внешний контракт до вызова:`]}),`
|
|
130
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`function assertAbapBoolean(value: unknown): asserts value is AbapBoolean {
|
|
131
|
+
if (value !== "X" && value !== " ") {
|
|
132
|
+
throw new TypeError("Ожидалось ABAP boolean: 'X' или один пробел");
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
assertAbapBoolean(dto.ENABLED);
|
|
137
|
+
const enabled = parseAbapBoolean(dto.ENABLED);
|
|
138
|
+
`})}),`
|
|
139
|
+
`,(0,c.jsx)(t.h2,{id:`parseboolean`,children:(0,c.jsx)(t.code,{children:`parseBoolean`})}),`
|
|
140
|
+
`,(0,c.jsx)(t.h3,{id:`сигнатура-1`,children:`Сигнатура`}),`
|
|
141
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`function parseBoolean(value: unknown): boolean;
|
|
142
|
+
`})}),`
|
|
143
|
+
`,(0,c.jsx)(t.p,{children:`Алгоритм:`}),`
|
|
144
|
+
`,(0,c.jsxs)(t.ol,{children:[`
|
|
145
|
+
`,(0,c.jsxs)(t.li,{children:[`любое falsy-значение сразу превращается в `,(0,c.jsx)(t.code,{children:`false`}),`;`]}),`
|
|
146
|
+
`,(0,c.jsxs)(t.li,{children:[`строка приводится к lowercase без `,(0,c.jsx)(t.code,{children:`trim()`}),`;`]}),`
|
|
147
|
+
`,(0,c.jsxs)(t.li,{children:[`строка считается истинной только для `,(0,c.jsx)(t.code,{children:`"true"`}),`, `,(0,c.jsx)(t.code,{children:`"x"`}),` или `,(0,c.jsx)(t.code,{children:`"1"`}),`;`]}),`
|
|
148
|
+
`,(0,c.jsxs)(t.li,{children:[`нестроковое truthy-значение обрабатывается через `,(0,c.jsx)(t.code,{children:`Boolean(value)`}),`.`]}),`
|
|
149
|
+
`]}),`
|
|
150
|
+
`,(0,c.jsx)(t.h3,{id:`строки`,children:`Строки`}),`
|
|
151
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`parseBoolean("true"); // true
|
|
152
|
+
parseBoolean("TRUE"); // true
|
|
153
|
+
parseBoolean("X"); // true
|
|
154
|
+
parseBoolean("x"); // true
|
|
155
|
+
parseBoolean("1"); // true
|
|
156
|
+
|
|
157
|
+
parseBoolean("false"); // false
|
|
158
|
+
parseBoolean("0"); // false
|
|
159
|
+
parseBoolean("yes"); // false
|
|
160
|
+
parseBoolean(" true "); // false: пробелы не обрезаются
|
|
161
|
+
parseBoolean(""); // false
|
|
162
|
+
`})}),`
|
|
163
|
+
`,(0,c.jsxs)(t.p,{children:[`Для строк функция не использует общую truthy-семантику. Например, обычная JavaScript-строка `,(0,c.jsx)(t.code,{children:`"false"`}),` truthy, но `,(0,c.jsx)(t.code,{children:`parseBoolean("false")`}),` специально возвращает `,(0,c.jsx)(t.code,{children:`false`}),`.`]}),`
|
|
164
|
+
`,(0,c.jsx)(t.h3,{id:`нестроковые-значения`,children:`Нестроковые значения`}),`
|
|
165
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`parseBoolean(true); // true
|
|
166
|
+
parseBoolean(false); // false
|
|
167
|
+
parseBoolean(1); // true
|
|
168
|
+
parseBoolean(-1); // true
|
|
169
|
+
parseBoolean(0); // false
|
|
170
|
+
parseBoolean({}); // true
|
|
171
|
+
parseBoolean([]); // true
|
|
172
|
+
parseBoolean(null); // false
|
|
173
|
+
parseBoolean(undefined); // false
|
|
174
|
+
`})}),`
|
|
175
|
+
`,(0,c.jsx)(t.p,{children:`Объект и массив не означают логическую истину предметной области. Они лишь truthy по правилам JavaScript. Не передавайте произвольный JSON object, если ожидается строгий boolean scalar.`}),`
|
|
176
|
+
`,(0,c.jsx)(t.h3,{id:`когда-применять`,children:`Когда применять`}),`
|
|
177
|
+
`,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`parseBoolean`}),` полезен, если входной контракт осознанно допускает несколько представлений:`]}),`
|
|
178
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`type FeatureFlagInput = boolean | 0 | 1 | "0" | "1" | "true" | "false" | "X" | " ";
|
|
179
|
+
|
|
180
|
+
function readFeatureFlag(value: FeatureFlagInput): boolean {
|
|
181
|
+
return parseBoolean(value);
|
|
182
|
+
}
|
|
183
|
+
`})}),`
|
|
184
|
+
`,(0,c.jsxs)(t.p,{children:[`Но обратите внимание: строка `,(0,c.jsx)(t.code,{children:`" "`}),` даст `,(0,c.jsx)(t.code,{children:`false`}),` не потому, что специально распознана как ABAP false, а потому что её нет в списке true-строк.`]}),`
|
|
185
|
+
`,(0,c.jsx)(t.h2,{id:`toabapboolean`,children:(0,c.jsx)(t.code,{children:`toAbapBoolean`})}),`
|
|
186
|
+
`,(0,c.jsx)(t.h3,{id:`сигнатура-2`,children:`Сигнатура`}),`
|
|
187
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`function toAbapBoolean(value: unknown): AbapBoolean;
|
|
188
|
+
`})}),`
|
|
189
|
+
`,(0,c.jsx)(t.p,{children:`Алгоритм имеет отдельное правило для строк:`}),`
|
|
190
|
+
`,(0,c.jsxs)(t.ol,{children:[`
|
|
191
|
+
`,(0,c.jsxs)(t.li,{children:[`если вход — строка, false означает только точная строка `,(0,c.jsx)(t.code,{children:`"0"`}),`;`]}),`
|
|
192
|
+
`,(0,c.jsx)(t.li,{children:`любая другая строка превращается в true;`}),`
|
|
193
|
+
`,(0,c.jsx)(t.li,{children:`нестроковое значение проверяется стандартной truthy/falsy-семантикой;`}),`
|
|
194
|
+
`,(0,c.jsxs)(t.li,{children:[`true возвращается как `,(0,c.jsx)(t.code,{children:`"X"`}),`, false — как один пробел `,(0,c.jsx)(t.code,{children:`" "`}),`.`]}),`
|
|
195
|
+
`]}),`
|
|
196
|
+
`,(0,c.jsx)(t.h3,{id:`рекомендуемый-вход`,children:`Рекомендуемый вход`}),`
|
|
197
|
+
`,(0,c.jsx)(t.p,{children:`Передавайте настоящий boolean:`}),`
|
|
198
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`toAbapBoolean(true); // "X"
|
|
199
|
+
toAbapBoolean(false); // " "
|
|
200
|
+
`})}),`
|
|
201
|
+
`,(0,c.jsx)(t.p,{children:`Это самый понятный и устойчивый сценарий.`}),`
|
|
202
|
+
`,(0,c.jsx)(t.h3,{id:`строки-важная-ловушка`,children:`Строки: важная ловушка`}),`
|
|
203
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`toAbapBoolean("0"); // " "
|
|
204
|
+
|
|
205
|
+
toAbapBoolean("1"); // "X"
|
|
206
|
+
toAbapBoolean("false"); // "X"
|
|
207
|
+
toAbapBoolean(""); // "X"
|
|
208
|
+
toAbapBoolean(" "); // "X"
|
|
209
|
+
toAbapBoolean("00"); // "X"
|
|
210
|
+
`})}),`
|
|
211
|
+
`,(0,c.jsxs)(t.p,{children:[`Здесь `,(0,c.jsx)(t.code,{children:`"false"`}),` не парсится как false. Функция проверяет только неравенство строке `,(0,c.jsx)(t.code,{children:`"0"`}),`.`]}),`
|
|
212
|
+
`,(0,c.jsx)(t.p,{children:`Если внешний input может содержать текстовые boolean-значения, сначала примените нужный parser:`}),`
|
|
213
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const normalized = parseBoolean(rawValue);
|
|
214
|
+
const abapValue = toAbapBoolean(normalized);
|
|
215
|
+
`})}),`
|
|
216
|
+
`,(0,c.jsx)(t.p,{children:`Результаты:`}),`
|
|
217
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`toAbapBoolean(parseBoolean("false")); // " "
|
|
218
|
+
toAbapBoolean(parseBoolean("true")); // "X"
|
|
219
|
+
`})}),`
|
|
220
|
+
`,(0,c.jsx)(t.h3,{id:`нестроковые-значения-1`,children:`Нестроковые значения`}),`
|
|
221
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`toAbapBoolean(1); // "X"
|
|
222
|
+
toAbapBoolean(0); // " "
|
|
223
|
+
toAbapBoolean(null); // " "
|
|
224
|
+
toAbapBoolean(undefined); // " "
|
|
225
|
+
toAbapBoolean({}); // "X"
|
|
226
|
+
toAbapBoolean([]); // "X"
|
|
227
|
+
`})}),`
|
|
228
|
+
`,(0,c.jsx)(t.p,{children:`Для объектов и массивов используется только truthiness. Функция не читает поля объекта и не проверяет длину массива.`}),`
|
|
229
|
+
`,(0,c.jsx)(t.h2,{id:`практические-рецепты`,children:`Практические рецепты`}),`
|
|
230
|
+
`,(0,c.jsx)(t.h3,{id:`dto--domain-model`,children:`DTO → domain model`}),`
|
|
231
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`type UserDto = {
|
|
232
|
+
IS_ACTIVE: "X" | " ";
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
type User = {
|
|
236
|
+
isActive: boolean;
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
function mapUserDto(dto: UserDto): User {
|
|
240
|
+
return {
|
|
241
|
+
isActive: parseAbapBoolean(dto.IS_ACTIVE)
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
`})}),`
|
|
245
|
+
`,(0,c.jsx)(t.h3,{id:`domain-model--dto`,children:`Domain model → DTO`}),`
|
|
246
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`type UpdateUserPayload = {
|
|
247
|
+
IS_ACTIVE: AbapBoolean;
|
|
248
|
+
};
|
|
249
|
+
|
|
250
|
+
function createUpdateUserPayload(isActive: boolean): UpdateUserPayload {
|
|
251
|
+
return {
|
|
252
|
+
IS_ACTIVE: toAbapBoolean(isActive)
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
`})}),`
|
|
256
|
+
`,(0,c.jsx)(t.h3,{id:`строгая-проверка-неизвестного-transport-значения`,children:`Строгая проверка неизвестного transport-значения`}),`
|
|
257
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`function readRequiredAbapBoolean(value: unknown): boolean {
|
|
258
|
+
if (value !== "X" && value !== " ") {
|
|
259
|
+
throw new TypeError("Некорректное ABAP boolean");
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
return parseAbapBoolean(value);
|
|
263
|
+
}
|
|
264
|
+
`})}),`
|
|
265
|
+
`,(0,c.jsxs)(t.h3,{id:`form-value-01--abap`,children:[`Form value `,(0,c.jsx)(t.code,{children:`"0"`}),`/`,(0,c.jsx)(t.code,{children:`"1"`}),` → ABAP`]}),`
|
|
266
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`function formValueToAbapBoolean(value: "0" | "1"): AbapBoolean {
|
|
267
|
+
return toAbapBoolean(value);
|
|
268
|
+
}
|
|
269
|
+
`})}),`
|
|
270
|
+
`,(0,c.jsx)(t.p,{children:`Это безопасно только потому, что TypeScript contract заранее ограничил две допустимые строки.`}),`
|
|
271
|
+
`,(0,c.jsxs)(t.h3,{id:`form-value-truefalse--abap`,children:[`Form value `,(0,c.jsx)(t.code,{children:`"true"`}),`/`,(0,c.jsx)(t.code,{children:`"false"`}),` → ABAP`]}),`
|
|
272
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`function textBooleanToAbap(value: "true" | "false"): AbapBoolean {
|
|
273
|
+
return toAbapBoolean(parseBoolean(value));
|
|
274
|
+
}
|
|
275
|
+
`})}),`
|
|
276
|
+
`,(0,c.jsxs)(t.p,{children:[`Прямой `,(0,c.jsx)(t.code,{children:`toAbapBoolean("false")`}),` дал бы `,(0,c.jsx)(t.code,{children:`"X"`}),`.`]}),`
|
|
277
|
+
`,(0,c.jsx)(t.h2,{id:`ошибки-и-ограничения`,children:`Ошибки и ограничения`}),`
|
|
278
|
+
`,(0,c.jsxs)(t.p,{children:[`Функции обычно не бросают исключения: для любого обычного значения они возвращают boolean или `,(0,c.jsx)(t.code,{children:`AbapBoolean`}),`.`]}),`
|
|
279
|
+
`,(0,c.jsx)(t.p,{children:`Но это означает silent coercion:`}),`
|
|
280
|
+
`,(0,c.jsxs)(t.ul,{children:[`
|
|
281
|
+
`,(0,c.jsx)(t.li,{children:`ошибочная форма не отклоняется;`}),`
|
|
282
|
+
`,(0,c.jsx)(t.li,{children:`неизвестное ABAP-значение превращается в false;`}),`
|
|
283
|
+
`,(0,c.jsx)(t.li,{children:`объект превращается в true в широких функциях;`}),`
|
|
284
|
+
`,(0,c.jsx)(t.li,{children:`внешние пробелы не нормализуются;`}),`
|
|
285
|
+
`,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`toAbapBoolean("false")`}),` возвращает true marker.`]}),`
|
|
286
|
+
`]}),`
|
|
287
|
+
`,(0,c.jsx)(t.p,{children:`Рекомендации:`}),`
|
|
288
|
+
`,(0,c.jsxs)(t.ul,{children:[`
|
|
289
|
+
`,(0,c.jsxs)(t.li,{children:[`используйте `,(0,c.jsx)(t.code,{children:`parseAbapBoolean`}),` для точного ABAP read;`]}),`
|
|
290
|
+
`,(0,c.jsxs)(t.li,{children:[`передавайте boolean в `,(0,c.jsx)(t.code,{children:`toAbapBoolean`}),`;`]}),`
|
|
291
|
+
`,(0,c.jsxs)(t.li,{children:[`валидируйте `,(0,c.jsx)(t.code,{children:`unknown`}),`, если неверное значение должно считаться ошибкой;`]}),`
|
|
292
|
+
`,(0,c.jsx)(t.li,{children:`не стройте бизнес-правило на общей truthy/falsy-семантике;`}),`
|
|
293
|
+
`,(0,c.jsx)(t.li,{children:`не логируйте ABAP false без кавычек: один пробел визуально незаметен.`}),`
|
|
294
|
+
`]}),`
|
|
295
|
+
`,(0,c.jsx)(t.h2,{id:`тестирование`,children:`Тестирование`}),`
|
|
296
|
+
`,(0,c.jsx)(t.p,{children:`Минимальная матрица consumer-теста:`}),`
|
|
297
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`expect(parseAbapBoolean("X")).toBe(true);
|
|
298
|
+
expect(parseAbapBoolean("x")).toBe(false);
|
|
299
|
+
expect(parseAbapBoolean(" ")).toBe(false);
|
|
300
|
+
|
|
301
|
+
expect(parseBoolean("true")).toBe(true);
|
|
302
|
+
expect(parseBoolean("X")).toBe(true);
|
|
303
|
+
expect(parseBoolean("0")).toBe(false);
|
|
304
|
+
expect(parseBoolean(" true ")).toBe(false);
|
|
305
|
+
|
|
306
|
+
expect(toAbapBoolean(true)).toBe("X");
|
|
307
|
+
expect(toAbapBoolean(false)).toBe(" ");
|
|
308
|
+
expect(toAbapBoolean("0")).toBe(" ");
|
|
309
|
+
expect(toAbapBoolean("false")).toBe("X");
|
|
310
|
+
`})}),`
|
|
311
|
+
`,(0,c.jsxs)(t.p,{children:[`Если ваш DTO объявляет поле обязательным, отдельно тестируйте runtime validation отсутствующего и неизвестного значения. Успешный `,(0,c.jsx)(t.code,{children:`parseAbapBoolean(undefined) === false`}),` не доказывает корректность DTO.`]}),`
|
|
312
|
+
`,(0,c.jsx)(t.h2,{id:`краткий-справочник`,children:`Краткий справочник`}),`
|
|
313
|
+
`,(0,c.jsxs)(t.table,{children:[(0,c.jsx)(t.thead,{children:(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.th,{children:`API`}),(0,c.jsx)(t.th,{children:`Вход`}),(0,c.jsx)(t.th,{children:`Результат`}),(0,c.jsx)(t.th,{children:`Главное правило`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`parseAbapBoolean`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`unknown`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`boolean`})}),(0,c.jsxs)(t.td,{children:[`true только для точного `,(0,c.jsx)(t.code,{children:`"X"`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`parseBoolean`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`unknown`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`boolean`})}),(0,c.jsxs)(t.td,{children:[`строки true только `,(0,c.jsx)(t.code,{children:`true`}),`, `,(0,c.jsx)(t.code,{children:`x`}),`, `,(0,c.jsx)(t.code,{children:`1`}),`; иначе truthiness`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`toAbapBoolean`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`unknown`})}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`AbapBoolean`})}),(0,c.jsxs)(t.td,{children:[`строка false только при точном `,(0,c.jsx)(t.code,{children:`"0"`})]})]})]})]}),`
|
|
314
|
+
`,(0,c.jsx)(t.h2,{id:`вопросы-и-ответы`,children:`Вопросы и ответы`}),`
|
|
315
|
+
`,(0,c.jsxs)(t.h3,{id:`почему-parseabapbooleanx-вернул-false`,children:[`Почему `,(0,c.jsx)(t.code,{children:`parseAbapBoolean("x")`}),` вернул false?`]}),`
|
|
316
|
+
`,(0,c.jsxs)(t.p,{children:[`ABAP parser регистрозависим и принимает только uppercase `,(0,c.jsx)(t.code,{children:`"X"`}),`.`]}),`
|
|
317
|
+
`,(0,c.jsxs)(t.h3,{id:`почему-parseboolean-true--вернул-false`,children:[`Почему `,(0,c.jsx)(t.code,{children:`parseBoolean(" true ")`}),` вернул false?`]}),`
|
|
318
|
+
`,(0,c.jsxs)(t.p,{children:[`Функция приводит строку к lowercase, но не вызывает `,(0,c.jsx)(t.code,{children:`trim()`}),`. Нормализуйте transport input заранее только если это разрешено его контрактом.`]}),`
|
|
319
|
+
`,(0,c.jsxs)(t.h3,{id:`почему-toabapbooleanfalse-вернул-x`,children:[`Почему `,(0,c.jsx)(t.code,{children:`toAbapBoolean("false")`}),` вернул `,(0,c.jsx)(t.code,{children:`"X"`}),`?`]}),`
|
|
320
|
+
`,(0,c.jsxs)(t.p,{children:[`Для строк функция считает ложью только точное значение `,(0,c.jsx)(t.code,{children:`"0"`}),`. Передайте boolean либо сначала вызовите `,(0,c.jsx)(t.code,{children:`parseBoolean`}),`.`]}),`
|
|
321
|
+
`,(0,c.jsx)(t.h3,{id:`почему-abap-false-выглядит-как-пустота`,children:`Почему ABAP false выглядит как пустота?`}),`
|
|
322
|
+
`,(0,c.jsxs)(t.p,{children:[`Это один обычный пробел. Проверяйте через строгое равенство и показывайте в diagnostics с кавычками или через `,(0,c.jsx)(t.code,{children:`JSON.stringify`}),`.`]}),`
|
|
323
|
+
`,(0,c.jsx)(t.h3,{id:`можно-ли-сделать-round-trip`,children:`Можно ли сделать round trip?`}),`
|
|
324
|
+
`,(0,c.jsxs)(t.p,{children:[`Для настоящего `,(0,c.jsx)(t.code,{children:`AbapBoolean`}),` — да:`]}),`
|
|
325
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`toAbapBoolean(parseAbapBoolean("X")); // "X"
|
|
326
|
+
toAbapBoolean(parseAbapBoolean(" ")); // " "
|
|
327
|
+
`})}),`
|
|
328
|
+
`,(0,c.jsx)(t.p,{children:`Для произвольной строки round trip не определён, потому что parsers и serializer используют разные правила.`}),`
|
|
329
|
+
`,(0,c.jsx)(t.h2,{id:`связанная-документация`,children:`Связанная документация`}),`
|
|
330
|
+
`,(0,c.jsxs)(t.ul,{children:[`
|
|
331
|
+
`,(0,c.jsx)(t.li,{children:(0,c.jsxs)(t.a,{href:`../README.mdx`,children:[`Обзор всего модуля `,(0,c.jsx)(t.code,{children:`formatters`})]})}),`
|
|
332
|
+
`,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`../strings/README.mdx`,children:`Строковая нормализация`})}),`
|
|
333
|
+
`,(0,c.jsx)(t.li,{children:(0,c.jsx)(t.a,{href:`../pipeline/README.mdx`,children:`Formatter pipeline`})}),`
|
|
334
|
+
`]})]})}function s(e={}){let{wrapper:t}={...n(),...e.components};return t?(0,c.jsx)(t,{...e,children:(0,c.jsx)(o,{...e})}):o(e)}var c;function l(){return(l=e((()=>{c=t(),r(),a()})))()}l();export{s as default};
|