UNPKG

@wordpress/components

Version:
8 lines (7 loc) 8.98 kB
{ "version": 3, "sources": ["../../src/composite/index.tsx"], "sourcesContent": ["/**\n * Composite is a component that may contain navigable items represented by\n * Composite.Item. It's inspired by the WAI-ARIA Composite Role and implements\n * all the keyboard navigation mechanisms to ensure that there's only one\n * tab stop for the whole Composite element. This means that it can behave as\n * a roving tabindex or aria-activedescendant container.\n *\n * @see https://ariakit.org/components/composite\n */\n\n/**\n * External dependencies\n */\nimport * as Ariakit from '@ariakit/react';\n\n/**\n * WordPress dependencies\n */\nimport { isRTL } from '@wordpress/i18n';\nimport { useMemo, forwardRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\n\nimport { CompositeContext } from './context';\nimport { CompositeGroup } from './group';\nimport { CompositeGroupLabel } from './group-label';\nimport { CompositeHover } from './hover';\nimport { CompositeItem } from './item';\nimport { CompositeRow } from './row';\nimport { CompositeTypeahead } from './typeahead';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Renders a widget based on the WAI-ARIA [`composite`](https://w3c.github.io/aria/#composite)\n * role, which provides a single tab stop on the page and arrow key navigation\n * through the focusable descendants.\n *\n * @example\n * ```jsx\n * import { Composite } from '@wordpress/components';\n *\n * <Composite>\n * <Composite.Item>Item 1</Composite.Item>\n * <Composite.Item>Item 2</Composite.Item>\n * </Composite>\n * ```\n */\nexport const Composite = Object.assign(forwardRef(function Composite({\n // Composite store props\n activeId,\n defaultActiveId,\n setActiveId,\n focusLoop = false,\n focusWrap = false,\n focusShift = false,\n virtualFocus = false,\n orientation = 'both',\n rtl = isRTL(),\n // Composite component props\n children,\n disabled = false,\n // Rest props\n ...props\n}, ref) {\n // @ts-expect-error The store prop is undocumented and only used by the\n // legacy compat layer.\n const storeProp = props.store;\n const internalStore = Ariakit.useCompositeStore({\n activeId,\n defaultActiveId,\n setActiveId,\n focusLoop,\n focusWrap,\n focusShift,\n virtualFocus,\n orientation,\n rtl\n });\n const store = storeProp ?? internalStore;\n const contextValue = useMemo(() => ({\n store\n }), [store]);\n return /*#__PURE__*/_jsx(Ariakit.Composite, {\n disabled: disabled,\n store: store,\n ...props,\n ref: ref,\n children: /*#__PURE__*/_jsx(CompositeContext.Provider, {\n value: contextValue,\n children: children\n })\n });\n}), {\n /**\n * Renders a group element for composite items.\n *\n * @example\n * ```jsx\n * import { Composite } from '@wordpress/components';\n *\n * <Composite>\n * <Composite.Group>\n * <Composite.GroupLabel>Label</Composite.GroupLabel>\n * <Composite.Item>Item 1</Composite.Item>\n * <Composite.Item>Item 2</Composite.Item>\n * </CompositeGroup>\n * </Composite>\n * ```\n */\n Group: Object.assign(CompositeGroup, {\n displayName: 'Composite.Group'\n }),\n /**\n * Renders a label in a composite group. This component must be wrapped with\n * `Composite.Group` so the `aria-labelledby` prop is properly set on the\n * composite group element.\n *\n * @example\n * ```jsx\n * import { Composite } from '@wordpress/components';\n *\n * <Composite>\n * <Composite.Group>\n * <Composite.GroupLabel>Label</Composite.GroupLabel>\n * <Composite.Item>Item 1</Composite.Item>\n * <Composite.Item>Item 2</Composite.Item>\n * </CompositeGroup>\n * </Composite>\n * ```\n */\n GroupLabel: Object.assign(CompositeGroupLabel, {\n displayName: 'Composite.GroupLabel'\n }),\n /**\n * Renders a composite item.\n *\n * @example\n * ```jsx\n * import { Composite } from '@wordpress/components';\n *\n * <Composite>\n * <Composite.Item>Item 1</Composite.Item>\n * <Composite.Item>Item 2</Composite.Item>\n * <Composite.Item>Item 3</Composite.Item>\n * </Composite>\n * ```\n */\n Item: Object.assign(CompositeItem, {\n displayName: 'Composite.Item'\n }),\n /**\n * Renders a composite row. Wrapping `Composite.Item` elements within\n * `Composite.Row` will create a two-dimensional composite widget, such as a\n * grid.\n *\n * @example\n * ```jsx\n * import { Composite } from '@wordpress/components';\n *\n * <Composite>\n * <Composite.Row>\n * <Composite.Item>Item 1.1</Composite.Item>\n * <Composite.Item>Item 1.2</Composite.Item>\n * <Composite.Item>Item 1.3</Composite.Item>\n * </Composite.Row>\n * <Composite.Row>\n * <Composite.Item>Item 2.1</Composite.Item>\n * <Composite.Item>Item 2.2</Composite.Item>\n * <Composite.Item>Item 2.3</Composite.Item>\n * </Composite.Row>\n * </Composite>\n * ```\n */\n Row: Object.assign(CompositeRow, {\n displayName: 'Composite.Row'\n }),\n /**\n * Renders an element in a composite widget that receives focus on mouse move\n * and loses focus to the composite base element on mouse leave. This should\n * be combined with the `Composite.Item` component.\n *\n * @example\n * ```jsx\n * import { Composite } from '@wordpress/components';\n *\n * <Composite>\n * <Composite.Hover render={ <Composite.Item /> }>\n * Item 1\n * </Composite.Hover>\n * <Composite.Hover render={ <Composite.Item /> }>\n * Item 2\n * </Composite.Hover>\n * </Composite>\n * ```\n */\n Hover: Object.assign(CompositeHover, {\n displayName: 'Composite.Hover'\n }),\n /**\n * Renders a component that adds typeahead functionality to composite\n * components. Hitting printable character keys will move focus to the next\n * composite item that begins with the input characters.\n *\n * @example\n * ```jsx\n * import { Composite } from '@wordpress/components';\n *\n * <Composite render={ <CompositeTypeahead /> }>\n * <Composite.Item>Item 1</Composite.Item>\n * <Composite.Item>Item 2</Composite.Item>\n * </Composite>\n * ```\n */\n Typeahead: Object.assign(CompositeTypeahead, {\n displayName: 'Composite.Typeahead'\n }),\n /**\n * The React context used by the composite components. It can be used by\n * to access the composite store, and to forward the context when composite\n * sub-components are rendered across portals (ie. `SlotFill` components)\n * that would not otherwise forward the context to the `Fill` children.\n *\n * @example\n * ```jsx\n * import { Composite } from '@wordpress/components';\n * import { useContext } from '@wordpress/element';\n *\n * const compositeContext = useContext( Composite.Context );\n * ```\n */\n Context: Object.assign(CompositeContext, {\n displayName: 'Composite.Context'\n })\n});"], "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,mBAAAA;AAAA;AAAA;AAaA,cAAyB;AAKzB,kBAAsB;AACtB,qBAAoC;AAMpC,qBAAiC;AACjC,mBAA+B;AAC/B,yBAAoC;AACpC,mBAA+B;AAC/B,kBAA8B;AAC9B,iBAA6B;AAC7B,uBAAmC;AACnC,yBAA4B;AAgBrB,IAAMA,aAAY,OAAO,WAAO,2BAAW,SAASA,WAAU;AAAA;AAAA,EAEnE;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,eAAe;AAAA,EACf,cAAc;AAAA,EACd,UAAM,mBAAM;AAAA;AAAA,EAEZ;AAAA,EACA,WAAW;AAAA;AAAA,EAEX,GAAG;AACL,GAAG,KAAK;AAGN,QAAM,YAAY,MAAM;AACxB,QAAM,gBAAwB,0BAAkB;AAAA,IAC9C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,QAAQ,aAAa;AAC3B,QAAM,mBAAe,wBAAQ,OAAO;AAAA,IAClC;AAAA,EACF,IAAI,CAAC,KAAK,CAAC;AACX,SAAoB,uCAAAC,KAAa,mBAAW;AAAA,IAC1C;AAAA,IACA;AAAA,IACA,GAAG;AAAA,IACH;AAAA,IACA,UAAuB,uCAAAA,KAAK,gCAAiB,UAAU;AAAA,MACrD,OAAO;AAAA,MACP;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH,CAAC,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBF,OAAO,OAAO,OAAO,6BAAgB;AAAA,IACnC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBD,YAAY,OAAO,OAAO,wCAAqB;AAAA,IAC7C,aAAa;AAAA,EACf,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeD,MAAM,OAAO,OAAO,2BAAe;AAAA,IACjC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBD,KAAK,OAAO,OAAO,yBAAc;AAAA,IAC/B,aAAa;AAAA,EACf,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBD,OAAO,OAAO,OAAO,6BAAgB;AAAA,IACnC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBD,WAAW,OAAO,OAAO,qCAAoB;AAAA,IAC3C,aAAa;AAAA,EACf,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeD,SAAS,OAAO,OAAO,iCAAkB;AAAA,IACvC,aAAa;AAAA,EACf,CAAC;AACH,CAAC;", "names": ["Composite", "_jsx"] }