UNPKG

@wordpress/components

Version:
202 lines (196 loc) 5.56 kB
// packages/components/src/alignment-matrix-control/index.tsx import clsx from "clsx"; import { __, isRTL } from "@wordpress/i18n"; import { useInstanceId } from "@wordpress/compose"; import { useCallback } from "@wordpress/element"; import Cell from "./cell"; import { Composite } from "../composite"; import AlignmentMatrixControlIcon from "./icon"; import { GRID, getItemId, getItemValue } from "./utils"; // packages/components/src/alignment-matrix-control/style.module.scss var css = `/** * SCSS Variables. * * Please use variables from this sheet to ensure consistency across the UI. * Don't add to this sheet unless you're pretty sure the value will be reused in many places. * For example, don't add rules to this sheet that affect block visuals. It's purely for UI. */ /** * Colors */ /** * Fonts & basic variables. */ /** * Typography */ /** * Grid System. * https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/ */ /** * Radius scale. */ /** * Elevation scale. */ /** * Dimensions. */ /** * Mobile specific styles */ /** * Editor styles. */ /** * Block & Editor UI. */ /** * Block paddings. */ /** * React Native specific. * These variables do not appear to be used anywhere else. */ .style-module__grid-container__AuKvW { direction: ltr; display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: repeat(3, 1fr); box-sizing: border-box; aspect-ratio: 1; border: 1px solid transparent; border-radius: 4px; outline: none; cursor: pointer; } .style-module__grid-row__xCH47 { grid-column: 1/-1; box-sizing: border-box; display: grid; grid-template-columns: repeat(3, 1fr); } .style-module__cell__Ovdp9 { position: relative; display: flex; align-items: center; justify-content: center; box-sizing: border-box; margin: 0; padding: 0; appearance: none; border: none; outline: none; } .style-module__point__N-8S1 { display: block; contain: strict; box-sizing: border-box; width: 6px; aspect-ratio: 1; margin: auto; color: var(--wp-components-color-gray-400, #ccc); /* Use border instead of background color so that the point shows in Windows High Contrast Mode */ border: 3px solid currentColor; /* Highlight active item */ } .style-module__cell__Ovdp9[data-active-item] .style-module__point__N-8S1 { color: var(--wp-components-color-foreground, #1e1e1e); transform: scale(1.6666666667); } .style-module__point__N-8S1 { /* Hover styles for non-active items */ } .style-module__cell__Ovdp9:not([data-active-item]):hover .style-module__point__N-8S1 { color: var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9)); } .style-module__point__N-8S1 { /* Show an outline only when interacting with keyboard */ } .style-module__cell__Ovdp9[data-focus-visible] .style-module__point__N-8S1 { outline: 1px solid var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9)); outline-offset: 1px; } @media not (prefers-reduced-motion) { .style-module__point__N-8S1 { transition-property: color, transform; transition-duration: 120ms; transition-timing-function: linear; } }`; document.head.appendChild(document.createElement("style")).appendChild(document.createTextNode(css)); var style_module_default = { "grid-container": "style-module__grid-container__AuKvW", "grid-row": "style-module__grid-row__xCH47", "cell": "style-module__cell__Ovdp9", "point": "style-module__point__N-8S1" }; // packages/components/src/alignment-matrix-control/index.tsx import { jsx as _jsx } from "react/jsx-runtime"; function UnforwardedAlignmentMatrixControl({ className, id, label = __("Alignment Matrix Control"), defaultValue = "center center", value, onChange, width = 92, ...props }) { const baseId = useInstanceId(UnforwardedAlignmentMatrixControl, "alignment-matrix-control", id); const setActiveId = useCallback((nextActiveId) => { const nextValue = getItemValue(baseId, nextActiveId); if (nextValue) { onChange?.(nextValue); } }, [baseId, onChange]); const classes = clsx("component-alignment-matrix-control", style_module_default["grid-container"], className); return /* @__PURE__ */ _jsx(Composite, { defaultActiveId: getItemId(baseId, defaultValue), activeId: getItemId(baseId, value), setActiveId, rtl: isRTL(), render: /* @__PURE__ */ _jsx("div", { ...props, className: classes, "aria-label": label, id: baseId, role: "grid", style: { width: `${width}px` } }), children: GRID.map((cells, index) => /* @__PURE__ */ _jsx(Composite.Row, { render: /* @__PURE__ */ _jsx("div", { className: style_module_default["grid-row"], role: "row" }), children: cells.map((cell) => /* @__PURE__ */ _jsx(Cell, { id: getItemId(baseId, cell), value: cell }, cell)) }, index)) }); } var AlignmentMatrixControl = Object.assign(UnforwardedAlignmentMatrixControl, { /** * Render an alignment matrix as an icon. * * ```jsx * import { AlignmentMatrixControl } from '@wordpress/components'; * * <Icon icon={<AlignmentMatrixControl.Icon value="top left" />} /> * ``` */ Icon: Object.assign(AlignmentMatrixControlIcon, { displayName: "AlignmentMatrixControl.Icon" }) }); var alignment_matrix_control_default = AlignmentMatrixControl; export { AlignmentMatrixControl, alignment_matrix_control_default as default }; //# sourceMappingURL=index.js.map