@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,282 @@
|
|
|
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/Обзор`}),`
|
|
2
|
+
`,(0,c.jsx)(t.h1,{id:`ryuzaki13react-foundation-libformatters`,children:(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/formatters`})}),`
|
|
3
|
+
`,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`formatters`}),` — большой модуль подготовки значений для интерфейса и transport-контрактов. Он работает с датами, числами, строками, boolean/ABAP-флагами, ФИО, российскими телефонами, ведущими нулями и семантическими состояниями. Для таблиц модуль также предоставляет конфигурируемый formatter pipeline и row-based формулы.`]}),`
|
|
4
|
+
`,(0,c.jsx)(t.p,{children:`Документация разделена по предметным областям, чтобы разработчику не приходилось читать один огромный файл. Этот README объясняет общие правила, помогает выбрать API и подробно описывает небольшие helpers верхнего уровня.`}),`
|
|
5
|
+
`,(0,c.jsx)(t.h2,{id:`установка`,children:`Установка`}),`
|
|
6
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-bash`,children:`npm install @ryuzaki13/react-foundation-lib
|
|
7
|
+
`})}),`
|
|
8
|
+
`,(0,c.jsx)(t.p,{children:`Пакет является ESM. Корневого импорта пакета нет. Все formatter functions и их типы импортируются из точечного entrypoint:`}),`
|
|
9
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import { formatDateAsDate, formatNumberAsDecimal2, normalizeText } from "@ryuzaki13/react-foundation-lib/formatters";
|
|
10
|
+
`})}),`
|
|
11
|
+
`,(0,c.jsxs)(t.p,{children:[`Некоторые общие типы принадлежат `,(0,c.jsx)(t.code,{children:`/types`}),`:`]}),`
|
|
12
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import type { AbapBoolean, State } from "@ryuzaki13/react-foundation-lib/types";
|
|
13
|
+
`})}),`
|
|
14
|
+
`,(0,c.jsx)(t.p,{children:`Вложенные каталоги исходников не являются package subpaths:`}),`
|
|
15
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`// Неправильно: таких exports нет.
|
|
16
|
+
// import { formatDate } from "@ryuzaki13/react-foundation-lib/formatters/date";
|
|
17
|
+
// import { formatNumber } from "@ryuzaki13/react-foundation-lib/formatters/number";
|
|
18
|
+
|
|
19
|
+
// Правильно.
|
|
20
|
+
import { formatDate, formatNumber } from "@ryuzaki13/react-foundation-lib/formatters";
|
|
21
|
+
`})}),`
|
|
22
|
+
`,(0,c.jsx)(t.h2,{id:`карта-документации`,children:`Карта документации`}),`
|
|
23
|
+
`,(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:`README`}),(0,c.jsx)(t.th,{children:`Что внутри`})]})}),(0,c.jsxs)(t.tbody,{children:[(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Boolean и ABAP-флаги`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.a,{href:`./boolean/README.mdx`,children:`boolean/README.mdx`})}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`parseAbapBoolean`}),`, `,(0,c.jsx)(t.code,{children:`parseBoolean`}),`, `,(0,c.jsx)(t.code,{children:`toAbapBoolean`}),`, truthy/falsy`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Даты и диапазоны`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.a,{href:`./date/README.mdx`,children:`date/README.mdx`})}),(0,c.jsx)(t.td,{children:`parsing, formatting, timezone, presets, calendar, education dates`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Числа`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.a,{href:`./number/README.mdx`,children:`number/README.mdx`})}),(0,c.jsx)(t.td,{children:`presets, parsing SAP-like строк, compact, zero semantics`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Строки`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.a,{href:`./strings/README.mdx`,children:`strings/README.mdx`})}),(0,c.jsx)(t.td,{children:`trim, spaces, leading zeros, truncate, русские plural forms`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Value state`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.a,{href:`./valueState/README.mdx`,children:`valueState/README.mdx`})}),(0,c.jsx)(t.td,{children:`fixed/threshold resolvers, registry, CSS presentation`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Row-based формулы`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.a,{href:`./rowBased/README.mdx`,children:`rowBased/README.mdx`})}),(0,c.jsx)(t.td,{children:`formula context, registry, dependencies и purity`})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Formatter pipeline`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.a,{href:`./pipeline/README.mdx`,children:`pipeline/README.mdx`})}),(0,c.jsx)(t.td,{children:`plan/graph, validation, compilation, runtime ячеек`})]})]})]}),`
|
|
24
|
+
`,(0,c.jsxs)(t.p,{children:[`Все эти области остаются частью одного публичного `,(0,c.jsx)(t.code,{children:`/formatters`}),` entrypoint. Деление относится к документации и организации исходников, а не к способу импорта.`]}),`
|
|
25
|
+
`,(0,c.jsx)(t.h2,{id:`быстрый-выбор-функции`,children:`Быстрый выбор функции`}),`
|
|
26
|
+
`,(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.jsx)(t.td,{children:`Показать дату`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`formatDateAsDate`}),`, `,(0,c.jsx)(t.code,{children:`formatDate`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Прочитать календарную дату`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`parseDate`}),`, `,(0,c.jsx)(t.code,{children:`parseDateValue`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Прочитать абсолютный timestamp с timezone`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`parseDateTZ`}),`, `,(0,c.jsx)(t.code,{children:`parseDateValueTZ`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Показать число`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`formatNumberAs*`}),`, `,(0,c.jsx)(t.code,{children:`formatNumber`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsxs)(t.td,{children:[`Прочитать строку `,(0,c.jsx)(t.code,{children:`"1 234,5"`}),` как число`]}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`toFiniteNumber`}),` или `,(0,c.jsx)(t.code,{children:`parseNumber`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Нормализовать необязательный текст`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`normalizeText`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Схлопнуть пробелы в пользовательском тексте`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`normalizeTextSpaces`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsxs)(t.td,{children:[`Выбрать `,(0,c.jsx)(t.code,{children:`файл/файла/файлов`})]}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`selectRussianPluralForm`}),`, `,(0,c.jsx)(t.code,{children:`formatRussianPlural`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsxs)(t.td,{children:[`Прочитать ABAP `,(0,c.jsx)(t.code,{children:`X`})]}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`parseAbapBoolean`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Сформировать ABAP boolean`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`toAbapBoolean`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Нормализовать ФИО`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`formatFullName`}),`, `,(0,c.jsx)(t.code,{children:`formatShortName`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Показать российский телефон`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`formatPhone`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Получить условно очищенный телефон`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`clearPhone`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Дополнить числовую строку нулями`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`normalizeLeadingZeros`}),` или `,(0,c.jsx)(t.code,{children:`normalizeLeadingZerosStrict`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Вычислить visual state`}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`createFixedResolver`}),`, `,(0,c.jsx)(t.code,{children:`createThresholdResolver`})]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Форматировать ячейку по сериализуемой схеме`}),(0,c.jsx)(t.td,{children:`formatter pipeline`})]})]})]}),`
|
|
27
|
+
`,(0,c.jsx)(t.h2,{id:`общие-правила`,children:`Общие правила`}),`
|
|
28
|
+
`,(0,c.jsx)(t.h3,{id:`formatter-обычно-не-является-validator-ом`,children:`Formatter обычно не является validator-ом`}),`
|
|
29
|
+
`,(0,c.jsx)(t.p,{children:`Функция может иметь fallback для невалидного значения, но это не делает данные валидными:`}),`
|
|
30
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`formatNumber("abc", "decimal"); // "0"
|
|
31
|
+
formatDateAsDate("abc"); // ""
|
|
32
|
+
`})}),`
|
|
33
|
+
`,(0,c.jsx)(t.p,{children:`Если нужно сообщить пользователю об ошибке, сначала валидируйте или парсите вход, а затем форматируйте успешный результат.`}),`
|
|
34
|
+
`,(0,c.jsxs)(t.h3,{id:`unknown-требует-понимания-coercion`,children:[(0,c.jsx)(t.code,{children:`unknown`}),` требует понимания coercion`]}),`
|
|
35
|
+
`,(0,c.jsxs)(t.p,{children:[`Некоторые функции принимают `,(0,c.jsx)(t.code,{children:`unknown`}),`, чтобы безопасно работать с внешними данными, но внутри используют разные правила:`]}),`
|
|
36
|
+
`,(0,c.jsxs)(t.ul,{children:[`
|
|
37
|
+
`,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`formatNumber`}),` применяет `,(0,c.jsx)(t.code,{children:`Number(value)`}),`;`]}),`
|
|
38
|
+
`,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`toFiniteNumber`}),` принимает только number или строку и понимает SAP-like separators;`]}),`
|
|
39
|
+
`,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`parseBoolean`}),` использует whitelist для строк и truthy/falsy для остальных значений;`]}),`
|
|
40
|
+
`,(0,c.jsxs)(t.li,{children:[`fixed value state сравнивает `,(0,c.jsx)(t.code,{children:`String(value)`}),`;`]}),`
|
|
41
|
+
`,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`normalizeText`}),` принимает только настоящий string.`]}),`
|
|
42
|
+
`]}),`
|
|
43
|
+
`,(0,c.jsx)(t.p,{children:`Не переносите ожидания от одной функции на другую.`}),`
|
|
44
|
+
`,(0,c.jsx)(t.h3,{id:`нормализуйте-на-явной-границе`,children:`Нормализуйте на явной границе`}),`
|
|
45
|
+
`,(0,c.jsx)(t.p,{children:`Функции меняют значения: обрезают пробелы, меняют регистр, удаляют нули или форматируют числа. Для формы обычно разумно хранить пользовательский draft буквально, а нормализацию выполнять при сохранении/восстановлении или другом явно выбранном переходе.`}),`
|
|
46
|
+
`,(0,c.jsx)(t.h3,{id:`глобальные-реестры-настраиваются-один-раз`,children:`Глобальные реестры настраиваются один раз`}),`
|
|
47
|
+
`,(0,c.jsx)(t.p,{children:`Date/number presets, value-state resolvers и row-based formulas хранятся на уровне загруженного модуля. Регистрируйте их в bootstrap-коде до построения formatter pipeline:`}),`
|
|
48
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`export function configureApplicationFormatters(): void {
|
|
49
|
+
registerNumberPreset({ name: "quantity-4", decimals: 4 });
|
|
50
|
+
registerDatePreset({ name: "document-date", pattern: "dd.MM.yyyy" });
|
|
51
|
+
|
|
52
|
+
configureRowBasedFormatterRegistry(createRowBasedFormatterRegistry(rowBasedDefinitions));
|
|
53
|
+
}
|
|
54
|
+
`})}),`
|
|
55
|
+
`,(0,c.jsxs)(t.p,{children:[`Функции `,(0,c.jsx)(t.code,{children:`reset*`}),` предназначены в основном для тестов. Они могут инвалидировать runtime, который уже хранит ссылки или ids.`]}),`
|
|
56
|
+
`,(0,c.jsx)(t.h3,{id:`компилируйте-горячий-runtime-заранее`,children:`Компилируйте горячий runtime заранее`}),`
|
|
57
|
+
`,(0,c.jsx)(t.p,{children:`Presets и formatter pipeline рассчитаны на множество ячеек. Не регистрируйте правила и не компилируйте pipeline в цикле рендера. Подготовьте стабильные объекты один раз, затем вызывайте готовый formatter/executor.`}),`
|
|
58
|
+
`,(0,c.jsx)(t.h2,{id:`фио`,children:`ФИО`}),`
|
|
59
|
+
`,(0,c.jsx)(t.h3,{id:`formatfullnamefullname`,children:(0,c.jsx)(t.code,{children:`formatFullName(fullName)`})}),`
|
|
60
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`function formatFullName(fullName: string): string;
|
|
61
|
+
`})}),`
|
|
62
|
+
`,(0,c.jsxs)(t.p,{children:[`Функция пытается привести ФИО к виду `,(0,c.jsx)(t.code,{children:`Фамилия Имя Отчество`}),`:`]}),`
|
|
63
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`formatFullName(" иВАНОВ иВАН иВАНОВИЧ ");
|
|
64
|
+
// "Иванов Иван Иванович"
|
|
65
|
+
|
|
66
|
+
formatFullName("петров"); // "Петров"
|
|
67
|
+
`})}),`
|
|
68
|
+
`,(0,c.jsx)(t.p,{children:`Обработка:`}),`
|
|
69
|
+
`,(0,c.jsxs)(t.ol,{children:[`
|
|
70
|
+
`,(0,c.jsxs)(t.li,{children:[`falsy string возвращает `,(0,c.jsx)(t.code,{children:`""`}),`;`]}),`
|
|
71
|
+
`,(0,c.jsx)(t.li,{children:`внешние пробелы удаляются;`}),`
|
|
72
|
+
`,(0,c.jsx)(t.li,{children:`последовательности whitespace схлопываются;`}),`
|
|
73
|
+
`,(0,c.jsx)(t.li,{children:`строка приводится к нижнему регистру;`}),`
|
|
74
|
+
`,(0,c.jsx)(t.li,{children:`у каждой из первых трёх частей первая code unit переводится в верхний регистр.`}),`
|
|
75
|
+
`]}),`
|
|
76
|
+
`,(0,c.jsxs)(t.p,{children:[`Функция предполагает порядок `,(0,c.jsx)(t.code,{children:`фамилия имя отчество`}),` и учитывает максимум три space-separated части. Всё после третьей части игнорируется.`]}),`
|
|
77
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`formatFullName("Иванов Иван Иванович младший");
|
|
78
|
+
// "Иванов Иван Иванович"
|
|
79
|
+
`})}),`
|
|
80
|
+
`,(0,c.jsxs)(t.p,{children:[`Она не знает сложные правила имён, дефисы, частицы, locale и правильный регистр вроде `,(0,c.jsx)(t.code,{children:`МакДональд`}),`. `,(0,c.jsx)(t.code,{children:`toLowerCase`}),` + первая заглавная может испортить нестандартное написание. Используйте только для данных с ожидаемой простой русской структурой.`]}),`
|
|
81
|
+
`,(0,c.jsx)(t.p,{children:`Инициалы обрабатываются минимально, без восстановления полного имени:`}),`
|
|
82
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`formatFullName("Иванов И.И."); // "Иванов И И."
|
|
83
|
+
`})}),`
|
|
84
|
+
`,(0,c.jsxs)(t.p,{children:[`Поэтому функция не является parser-ом формата `,(0,c.jsx)(t.code,{children:`Фамилия И.О.`}),` в полноценное ФИО.`]}),`
|
|
85
|
+
`,(0,c.jsx)(t.h3,{id:`formatshortnamefullname`,children:(0,c.jsx)(t.code,{children:`formatShortName(fullName)`})}),`
|
|
86
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`function formatShortName(fullName: string): string;
|
|
87
|
+
`})}),`
|
|
88
|
+
`,(0,c.jsxs)(t.p,{children:[`Создаёт вид `,(0,c.jsx)(t.code,{children:`Фамилия И.О.`}),` из первых трёх частей:`]}),`
|
|
89
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`formatShortName("иванов иван иванович"); // "Иванов И.И."
|
|
90
|
+
formatShortName("петров петр"); // "Петров П."
|
|
91
|
+
formatShortName("сидоров"); // "Сидоров"
|
|
92
|
+
`})}),`
|
|
93
|
+
`,(0,c.jsx)(t.p,{children:`Требуется корректный порядок частей. Готовая строка с двумя инициалами в одном token не разбирается полноценно:`}),`
|
|
94
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`formatShortName("Иванов И.И."); // "Иванов И."
|
|
95
|
+
`})}),`
|
|
96
|
+
`,(0,c.jsx)(t.p,{children:`Пустой token после необычной пунктуации может привести к неожиданному результату; передавайте обычную строку ФИО, а не произвольный текст.`}),`
|
|
97
|
+
`,(0,c.jsx)(t.h3,{id:`когда-не-использовать-helpers-фио`,children:`Когда не использовать helpers ФИО`}),`
|
|
98
|
+
`,(0,c.jsxs)(t.ul,{children:[`
|
|
99
|
+
`,(0,c.jsx)(t.li,{children:`для международных имён с другим порядком;`}),`
|
|
100
|
+
`,(0,c.jsx)(t.li,{children:`для юридически значимого написания;`}),`
|
|
101
|
+
`,(0,c.jsx)(t.li,{children:`для восстановления ФИО из инициалов;`}),`
|
|
102
|
+
`,(0,c.jsx)(t.li,{children:`когда четвёртая и последующие части значимы;`}),`
|
|
103
|
+
`,(0,c.jsx)(t.li,{children:`когда регистр должен сохраняться буквально.`}),`
|
|
104
|
+
`]}),`
|
|
105
|
+
`,(0,c.jsxs)(t.p,{children:[`Для структурированных данных предпочтительнее хранить `,(0,c.jsx)(t.code,{children:`surname`}),`, `,(0,c.jsx)(t.code,{children:`name`}),`, `,(0,c.jsx)(t.code,{children:`patronymic`}),` отдельно и собирать нужное представление явно.`]}),`
|
|
106
|
+
`,(0,c.jsx)(t.h2,{id:`российский-телефон`,children:`Российский телефон`}),`
|
|
107
|
+
`,(0,c.jsx)(t.h3,{id:`clearphonenumber`,children:(0,c.jsx)(t.code,{children:`clearPhone(number)`})}),`
|
|
108
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`function clearPhone(number: string): string;
|
|
109
|
+
`})}),`
|
|
110
|
+
`,(0,c.jsx)(t.p,{children:`Функция:`}),`
|
|
111
|
+
`,(0,c.jsxs)(t.ol,{children:[`
|
|
112
|
+
`,(0,c.jsx)(t.li,{children:`удаляет все нецифровые символы;`}),`
|
|
113
|
+
`,(0,c.jsx)(t.li,{children:`оставляет первые 11 цифр;`}),`
|
|
114
|
+
`,(0,c.jsxs)(t.li,{children:[`удаляет первый символ, если это `,(0,c.jsx)(t.code,{children:`7`}),` или `,(0,c.jsx)(t.code,{children:`8`}),`;`]}),`
|
|
115
|
+
`,(0,c.jsxs)(t.li,{children:[`добавляет префикс `,(0,c.jsx)(t.code,{children:`+7`}),`.`]}),`
|
|
116
|
+
`]}),`
|
|
117
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`clearPhone("8 (912) 345-67-89"); // "+79123456789"
|
|
118
|
+
clearPhone("+7 912 345-67-89 доб. 42"); // "+79123456789"
|
|
119
|
+
`})}),`
|
|
120
|
+
`,(0,c.jsxs)(t.p,{children:[`Название `,(0,c.jsx)(t.code,{children:`clearPhone`}),` не означает строгую очистку до валидного E.164. Функция всегда добавляет `,(0,c.jsx)(t.code,{children:`+7`}),` и не проверяет количество цифр:`]}),`
|
|
121
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`clearPhone(""); // "+7"
|
|
122
|
+
clearPhone("123"); // "+7123"
|
|
123
|
+
`})}),`
|
|
124
|
+
`,(0,c.jsxs)(t.p,{children:[`Если передать 11 цифр, которые начинаются не с `,(0,c.jsx)(t.code,{children:`7`}),` и не с `,(0,c.jsx)(t.code,{children:`8`}),`, все 11 останутся после добавленного `,(0,c.jsx)(t.code,{children:`+7`}),`, то есть результат не будет валидным российским номером.`]}),`
|
|
125
|
+
`,(0,c.jsx)(t.h3,{id:`formatphonenumber`,children:(0,c.jsx)(t.code,{children:`formatPhone(number)`})}),`
|
|
126
|
+
`,(0,c.jsxs)(t.p,{children:[`Форматирует только результат, который строго совпал с `,(0,c.jsx)(t.code,{children:`+7`}),` и десятью цифрами:`]}),`
|
|
127
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`formatPhone("8 (912) 345-67-89");
|
|
128
|
+
// "+7 (912) 345-67-89"
|
|
129
|
+
`})}),`
|
|
130
|
+
`,(0,c.jsxs)(t.p,{children:[`Если после `,(0,c.jsx)(t.code,{children:`clearPhone`}),` не получился полный шаблон, возвращается исходная строка `,(0,c.jsx)(t.code,{children:`number`}),`, а не частично очищённое значение:`]}),`
|
|
131
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`formatPhone("123"); // "123"
|
|
132
|
+
`})}),`
|
|
133
|
+
`,(0,c.jsx)(t.p,{children:`Это display helper, а не validator. Для формы телефона отдельно проверяйте контракт номера и храните явное transport-представление.`}),`
|
|
134
|
+
`,(0,c.jsx)(t.h2,{id:`ведущие-нули`,children:`Ведущие нули`}),`
|
|
135
|
+
`,(0,c.jsx)(t.p,{children:`В модуле есть две функции с различной семантикой.`}),`
|
|
136
|
+
`,(0,c.jsx)(t.h3,{id:`normalizeleadingzerosvalue-fixed`,children:(0,c.jsx)(t.code,{children:`normalizeLeadingZeros(value, fixed?)`})}),`
|
|
137
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`function normalizeLeadingZeros(value: unknown, fixed?: number): unknown;
|
|
138
|
+
`})}),`
|
|
139
|
+
`,(0,c.jsxs)(t.p,{children:[`Сначала функция приводит значение к числу через `,(0,c.jsx)(t.code,{children:`Number(value)`}),`. Если результат не finite, исходное значение возвращается без изменений. Затем число снова превращается в строку, поэтому исходное форматирование теряется.`]}),`
|
|
140
|
+
`,(0,c.jsxs)(t.p,{children:[`При положительном `,(0,c.jsx)(t.code,{children:`fixed`}),` целая часть дополняется слева:`]}),`
|
|
141
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`normalizeLeadingZeros("42", 5); // "00042"
|
|
142
|
+
normalizeLeadingZeros(-12.3, 4); // "-0012.3"
|
|
143
|
+
normalizeLeadingZeros("00042", 5); // "00042"
|
|
144
|
+
`})}),`
|
|
145
|
+
`,(0,c.jsxs)(t.p,{children:[`При отсутствии положительного `,(0,c.jsx)(t.code,{children:`fixed`}),` возвращается `,(0,c.jsx)(t.code,{children:`String(Number(value))`}),`:`]}),`
|
|
146
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`normalizeLeadingZeros("00042"); // "42"
|
|
147
|
+
normalizeLeadingZeros("00042", 0); // "42"
|
|
148
|
+
normalizeLeadingZeros("00042", -1); // "42"
|
|
149
|
+
`})}),`
|
|
150
|
+
`,(0,c.jsx)(t.p,{children:`Это важное отличие от комментария «ничего не делает»: для parseable входа функция всё равно нормализует его через number/string.`}),`
|
|
151
|
+
`,(0,c.jsx)(t.p,{children:`JavaScript coercion также означает:`}),`
|
|
152
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`normalizeLeadingZeros(null); // "0"
|
|
153
|
+
normalizeLeadingZeros(""); // "0"
|
|
154
|
+
normalizeLeadingZeros(false); // "0"
|
|
155
|
+
normalizeLeadingZeros(true); // "1"
|
|
156
|
+
normalizeLeadingZeros(undefined); // undefined
|
|
157
|
+
`})}),`
|
|
158
|
+
`,(0,c.jsxs)(t.p,{children:[`Используйте положительное целое `,(0,c.jsx)(t.code,{children:`fixed`}),`. Дробное, бесконечное или экстремально большое значение не является поддержанным пользовательским контрактом.`]}),`
|
|
159
|
+
`,(0,c.jsx)(t.h3,{id:`normalizeleadingzerosstrictvalue-fixed`,children:(0,c.jsx)(t.code,{children:`normalizeLeadingZerosStrict(value, fixed?)`})}),`
|
|
160
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`function normalizeLeadingZerosStrict<T>(value: T, fixed?: number): T;
|
|
161
|
+
`})}),`
|
|
162
|
+
`,(0,c.jsx)(t.p,{children:`Эта версия предназначена для строк с SAP-like grouping/decimal separators и старается сохранить тип входа.`}),`
|
|
163
|
+
`,(0,c.jsxs)(t.p,{children:[`Если `,(0,c.jsx)(t.code,{children:`fixed`}),` отсутствует, равен `,(0,c.jsx)(t.code,{children:`0`}),`, `,(0,c.jsx)(t.code,{children:`NaN`}),` или бесконечности, возвращается строго исходное значение:`]}),`
|
|
164
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`const input = " 001 234,50 ";
|
|
165
|
+
normalizeLeadingZerosStrict(input); // та же строка с пробелами
|
|
166
|
+
`})}),`
|
|
167
|
+
`,(0,c.jsx)(t.p,{children:`Для строк:`}),`
|
|
168
|
+
`,(0,c.jsxs)(t.ul,{children:[`
|
|
169
|
+
`,(0,c.jsx)(t.li,{children:`проверяется наличие хотя бы одной цифры;`}),`
|
|
170
|
+
`,(0,c.jsxs)(t.li,{children:[`число должно успешно читаться через `,(0,c.jsx)(t.code,{children:`toFiniteNumber`}),`;`]}),`
|
|
171
|
+
`,(0,c.jsx)(t.li,{children:`внешние пробелы удаляются;`}),`
|
|
172
|
+
`,(0,c.jsx)(t.li,{children:`grouping spaces из целой части удаляются;`}),`
|
|
173
|
+
`,(0,c.jsxs)(t.li,{children:[`первый `,(0,c.jsx)(t.code,{children:`.`}),` или `,(0,c.jsx)(t.code,{children:`,`}),` и дробная часть сохраняются;`]}),`
|
|
174
|
+
`,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`fixed < 0`}),` удаляет ведущие нули;`]}),`
|
|
175
|
+
`,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`fixed > 0`}),` дополняет целую часть до длины.`]}),`
|
|
176
|
+
`]}),`
|
|
177
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`normalizeLeadingZerosStrict(" 00012,50 ", -1); // "12,50"
|
|
178
|
+
normalizeLeadingZerosStrict("12,50", 5); // "00012,50"
|
|
179
|
+
normalizeLeadingZerosStrict("1 234,50", 6); // "001234,50"
|
|
180
|
+
normalizeLeadingZerosStrict("not-a-number", 5); // исходная строка
|
|
181
|
+
`})}),`
|
|
182
|
+
`,(0,c.jsx)(t.p,{children:`Для number функция возвращает number. Поэтому видимые ведущие нули исчезают при обратном преобразовании:`}),`
|
|
183
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`normalizeLeadingZerosStrict(12, 5); // 12, не "00012"
|
|
184
|
+
`})}),`
|
|
185
|
+
`,(0,c.jsxs)(t.p,{children:[`Остальные типы (`,(0,c.jsx)(t.code,{children:`null`}),`, object, boolean и т. п.) возвращаются без изменений.`]}),`
|
|
186
|
+
`,(0,c.jsxs)(t.p,{children:[`Внутри `,(0,c.jsx)(t.code,{children:`fixed`}),` приводится к 32-bit integer через bitwise operation. Передавайте небольшое целое число; дробные и очень большие значения могут быть преобразованы неожиданно.`]}),`
|
|
187
|
+
`,(0,c.jsx)(t.h3,{id:`как-выбрать`,children:`Как выбрать`}),`
|
|
188
|
+
`,(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:[`Простое значение, допустим `,(0,c.jsx)(t.code,{children:`Number(value)`})]}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`normalizeLeadingZeros`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsxs)(t.td,{children:[`Нужно сохранить строковый `,(0,c.jsx)(t.code,{children:`,`}),` и fraction`]}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`normalizeLeadingZerosStrict`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Есть grouping spaces`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`normalizeLeadingZerosStrict`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Number должен остаться number`}),(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`normalizeLeadingZerosStrict`})})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:`Нужен гарантированный display с нулями для number`}),(0,c.jsxs)(t.td,{children:[`сначала явно `,(0,c.jsx)(t.code,{children:`String`}),`, затем strict или обычная функция`]})]})]})]}),`
|
|
189
|
+
`,(0,c.jsxs)(t.p,{children:[`Не применяйте ведущие нули к бизнес-идентификаторам без уверенности: `,(0,c.jsx)(t.code,{children:`00123`}),` может быть отдельным значимым кодом, а не числом.`]}),`
|
|
190
|
+
`,(0,c.jsx)(t.h2,{id:`boolean`,children:`Boolean`}),`
|
|
191
|
+
`,(0,c.jsx)(t.p,{children:`Три функции имеют намеренно разные контракты:`}),`
|
|
192
|
+
`,(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.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.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{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.jsxs)(t.td,{children:[`строки `,(0,c.jsx)(t.code,{children:`true`}),`, `,(0,c.jsx)(t.code,{children:`x`}),`, `,(0,c.jsx)(t.code,{children:`1`}),` без учёта регистра; прочие values через truthy/falsy`]})]}),(0,c.jsxs)(t.tr,{children:[(0,c.jsx)(t.td,{children:(0,c.jsx)(t.code,{children:`toAbapBoolean`})}),(0,c.jsxs)(t.td,{children:[(0,c.jsx)(t.code,{children:`"X"`}),` или `,(0,c.jsx)(t.code,{children:`" "`}),`; среди строк только точное `,(0,c.jsx)(t.code,{children:`"0"`}),` считается false`]})]})]})]}),`
|
|
193
|
+
`,(0,c.jsxs)(t.p,{children:[`Последнее правило особенно неочевидно: `,(0,c.jsx)(t.code,{children:`toAbapBoolean("")`}),` и `,(0,c.jsx)(t.code,{children:`toAbapBoolean("false")`}),` возвращают `,(0,c.jsx)(t.code,{children:`"X"`}),`. Полная таблица и безопасные recipes приведены в `,(0,c.jsx)(t.a,{href:`./boolean/README.mdx`,children:`boolean/README.mdx`}),`.`]}),`
|
|
194
|
+
`,(0,c.jsx)(t.h2,{id:`строки`,children:`Строки`}),`
|
|
195
|
+
`,(0,c.jsx)(t.p,{children:`Строковое семейство включает:`}),`
|
|
196
|
+
`,(0,c.jsxs)(t.ul,{children:[`
|
|
197
|
+
`,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`normalizeText*`}),` и `,(0,c.jsx)(t.code,{children:`toSafeString`}),`;`]}),`
|
|
198
|
+
`,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`normalizeTextSpaces`}),` и `,(0,c.jsx)(t.code,{children:`stripInnerSpaces`}),`;`]}),`
|
|
199
|
+
`,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`stripLeadingZeros`}),` и `,(0,c.jsx)(t.code,{children:`startsWithIgnoringZeros`}),`;`]}),`
|
|
200
|
+
`,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`truncateText`}),`;`]}),`
|
|
201
|
+
`,(0,c.jsx)(t.li,{children:`русские plural forms.`}),`
|
|
202
|
+
`]}),`
|
|
203
|
+
`,(0,c.jsxs)(t.p,{children:[`Точные различия пустой строки, fallback, whitespace и Unicode описаны в `,(0,c.jsx)(t.a,{href:`./strings/README.mdx`,children:`strings/README.mdx`}),`.`]}),`
|
|
204
|
+
`,(0,c.jsx)(t.h2,{id:`даты`,children:`Даты`}),`
|
|
205
|
+
`,(0,c.jsxs)(t.p,{children:[`Date API различает floating calendar и instant timezone parsing, поддерживает ABAP/OData, Intl/pattern presets, ranges, periods и учебный календарь. Начните с `,(0,c.jsx)(t.a,{href:`./date/README.mdx`,children:`date/README.mdx`}),`, особенно с раздела о timezone.`]}),`
|
|
206
|
+
`,(0,c.jsx)(t.h2,{id:`числа`,children:`Числа`}),`
|
|
207
|
+
`,(0,c.jsxs)(t.p,{children:[`Числовой API различает `,(0,c.jsx)(t.code,{children:`formatNumber`}),` с обычным `,(0,c.jsx)(t.code,{children:`Number(value)`}),` и SAP-like parser `,(0,c.jsx)(t.code,{children:`toFiniteNumber`}),`. Presets, compact formatting, `,(0,c.jsx)(t.code,{children:`OrEmpty`}),` и registry lifecycle подробно разобраны в `,(0,c.jsx)(t.a,{href:`./number/README.mdx`,children:`number/README.mdx`}),`.`]}),`
|
|
208
|
+
`,(0,c.jsx)(t.h2,{id:`value-state`,children:`Value state`}),`
|
|
209
|
+
`,(0,c.jsxs)(t.p,{children:[`Fixed resolver сопоставляет точные строковые keys, threshold resolver делит число на сегменты. Registry ids, boundary semantics и presentation helpers описаны в `,(0,c.jsx)(t.a,{href:`./valueState/README.mdx`,children:`valueState/README.mdx`}),`.`]}),`
|
|
210
|
+
`,(0,c.jsx)(t.h2,{id:`formatter-pipeline`,children:`Formatter pipeline`}),`
|
|
211
|
+
`,(0,c.jsxs)(t.p,{children:[`Pipeline последовательно применяет `,(0,c.jsx)(t.code,{children:`rowBasedOverride`}),`, leading zeros, value state и typed formatting. Он поддерживает сериализуемые plan/graph configs, validation, dependency collection и construction-stage compilation.`]}),`
|
|
212
|
+
`,(0,c.jsxs)(t.ul,{children:[`
|
|
213
|
+
`,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.a,{href:`./pipeline/README.mdx`,children:`pipeline/README.mdx`}),` — основной runtime и config API;`]}),`
|
|
214
|
+
`,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.a,{href:`./rowBased/README.mdx`,children:`rowBased/README.mdx`}),` — host-defined formulas и их registry.`]}),`
|
|
215
|
+
`]}),`
|
|
216
|
+
`,(0,c.jsx)(t.h2,{id:`пример-единой-конфигурации-приложения`,children:`Пример единой конфигурации приложения`}),`
|
|
217
|
+
`,(0,c.jsx)(t.pre,{children:(0,c.jsx)(t.code,{className:`language-ts`,children:`import {
|
|
218
|
+
configureRowBasedFormatterRegistry,
|
|
219
|
+
createRowBasedFormatterRegistry,
|
|
220
|
+
registerDatePreset,
|
|
221
|
+
registerNumberPreset,
|
|
222
|
+
type RowBasedFormatterDefinition
|
|
223
|
+
} from "@ryuzaki13/react-foundation-lib/formatters";
|
|
224
|
+
|
|
225
|
+
const rowBasedDefinitions: RowBasedFormatterDefinition[] = [
|
|
226
|
+
{
|
|
227
|
+
id: "completion-percent",
|
|
228
|
+
name: "Процент выполнения",
|
|
229
|
+
description: "actual / planned * 100; dependencies: planned, actual",
|
|
230
|
+
fn: (ctx) => {
|
|
231
|
+
const planned = ctx.num(0);
|
|
232
|
+
return planned === 0 ? undefined : (ctx.num(1) / planned) * 100;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
];
|
|
236
|
+
|
|
237
|
+
export function configureApplicationFormatters(): void {
|
|
238
|
+
registerDatePreset({
|
|
239
|
+
name: "document-date",
|
|
240
|
+
pattern: "dd.MM.yyyy",
|
|
241
|
+
invalidFallback: "—"
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
registerNumberPreset({
|
|
245
|
+
name: "quantity-4",
|
|
246
|
+
decimals: 4
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
configureRowBasedFormatterRegistry(createRowBasedFormatterRegistry(rowBasedDefinitions));
|
|
250
|
+
}
|
|
251
|
+
`})}),`
|
|
252
|
+
`,(0,c.jsx)(t.p,{children:`Вызовите bootstrap-функцию до чтения пользовательских formatter configs и компиляции runtime fields.`}),`
|
|
253
|
+
`,(0,c.jsx)(t.h2,{id:`тестирование-formatter-кода`,children:`Тестирование formatter-кода`}),`
|
|
254
|
+
`,(0,c.jsx)(t.p,{children:`Проверяйте не только «обычный» пример:`}),`
|
|
255
|
+
`,(0,c.jsxs)(t.ul,{children:[`
|
|
256
|
+
`,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`null`}),`, `,(0,c.jsx)(t.code,{children:`undefined`}),`, `,(0,c.jsx)(t.code,{children:`""`}),`, whitespace;`]}),`
|
|
257
|
+
`,(0,c.jsx)(t.li,{children:`неправильный тип;`}),`
|
|
258
|
+
`,(0,c.jsxs)(t.li,{children:[(0,c.jsx)(t.code,{children:`NaN`}),`, `,(0,c.jsx)(t.code,{children:`Infinity`}),`, отрицательный ноль;`]}),`
|
|
259
|
+
`,(0,c.jsx)(t.li,{children:`границы threshold и date ranges;`}),`
|
|
260
|
+
`,(0,c.jsx)(t.li,{children:`timezone среды для date parsing;`}),`
|
|
261
|
+
`,(0,c.jsx)(t.li,{children:`NBSP/NNBSP в числах и строках;`}),`
|
|
262
|
+
`,(0,c.jsx)(t.li,{children:`неизвестный preset/formula id;`}),`
|
|
263
|
+
`,(0,c.jsx)(t.li,{children:`reset глобального реестра между тестами;`}),`
|
|
264
|
+
`,(0,c.jsxs)(t.li,{children:[`точный тип результата (`,(0,c.jsx)(t.code,{children:`number`}),`, `,(0,c.jsx)(t.code,{children:`string`}),`, `,(0,c.jsx)(t.code,{children:`undefined`}),`).`]}),`
|
|
265
|
+
`]}),`
|
|
266
|
+
`,(0,c.jsx)(t.p,{children:`Formatter output часто содержит locale-specific неразрывный пробел. В тесте лучше сравнивать точный ожидаемый Unicode-контракт либо явно нормализовать только тогда, когда это разрешено задачей.`}),`
|
|
267
|
+
`,(0,c.jsx)(t.h2,{id:`частые-архитектурные-ошибки`,children:`Частые архитектурные ошибки`}),`
|
|
268
|
+
`,(0,c.jsx)(t.h3,{id:`deep-import-из-исходников`,children:`Deep import из исходников`}),`
|
|
269
|
+
`,(0,c.jsxs)(t.p,{children:[`В consumer разрешён только опубликованный `,(0,c.jsx)(t.code,{children:`/formatters`}),`. Внутренние пути могут исчезнуть и не входят в npm `,(0,c.jsx)(t.code,{children:`exports`}),`.`]}),`
|
|
270
|
+
`,(0,c.jsx)(t.h3,{id:`своя-копия-formatter-а-в-приложении`,children:`Своя копия formatter-а в приложении`}),`
|
|
271
|
+
`,(0,c.jsxs)(t.p,{children:[`Если правило является общим техническим и уже покрыто модулем, используйте существующий API. Если действительно не хватает общего контракта, расширяйте foundation package и его публичный `,(0,c.jsx)(t.code,{children:`index.ts`}),`, а не копируйте helper локально.`]}),`
|
|
272
|
+
`,(0,c.jsx)(t.h3,{id:`смешивание-display-и-transport`,children:`Смешивание display и transport`}),`
|
|
273
|
+
`,(0,c.jsxs)(t.p,{children:[(0,c.jsx)(t.code,{children:`formatPhone`}),` создаёт человекочитаемый телефон, `,(0,c.jsx)(t.code,{children:`formatDateAsDateLong`}),` — локализованную дату, `,(0,c.jsx)(t.code,{children:`formatNumberAsDecimal2`}),` — UI-число. Не отправляйте display strings в API без явного transport-контракта.`]}),`
|
|
274
|
+
`,(0,c.jsx)(t.h3,{id:`невидимое-подавление-ошибок`,children:`Невидимое подавление ошибок`}),`
|
|
275
|
+
`,(0,c.jsxs)(t.p,{children:[`Некоторые formatters возвращают `,(0,c.jsx)(t.code,{children:`""`}),` или `,(0,c.jsx)(t.code,{children:`"0"`}),` для ошибки. Если источник ненадёжен, используйте parser/validator до formatter-а и решайте fallback явно.`]}),`
|
|
276
|
+
`,(0,c.jsx)(t.h3,{id:`глобальная-настройка-во-время-рендера`,children:`Глобальная настройка во время рендера`}),`
|
|
277
|
+
`,(0,c.jsx)(t.p,{children:`Preset и formula registries — application configuration, а не component state.`}),`
|
|
278
|
+
`,(0,c.jsx)(t.h2,{id:`публичная-граница`,children:`Публичная граница`}),`
|
|
279
|
+
`,(0,c.jsxs)(t.p,{children:[`Фактическим источником истины является `,(0,c.jsx)(t.a,{href:`./index.ts`,children:(0,c.jsx)(t.code,{children:`index.ts`})}),`. Документируются только exports, достижимые через `,(0,c.jsx)(t.code,{children:`@ryuzaki13/react-foundation-lib/formatters`}),`.`]}),`
|
|
280
|
+
`,(0,c.jsxs)(t.p,{children:[`Например, внутренний файл `,(0,c.jsx)(t.code,{children:`formatTagAsHashtag.ts`}),` сейчас не экспортирован из публичного index и поэтому не является поддерживаемым API. Наличие файла в repository не разрешает consumer делать private import.`]}),`
|
|
281
|
+
`,(0,c.jsx)(t.h2,{id:`следующий-шаг`,children:`Следующий шаг`}),`
|
|
282
|
+
`,(0,c.jsxs)(t.p,{children:[`Если нужна одна простая функция, выберите строку в таблице быстрого выбора. Если настраивается таблица или сохраняемый пользовательский config, начните с `,(0,c.jsx)(t.a,{href:`./pipeline/README.mdx`,children:`formatter pipeline`}),` и затем откройте документы зависимых областей.`]})]})}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};
|