gutengeek/components
Composer 安装命令:
composer require gutengeek/components
包简介
Gutengeek Components Advanced Controls for GutenBerg
README 文档
README
# Gutengeek - Components Reference
The package is a library that provides all components to create control power and UI beauty block inspector easily. This is a part of GutenGeek plugin. Check out Full Features Gutengeek Blocks.
Installation
Install the composer package
cd path/to/your-[plugin|theme] composer require gutengeek/components
Make sure autoload.php had included
// require autoload into your plugin or theme require_once 'path/to/project/vendor/autoload.php';
Or - Install the npm package
cd path/to/your-folder
npm i @gutengeek/components
Requirement
// make sure 'wp_enqueue_script' function enqueued with dependencies required // example wp_register_script( 'gutengeek-advanced-components', YOUR_PLUGIN_URL . 'path/to/blocks/scripts/index.js', [ 'wp-edit-post', 'wp-blocks', 'wp-i18n', 'wp-element', 'wp-components', 'wp-editor', 'wp-api-fetch', 'wp-compose', 'wp-data' ], false, true );
Usage
Within GutenGeek Plugin plugin, these components can be accessed by importing from the wp.gutengeek.components root directory:
// use with gtg-advanced-blocks wordpress plugin const { BorderControl } = wp.gutengeek.components // import via npm import Components from "@gutengeek/components"; import '@gutengeek/components/build/core.css'; import '@gutengeek/components/build/index.css';
/** * GutenBerg dependencies */ const { InspectorControls } = wp.blockEditor; const { __ } = wp.i18n; const { PanelBody, } = wp.components; /** * GutenGeek dependencies */ const { BorderControl } = wp.gutengeek.components export default function MyComponent() { const [ device, setDevice ] = useState( 'desktop' ); // desktop, tablet, mobile const [ value, setValue ] = useState( {} ); // border control value default is an object return <InspectorControls> <PanelBody title={ __('My Panel Body') }> <BorderControl className="your-extra-class" title={ __( 'Border' ) } value={ value } onChangeDevice={ ( device ) => setDevice(device) } device={ device } onChange={ value => setValue( value ) } units={ [ 'px', 'em', '%' ] } /> </PanelBody> </InspectorControls> }
Gutengeek Toolbar Components Available:
ShapeControl
SizeTypeUnits
GradientControl
IconPickerControl
PaddingControl
MarginControl
HeadingControl
RangeSlider
BackgroundControl
Typography
AlignmentsControl
BorderControl
BorderRadiusControl
BoxShadowControl
TransformControl
ButtonGroupControl
Dimension
ParallaxControls
Color
MediaControl
TransitionControl
ResponsiveControl
InspectorTabs
InspectorTab
Development Guideline
ShapeControl
By using Gutengeek, you can easily control all shape dividers which separate the section of page. Able to choose shape top & shape bottom.
const shapes = { 'mask01' : '<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1920 470" style="enable-background:new 0 0 1920 470;" xml:space="preserve"> <path d="M0,0h1920v310L0,470V0z"/> </svg>' 'mask02' : '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 1920 160" style="enable-background:new 0 0 1920 160;" xml:space="preserve"> <g style="transform: rotate3d(-180, 0, 0, -180deg); transform-origin: center"><polygon points="1920,160 1920,0 0,160 "/></g> </svg>' } export default function MyComponent( props ) { const { attributes: { shape }, setAttributes } = props const [ device, setDevice ] = useState( 'desktop' ); return <InspectorControls> <PanelBody title={ __('My Panel Body') }> <ShapeControl value={ shape } shapes={shapes} device={ device } onChangeDevice={ ( device ) => setDevice( device ) } onChange={ ( value ) => setAttributes( { shape: value } ) } /> </PanelBody> </InspectorControls> }
SizeTypeUnits
Gutengeek offers options for units to measure size, type as px, em, rem, % in CSS.
export default function MyComponent() { const [ value, setValue ] = useState( 'em' ); // default value maybe em, px, %, vh, vw, whatever you want return <InspectorControls> <PanelBody title={ __('My Panel Body') }> <SizeTypeUnit units={ ['px', 'em', '%'] } value={ value } onClick={ ( value ) => setValue( value ) }/> </PanelBody> </InspectorControls> }
GradientControl
Support CSS Gradients to let show off a smooth color between at least 2 or more colors.
<GradientControl value={ value } onChange={ ( value ) => setAttributes({value: value}) } presetAllowed={true}/>
IconPickerControl
Support to show/display all icons from font awesome to let you choose icon for button, list bullets, social network icon in order to impress customers at the first sight.
const icons = { 500px: { label: "500px", search: { terms: [] }, styles: ["brands"], svg: { brands: { path: "M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2h.3v-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7 8.5-28.6 53 0 89.4-10.1 89.4-64.4 0-61-77.1-89.6-116.9-44.6-23.5 26.4-17.6 42.1-17.6 157.6 50.7 31 118.3 22 160.4-20.1 24.8-24.8 38.5-58 38.5-93 0-35.2-13.8-68.2-38.8-93.3-24.8-24.8-57.8-38.5-93.3-38.5s-68.8 13.8-93.5 38.5c-.3.3-16 16.5-21.2 23.9l-.5.6c-3.3 4.7-6.3 9.1-20.1 6.1-6.9-1.7-14.3-5.8-14.3-11.8V20c0-5 3.9-10.5 10.5-10.5h241.3c8.3 0 8.3 11.6 8.3 15.1 0 3.9 0 15.1-8.3 15.1H130.3v132.9h.3c104.2-109.8 282.8-36 282.8 108.9 0 178.1-244.8 220.3-310.1 62.8zm63.3-260.8c-.5 4.2 4.6 24.5 14.6 20.6C306 56.6 384 144.5 390.6 144.5c4.8 0 22.8-15.3 14.3-22.8-93.2-89-234.5-57-238.3-38.2zM393 414.7C283 524.6 94 475.5 61 310.5c0-12.2-30.4-7.4-28.9 3.3 24 173.4 246 256.9 381.6 121.3 6.9-7.8-12.6-28.4-20.7-20.4zM213.6 306.6c0 4 4.3 7.3 5.5 8.5 3 3 6.1 4.4 8.5 4.4 3.8 0 2.6.2 22.3-19.5 19.6 19.3 19.1 19.5 22.3 19.5 5.4 0 18.5-10.4 10.7-18.2L265.6 284l18.2-18.2c6.3-6.8-10.1-21.8-16.2-15.7L249.7 268c-18.6-18.8-18.4-19.5-21.5-19.5-5 0-18 11.7-12.4 17.3L234 284c-18.1 17.9-20.4 19.2-20.4 22.6z" }, viewBox: [0, 0, 448, 512] } }, search: { label: "Ad", search: { terms: [] }, styles: ["solid"], svg: { solid: { path: ""M157.52 272h36.96L176 218.78 157.52 272zM352 256c-13.23 0-24 10.77-24 24s10.77 24 24 24 24-10.77 24-24-10.77-24-24-24zM464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM250.58 352h-16.94c-6.81 0-12.88-4.32-15.12-10.75L211.15 320h-70.29l-7.38 21.25A16 16 0 0 1 118.36 352h-16.94c-11.01 0-18.73-10.85-15.12-21.25L140 176.12A23.995 23.995 0 0 1 162.67 160h26.66A23.99 23.99 0 0 1 212 176.13l53.69 154.62c3.61 10.4-4.11 21.25-15.11 21.25zM424 336c0 8.84-7.16 16-16 16h-16c-4.85 0-9.04-2.27-11.98-5.68-8.62 3.66-18.09 5.68-28.02 5.68-39.7 0-72-32.3-72-72s32.3-72 72-72c8.46 0 16.46 1.73 24 4.42V176c0-8.84 7.16-16 16-16h16c8.84 0 16 7.16 16 16v160z"" }, viewBox: [0, 0, 512, 512] } } } <IconPickerControl icons={icons} renderIcon={(icon) => { console.log(icon); return ( // render your icon here ) } } label={ __( 'Icon' ) } value={ value } onChange={ value => setAttributes( { value: value } ) } /> // renderIcon is optional, default icon will be render as svg
PaddingControl
Set space for around element's contents,. There are settings for padding ( top, right, bottom, left)
const [ device, setDevice ] = useState( 'desktop' );
<PaddingControl value={ padding } label={__( 'Padding' )} onChange={ ( value ) => setAttributes({ padding: value } )} device={ device} onChangeDevice={ (value) => setDevice(value) } units={ [ 'px', 'em', '%' ] } />
MarginControl
Setting the margin for each side of an element with border (top, right, bottom, and left).
const [ device, setDevice ] = useState( 'desktop' );
<MarginControl value={ margin } label={__( 'Margin' )} onChange={ ( value ) => setAttributes({ margin: value } )} device={ device} onChangeDevice={ (value) => setDevice(value) } units={ [ 'px', 'em', '%' ] } />
HeadingControl
Allows to choose heading tag: h1, h2, h3, h4, h5, h6
<HeadingControl label={ __( 'Heading Tag' ) } value={ headingTag } onChange={ ( value ) => setAttributes( { headingTag: value } ) } />
RangeSlider
Drag and drop number, support on the different devices.
const [ device, setDevice ] = useState( 'desktop' );
<RangeSlider label={ __( 'Column Gap' ) } value={ marginBottom } min={ 1 } max={ 33 } onChange={ ( value ) => setAttributes( { marginBottom: value } ) } units={['px', 'em', '%']} min={0} max={100} device={device} onChangeDevice={ ( device ) => setDevice( device ) } allowReset />
BackgroundControl
Choose Normal & Hover. Possible to set background: Color, Gradient, Video & Images
const [ device, setDevice ] = useState( 'desktop' );
<BackgroundControl className="your-extra-class" label={ __( 'Background' ) } value={ background } allows={ [ 'color', 'gradient', 'image' ] } device={ gutengeek_device_mode } onChange={ value => setAttributes( { background: value } ) } onChangeDevice={ ( device ) => setDevice( device ) } />
Typography
Font size, font family, variants, font style, font weight, text transform controls
const [ device, setDevice ] = useState( 'desktop' );
<Typography label={ __( 'Typography' ) } value={ headingTypo } onChange={ value => setAttributes( { headingTypo: value } ) } device={ gutengeek_device_mode } onChangeDevice={ value => setDevice(value) } />
AlignmentsControl
Possible to set text-align in CSS with Align center, wide width, full width
<AlignmentsControl className="your-prefix" label={ __( 'Text Alignment' ) } device={ device } onChangeDevice={ ( device ) => setDevice( device ) } value={ value } onChange={ ( value ) => setAttributes( { value: value } ) } toggle={true} options={[ { label: __('Left'), value: 'left', text: __( 'Left' ) }, { label: __('Center'), value: 'center', text: __( 'Center' ) }, { label: text: __( 'Right' ), value: 'right', text: __( 'Right' ) }, ]} />
BorderControl
Enable/disable border in css, set position, width (px, em, %), border shape.
<BorderControl className="your-extra-class" title={ __( 'Border' ) } value={ value } onChangeDevice={ ( device ) => setDevice(device) } device={ device } onChange={ value => setValue( value ) } units={ [ 'px', 'em', '%' ] } />
BorderRadius
Defines the radius in CSS of the element's corners
<BorderRadiusControl className="your-extra-classs" label={ __( 'Border Radius' ) } units={ [ 'px', 'em', '%' ] } value={ value } responsive={ true } device={ device } onChangeDevice={ ( device ) => setDevice( device ) } min={ 0 } max={ 100 } onChange={ value => setAttributes( { value: value } ) } />
BoxShadowControl
Choose box shadow in CSS
const [ device, setDevice ] = useState( 'desktop' );
<BoxShadowControl value={ boxShadow } device={ device } unit='px' onChangeDevice={ ( device ) => setDevice( device ) } onChange={ value => setAttributes( { boxShadow: value } ) } />
TransformControl
All attribute transform in CSS
const [ device, setDevice ] = useState( 'desktop' );
<TransformControl label={ __( 'Transform' ) } value={ transform } onChange={(value) => setAttributes( { transform: value } )} device={ device} onChangeDevice={ ( device ) => setDevice( device ) } />
ButtonGroupControl
Enable/disable buttons, type, size, enable/disable typography, Text, link (Open new window, same window), margin & icon. Only hover ( enable/disable), Icon Position, Icon Spacing,
<ButtonGroupControl className="your-extra-class" label={ __( 'Button Position' ) } value={ position } options={ [ { value: 'left', label: <Dashicon icon="arrow-left"/>, text: __( 'Left' ) }, { value: 'right', label: <Dashicon icon="arrow-right"/>, text: __( 'Right' ) }, ] } toggle={ true } onClick={ ( value ) => setAttributes( { position: value } ) } />
Dimension
Set padding & margin with Top, Right, Bottom & Left with options px, em, rem, % in CSS.
<Dimension label={ __( 'Card Padding' ) } value={ cardPadding } device={ gutengeek_device_mode } min={ 0 } max={ 500 } onChangeDevice={ ( device ) => this.props.setDevice(device) } onChange={ value => setAttributes( { panelSpacing: value } ) } />
ParallaxControls
Enable/disable parallax control, event type, items #1 (select image, width, height, position, Speed, Duration, Index)
<ParallaxControls parallax={parallax} onChange={(value) => setAttributes({ parallax: { ...parallax, ...value } })}/>
Color
Pick a suitable color from pallet
<Color className="your-extra-class" label={ __( 'Color' ) } value={ color } onChange={ ( value ) => setAttributes( { color: value } ) }/>
Media
Upload media to library or import media url.
<MediaControl label={ __( 'Select Image' ) } multiple={ false } type={ [ 'image', 'color', 'gradient', 'video' ] } value={ iconImg } panel={ true } onChange={ media => setAttributes( { iconImg: media } ) } />
TransitionControl
Attributes transition effects controls in CSS
<TransitionControl value={ transition } onChange={(value) => setAttributes({ transition: value } )}/>
ResponsiveControl
Options for Hide/enable on devices as desktop, tablet, mobile
const [ device, setDevice ] = useState( 'desktop' ); const [ unit, setUnit ] = useState( 'px' );
<ResponsiveControl label={ label } device={ device } units={ [ 'px', 'em' ] } unit={ unit } onChangeSizeType={ ( value ) => setUnit( value ) } onChangeDevice={ ( value ) => setDevice( value ) }> { ( deviceMode ) => { return ( // return your children component ); } }
InspectorTabs & InspectorTab
Split tab layout, style, advanced
<InspectorControls> <InspectorTabs tabs={[ 'layout', 'style', 'advanced' ]} active="advanced"> <InspectorTab key="layout"> // do something </InspectorTab> <InspectorTab key="style"> // do something </InspectorTab> <InspectorTab key="advanced"> // do something </InspectorTab> </InspectorTabs> </InspectorControls>
Tabs & Tab
Split tab hover, active state
<Tabs tabs={[ { name: 'normal', label: __( 'Normal' ) }, { name: 'hover', label: __( 'Hover' ) } ]} onChange={(value) => setState( { state: value } )}> <Tab key="normal"> // do something </Tab> <Tab key="hover"> // do something </Tab> </Tabs>
URL
URL full option
// imageUrl: object <URL label={ __( 'URL' ) } value={imageUrl} onChange={value => setAttributes({ imageUrl: value })} />
gutengeek/components 适用场景与选型建议
gutengeek/components 是一款 基于 JavaScript 开发的 Composer 扩展包,目前已累计 14 次下载、GitHub Stars 达 1, 最近一次更新时间为 2020 年 06 月 19 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「library」 「wordpress」 「components」 「gutenberg」 「gutengeek」 「block-controls」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 gutengeek/components 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 gutengeek/components 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 gutengeek/components 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Inbox pattern process implementation for your Laravel Applications
Web Font Loader gives you added control when using linked fonts via @font-face.
Core library that defines common interfaces used by the rest of the intahwebz..
Ariadne Component Library: xml writer and parser Component
Amqp classes
Ariadne Component Library: Cache Component
统计信息
- 总下载量: 14
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 6
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2020-06-19