@planningcenter/tapestry 3.6.1-qa-1035.0 → 3.7.0
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/components/flex/Flex.d.ts +19 -3
- package/dist/components/flex/Flex.d.ts.map +1 -1
- package/dist/components/flex/Flex.js +5 -3
- package/dist/components/flex/Flex.js.map +1 -1
- package/dist/components/link/BaseLink.d.ts +1 -3
- package/dist/components/link/BaseLink.d.ts.map +1 -1
- package/dist/components/link/BaseLink.js.map +1 -1
- package/dist/components/link/Link.d.ts +2 -1
- package/dist/components/link/Link.d.ts.map +1 -1
- package/dist/components/link/Link.js.map +1 -1
- package/dist/index.css +1536 -0
- package/dist/index.css.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/reactRender.css +2996 -2228
- package/dist/reactRender.css.map +1 -1
- package/dist/reactRenderLegacy.css +2996 -2228
- package/dist/reactRenderLegacy.css.map +1 -1
- package/dist/unstable.css +3944 -3176
- package/dist/unstable.css.map +1 -1
- package/dist/unstable.d.ts +0 -1
- package/dist/unstable.d.ts.map +1 -1
- package/dist/unstable.js +1 -1
- package/dist/utilities/containerQuery.d.ts +80 -0
- package/dist/utilities/containerQuery.d.ts.map +1 -0
- package/dist/utilities/containerQuery.js +180 -0
- package/dist/utilities/containerQuery.js.map +1 -0
- package/dist/utilities/cssRegistry.d.ts +20 -0
- package/dist/utilities/cssRegistry.d.ts.map +1 -0
- package/dist/utilities/cssRegistry.js +65 -0
- package/dist/utilities/cssRegistry.js.map +1 -0
- package/dist/utilities/spacingTokens.d.ts +14 -1
- package/dist/utilities/spacingTokens.d.ts.map +1 -1
- package/dist/utilities/spacingTokens.js +18 -0
- package/dist/utilities/spacingTokens.js.map +1 -0
- package/dist/utilities/typeUtils.d.ts +4 -0
- package/dist/utilities/typeUtils.d.ts.map +1 -0
- package/dist/utilities/useContainerClass.d.ts +2 -0
- package/dist/utilities/useContainerClass.d.ts.map +1 -0
- package/dist/utilities/useContainerClass.js +25 -0
- package/dist/utilities/useContainerClass.js.map +1 -0
- package/dist/utilities/useInsertionEffect.d.ts +3 -0
- package/dist/utilities/useInsertionEffect.d.ts.map +1 -0
- package/dist/utilities/useInsertionEffect.js +9 -0
- package/dist/utilities/useInsertionEffect.js.map +1 -0
- package/package.json +5 -5
|
@@ -18,7 +18,6 @@ interface FlexSizing {
|
|
|
18
18
|
/** The flex shrink factor of this flex item. */
|
|
19
19
|
shrink?: 0 | 1;
|
|
20
20
|
}
|
|
21
|
-
export type FlexResponsive = Partial<Record<Breakpoint, Omit<FlexBaseProps, "as" | "expand" | "inline" | "responsive">>>;
|
|
22
21
|
export type FlexElement = "article" | "aside" | "dd" | "div" | "dl" | "dt" | "footer" | "header" | "li" | "main" | "nav" | "ol" | "section" | "ul";
|
|
23
22
|
type FlexBaseProps = {
|
|
24
23
|
/** The alignment of children along the cross axis. */
|
|
@@ -44,8 +43,11 @@ type FlexBaseProps = {
|
|
|
44
43
|
/** The padding on the inline axis. Overrides `padding` on the inline axis. Tapestry spacing scale. */
|
|
45
44
|
paddingInline?: Spacing;
|
|
46
45
|
/**
|
|
47
|
-
* Responsive overrides.
|
|
46
|
+
* Responsive overrides. Accepts viewport breakpoint keys and/or a
|
|
47
|
+
* `container` map of container query conditions.
|
|
48
|
+
* **`container` is experimental.**
|
|
48
49
|
* @example { md: { direction: "row", gap: 2 } }
|
|
50
|
+
* @example { container: { "(inline-size > 20rem)": { direction: "row" } } }
|
|
49
51
|
*/
|
|
50
52
|
responsive?: FlexResponsive;
|
|
51
53
|
/** The row gap between children. Overrides `gap` on the row axis. Tapestry spacing scale. */
|
|
@@ -53,6 +55,20 @@ type FlexBaseProps = {
|
|
|
53
55
|
/** Whether children are forced onto one line or can wrap onto multiple lines. */
|
|
54
56
|
wrap?: "nowrap" | "wrap" | "wrap-reverse";
|
|
55
57
|
} & (FlexSizingExpand | FlexSizing);
|
|
58
|
+
export type FlexResponsiveValue = Omit<FlexBaseProps, "as" | "expand" | "inline" | "responsive">;
|
|
59
|
+
export type FlexResponsive = Partial<Record<Breakpoint, FlexResponsiveValue>> & {
|
|
60
|
+
/**
|
|
61
|
+
* Container query overrides. Keys are `inline-size` condition strings —
|
|
62
|
+
* optionally prefixed with a named container — and values are the props to
|
|
63
|
+
* apply when the condition is met. Requires an ancestor with
|
|
64
|
+
* `container-type: inline-size` (or equivalent) to establish the
|
|
65
|
+
* containment context.
|
|
66
|
+
* @experimental
|
|
67
|
+
* @example { "(inline-size > 20rem)": { direction: "row" } }
|
|
68
|
+
* @example { "sidebar (inline-size >= 16rem)": { gap: 1 } }
|
|
69
|
+
*/
|
|
70
|
+
container?: Record<string, FlexResponsiveValue>;
|
|
71
|
+
};
|
|
56
72
|
export type FlexProps = FlexBaseProps & Omit<React.HTMLAttributes<HTMLElement>, keyof FlexBaseProps>;
|
|
57
73
|
interface FlexComponent {
|
|
58
74
|
(props: FlexProps & React.RefAttributes<HTMLElement>): React.ReactElement | null;
|
|
@@ -62,7 +78,7 @@ interface FlexComponent {
|
|
|
62
78
|
* A flexbox layout primitive with token-constrained spacing.
|
|
63
79
|
*
|
|
64
80
|
* @component
|
|
65
|
-
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/
|
|
81
|
+
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/components-flex--docs | Storybook Documentation}
|
|
66
82
|
*/
|
|
67
83
|
export declare const Flex: FlexComponent;
|
|
68
84
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Flex.d.ts","sourceRoot":"","sources":["../../../src/components/flex/Flex.tsx"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAA;AAE7B,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"Flex.d.ts","sourceRoot":"","sources":["../../../src/components/flex/Flex.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { useContainerClass } from '../../utilities/useContainerClass.js';
|
|
1
2
|
import classNames from 'classnames';
|
|
2
3
|
import React__default, { forwardRef } from 'react';
|
|
3
4
|
|
|
@@ -5,12 +6,13 @@ import React__default, { forwardRef } from 'react';
|
|
|
5
6
|
* A flexbox layout primitive with token-constrained spacing.
|
|
6
7
|
*
|
|
7
8
|
* @component
|
|
8
|
-
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/
|
|
9
|
+
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/components-flex--docs | Storybook Documentation}
|
|
9
10
|
*/
|
|
10
11
|
const Flex = forwardRef(function Flex({ align, alignSelf, as: Element = "div", basis, className, columnGap, direction, expand, gap, grow, inline, justify, padding, paddingBlock, paddingInline, responsive, rowGap, shrink, wrap, ...rest }, ref) {
|
|
11
|
-
const { xs, sm, md, lg, xl } = responsive ?? {};
|
|
12
|
+
const { xs, sm, md, lg, xl, container } = responsive ?? {};
|
|
13
|
+
const containerClass = useContainerClass(container);
|
|
12
14
|
const Tag = Element;
|
|
13
|
-
return (React__default.createElement(Tag, { ...rest, className: classNames("tds-flex", className), ref: ref, "data-flex-align": align, "data-flex-align-self": alignSelf, "data-flex-basis": basis, "data-flex-direction": direction, "data-flex-expand": expand || undefined, "data-flex-gap": gap, "data-flex-row-gap": rowGap, "data-flex-column-gap": columnGap, "data-flex-grow": grow, "data-flex-inline": inline || undefined, "data-flex-justify": justify, "data-flex-shrink": shrink, "data-flex-wrap": wrap, "data-padding": padding, "data-padding-block": paddingBlock, "data-padding-inline": paddingInline, "data-flex-align-xs": xs?.align, "data-flex-align-self-xs": xs?.alignSelf, "data-flex-basis-xs": xs?.basis, "data-flex-direction-xs": xs?.direction, "data-flex-gap-xs": xs?.gap, "data-flex-row-gap-xs": xs?.rowGap, "data-flex-column-gap-xs": xs?.columnGap, "data-flex-grow-xs": xs?.grow, "data-flex-justify-xs": xs?.justify, "data-flex-shrink-xs": xs?.shrink, "data-flex-wrap-xs": xs?.wrap, "data-padding-xs": xs?.padding, "data-padding-block-xs": xs?.paddingBlock, "data-padding-inline-xs": xs?.paddingInline, "data-flex-align-sm": sm?.align, "data-flex-align-self-sm": sm?.alignSelf, "data-flex-basis-sm": sm?.basis, "data-flex-direction-sm": sm?.direction, "data-flex-gap-sm": sm?.gap, "data-flex-row-gap-sm": sm?.rowGap, "data-flex-column-gap-sm": sm?.columnGap, "data-flex-grow-sm": sm?.grow, "data-flex-justify-sm": sm?.justify, "data-flex-shrink-sm": sm?.shrink, "data-flex-wrap-sm": sm?.wrap, "data-padding-sm": sm?.padding, "data-padding-block-sm": sm?.paddingBlock, "data-padding-inline-sm": sm?.paddingInline, "data-flex-align-md": md?.align, "data-flex-align-self-md": md?.alignSelf, "data-flex-basis-md": md?.basis, "data-flex-direction-md": md?.direction, "data-flex-gap-md": md?.gap, "data-flex-row-gap-md": md?.rowGap, "data-flex-column-gap-md": md?.columnGap, "data-flex-grow-md": md?.grow, "data-flex-justify-md": md?.justify, "data-flex-shrink-md": md?.shrink, "data-flex-wrap-md": md?.wrap, "data-padding-md": md?.padding, "data-padding-block-md": md?.paddingBlock, "data-padding-inline-md": md?.paddingInline, "data-flex-align-lg": lg?.align, "data-flex-align-self-lg": lg?.alignSelf, "data-flex-basis-lg": lg?.basis, "data-flex-direction-lg": lg?.direction, "data-flex-gap-lg": lg?.gap, "data-flex-row-gap-lg": lg?.rowGap, "data-flex-column-gap-lg": lg?.columnGap, "data-flex-grow-lg": lg?.grow, "data-flex-justify-lg": lg?.justify, "data-flex-shrink-lg": lg?.shrink, "data-flex-wrap-lg": lg?.wrap, "data-padding-lg": lg?.padding, "data-padding-block-lg": lg?.paddingBlock, "data-padding-inline-lg": lg?.paddingInline, "data-flex-align-xl": xl?.align, "data-flex-align-self-xl": xl?.alignSelf, "data-flex-basis-xl": xl?.basis, "data-flex-direction-xl": xl?.direction, "data-flex-gap-xl": xl?.gap, "data-flex-row-gap-xl": xl?.rowGap, "data-flex-column-gap-xl": xl?.columnGap, "data-flex-grow-xl": xl?.grow, "data-flex-justify-xl": xl?.justify, "data-flex-shrink-xl": xl?.shrink, "data-flex-wrap-xl": xl?.wrap, "data-padding-xl": xl?.padding, "data-padding-block-xl": xl?.paddingBlock, "data-padding-inline-xl": xl?.paddingInline }));
|
|
15
|
+
return (React__default.createElement(Tag, { ...rest, className: classNames("tds-flex", containerClass, className), ref: ref, "data-flex-align": align, "data-flex-align-self": alignSelf, "data-flex-basis": basis, "data-flex-direction": direction, "data-flex-expand": expand || undefined, "data-flex-gap": gap, "data-flex-row-gap": rowGap, "data-flex-column-gap": columnGap, "data-flex-grow": grow, "data-flex-inline": inline || undefined, "data-flex-justify": justify, "data-flex-shrink": shrink, "data-flex-wrap": wrap, "data-padding": padding, "data-padding-block": paddingBlock, "data-padding-inline": paddingInline, "data-flex-align-xs": xs?.align, "data-flex-align-self-xs": xs?.alignSelf, "data-flex-basis-xs": xs?.basis, "data-flex-direction-xs": xs?.direction, "data-flex-gap-xs": xs?.gap, "data-flex-row-gap-xs": xs?.rowGap, "data-flex-column-gap-xs": xs?.columnGap, "data-flex-grow-xs": xs?.grow, "data-flex-justify-xs": xs?.justify, "data-flex-shrink-xs": xs?.shrink, "data-flex-wrap-xs": xs?.wrap, "data-padding-xs": xs?.padding, "data-padding-block-xs": xs?.paddingBlock, "data-padding-inline-xs": xs?.paddingInline, "data-flex-align-sm": sm?.align, "data-flex-align-self-sm": sm?.alignSelf, "data-flex-basis-sm": sm?.basis, "data-flex-direction-sm": sm?.direction, "data-flex-gap-sm": sm?.gap, "data-flex-row-gap-sm": sm?.rowGap, "data-flex-column-gap-sm": sm?.columnGap, "data-flex-grow-sm": sm?.grow, "data-flex-justify-sm": sm?.justify, "data-flex-shrink-sm": sm?.shrink, "data-flex-wrap-sm": sm?.wrap, "data-padding-sm": sm?.padding, "data-padding-block-sm": sm?.paddingBlock, "data-padding-inline-sm": sm?.paddingInline, "data-flex-align-md": md?.align, "data-flex-align-self-md": md?.alignSelf, "data-flex-basis-md": md?.basis, "data-flex-direction-md": md?.direction, "data-flex-gap-md": md?.gap, "data-flex-row-gap-md": md?.rowGap, "data-flex-column-gap-md": md?.columnGap, "data-flex-grow-md": md?.grow, "data-flex-justify-md": md?.justify, "data-flex-shrink-md": md?.shrink, "data-flex-wrap-md": md?.wrap, "data-padding-md": md?.padding, "data-padding-block-md": md?.paddingBlock, "data-padding-inline-md": md?.paddingInline, "data-flex-align-lg": lg?.align, "data-flex-align-self-lg": lg?.alignSelf, "data-flex-basis-lg": lg?.basis, "data-flex-direction-lg": lg?.direction, "data-flex-gap-lg": lg?.gap, "data-flex-row-gap-lg": lg?.rowGap, "data-flex-column-gap-lg": lg?.columnGap, "data-flex-grow-lg": lg?.grow, "data-flex-justify-lg": lg?.justify, "data-flex-shrink-lg": lg?.shrink, "data-flex-wrap-lg": lg?.wrap, "data-padding-lg": lg?.padding, "data-padding-block-lg": lg?.paddingBlock, "data-padding-inline-lg": lg?.paddingInline, "data-flex-align-xl": xl?.align, "data-flex-align-self-xl": xl?.alignSelf, "data-flex-basis-xl": xl?.basis, "data-flex-direction-xl": xl?.direction, "data-flex-gap-xl": xl?.gap, "data-flex-row-gap-xl": xl?.rowGap, "data-flex-column-gap-xl": xl?.columnGap, "data-flex-grow-xl": xl?.grow, "data-flex-justify-xl": xl?.justify, "data-flex-shrink-xl": xl?.shrink, "data-flex-wrap-xl": xl?.wrap, "data-padding-xl": xl?.padding, "data-padding-block-xl": xl?.paddingBlock, "data-padding-inline-xl": xl?.paddingInline }));
|
|
14
16
|
});
|
|
15
17
|
Flex.displayName = "Flex";
|
|
16
18
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Flex.js","sources":["../../../src/components/flex/Flex.tsx"],"sourcesContent":["import \"../../css/layout.css\"\n\nimport { type Breakpoint } from \"@utilities/breakpoints\"\nimport { type Spacing } from \"@utilities/spacingTokens\"\nimport classNames from \"classnames\"\nimport React, { forwardRef } from \"react\"\n\ninterface FlexSizingExpand {\n basis?: never\n /** A convenience prop that sets `flex: 1 1 0%; min-width: 0` to fill remaining space. Mutually exclusive with `grow`, `shrink`, and `basis`. */\n expand?: true\n grow?: never\n shrink?: never\n}\n\ninterface FlexSizing {\n /** The initial main size of this flex item before space is distributed. */\n basis?: 0 | \"auto\" | \"100%\"\n expand?: never\n /** The flex grow factor of this flex item. */\n grow?: 0 | 1\n /** The flex shrink factor of this flex item. */\n shrink?: 0 | 1\n}\n\nexport type FlexResponsive = Partial<\n Record<\n Breakpoint,\n Omit<FlexBaseProps, \"as\" | \"expand\" | \"inline\" | \"responsive\">\n >\n>\n\nexport type FlexElement =\n | \"article\"\n | \"aside\"\n | \"dd\"\n | \"div\"\n | \"dl\"\n | \"dt\"\n | \"footer\"\n | \"header\"\n | \"li\"\n | \"main\"\n | \"nav\"\n | \"ol\"\n | \"section\"\n | \"ul\"\n\ntype FlexBaseProps = {\n /** The alignment of children along the cross axis. */\n align?: \"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\"\n /** The alignment of this flex item along the cross axis, overriding the container's `align`. */\n alignSelf?: \"auto\" | \"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\"\n /** The HTML element to render. */\n as?: FlexElement\n /** The column gap between children. Overrides `gap` on the column axis. Tapestry spacing scale. */\n columnGap?: Spacing\n /** The direction of the main axis. */\n direction?: \"row\" | \"row-reverse\" | \"column\" | \"column-reverse\"\n /** The gap between children. Tapestry spacing scale. */\n gap?: Spacing\n /** If set, renders as `inline-flex` instead of `flex`. */\n inline?: true\n /** The distribution of space between and around children along the main axis. */\n justify?:\n | \"start\"\n | \"center\"\n | \"end\"\n | \"space-between\"\n | \"space-around\"\n | \"space-evenly\"\n /** The padding on all sides. Tapestry spacing scale. */\n padding?: Spacing\n /** The padding on the block axis. Overrides `padding` on the block axis. Tapestry spacing scale. */\n paddingBlock?: Spacing\n /** The padding on the inline axis. Overrides `padding` on the inline axis. Tapestry spacing scale. */\n paddingInline?: Spacing\n /**\n * Responsive overrides. Mobile-first with breakpoints as keys.\n * @example { md: { direction: \"row\", gap: 2 } }\n */\n responsive?: FlexResponsive\n /** The row gap between children. Overrides `gap` on the row axis. Tapestry spacing scale. */\n rowGap?: Spacing\n /** Whether children are forced onto one line or can wrap onto multiple lines. */\n wrap?: \"nowrap\" | \"wrap\" | \"wrap-reverse\"\n} & (FlexSizingExpand | FlexSizing)\n\nexport type FlexProps = FlexBaseProps &\n Omit<React.HTMLAttributes<HTMLElement>, keyof FlexBaseProps>\n\ninterface FlexComponent {\n (\n props: FlexProps & React.RefAttributes<HTMLElement>\n ): React.ReactElement | null\n displayName?: string\n}\n\n/**\n * A flexbox layout primitive with token-constrained spacing.\n *\n * @component\n * @see {@link https://planningcenter.github.io/tapestry/?path=/docs/unstable-flex--docs | Storybook Documentation}\n */\nexport const Flex = forwardRef(function Flex(\n {\n align,\n alignSelf,\n as: Element = \"div\",\n basis,\n className,\n columnGap,\n direction,\n expand,\n gap,\n grow,\n inline,\n justify,\n padding,\n paddingBlock,\n paddingInline,\n responsive,\n rowGap,\n shrink,\n wrap,\n ...rest\n }: FlexProps,\n ref: React.ForwardedRef<HTMLElement>\n) {\n const { xs, sm, md, lg, xl } = responsive ?? {}\n\n const Tag = Element as unknown as React.ComponentType<\n React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>\n >\n return (\n <Tag\n {...rest}\n className={classNames(\"tds-flex\", className)}\n ref={ref}\n data-flex-align={align}\n data-flex-align-self={alignSelf}\n data-flex-basis={basis}\n data-flex-direction={direction}\n data-flex-expand={expand || undefined}\n data-flex-gap={gap}\n data-flex-row-gap={rowGap}\n data-flex-column-gap={columnGap}\n data-flex-grow={grow}\n data-flex-inline={inline || undefined}\n data-flex-justify={justify}\n data-flex-shrink={shrink}\n data-flex-wrap={wrap}\n data-padding={padding}\n data-padding-block={paddingBlock}\n data-padding-inline={paddingInline}\n /* Breakpoint xs */\n data-flex-align-xs={xs?.align}\n data-flex-align-self-xs={xs?.alignSelf}\n data-flex-basis-xs={xs?.basis}\n data-flex-direction-xs={xs?.direction}\n data-flex-gap-xs={xs?.gap}\n data-flex-row-gap-xs={xs?.rowGap}\n data-flex-column-gap-xs={xs?.columnGap}\n data-flex-grow-xs={xs?.grow}\n data-flex-justify-xs={xs?.justify}\n data-flex-shrink-xs={xs?.shrink}\n data-flex-wrap-xs={xs?.wrap}\n data-padding-xs={xs?.padding}\n data-padding-block-xs={xs?.paddingBlock}\n data-padding-inline-xs={xs?.paddingInline}\n /* Breakpoint sm */\n data-flex-align-sm={sm?.align}\n data-flex-align-self-sm={sm?.alignSelf}\n data-flex-basis-sm={sm?.basis}\n data-flex-direction-sm={sm?.direction}\n data-flex-gap-sm={sm?.gap}\n data-flex-row-gap-sm={sm?.rowGap}\n data-flex-column-gap-sm={sm?.columnGap}\n data-flex-grow-sm={sm?.grow}\n data-flex-justify-sm={sm?.justify}\n data-flex-shrink-sm={sm?.shrink}\n data-flex-wrap-sm={sm?.wrap}\n data-padding-sm={sm?.padding}\n data-padding-block-sm={sm?.paddingBlock}\n data-padding-inline-sm={sm?.paddingInline}\n /* Breakpoint md */\n data-flex-align-md={md?.align}\n data-flex-align-self-md={md?.alignSelf}\n data-flex-basis-md={md?.basis}\n data-flex-direction-md={md?.direction}\n data-flex-gap-md={md?.gap}\n data-flex-row-gap-md={md?.rowGap}\n data-flex-column-gap-md={md?.columnGap}\n data-flex-grow-md={md?.grow}\n data-flex-justify-md={md?.justify}\n data-flex-shrink-md={md?.shrink}\n data-flex-wrap-md={md?.wrap}\n data-padding-md={md?.padding}\n data-padding-block-md={md?.paddingBlock}\n data-padding-inline-md={md?.paddingInline}\n /* Breakpoint lg */\n data-flex-align-lg={lg?.align}\n data-flex-align-self-lg={lg?.alignSelf}\n data-flex-basis-lg={lg?.basis}\n data-flex-direction-lg={lg?.direction}\n data-flex-gap-lg={lg?.gap}\n data-flex-row-gap-lg={lg?.rowGap}\n data-flex-column-gap-lg={lg?.columnGap}\n data-flex-grow-lg={lg?.grow}\n data-flex-justify-lg={lg?.justify}\n data-flex-shrink-lg={lg?.shrink}\n data-flex-wrap-lg={lg?.wrap}\n data-padding-lg={lg?.padding}\n data-padding-block-lg={lg?.paddingBlock}\n data-padding-inline-lg={lg?.paddingInline}\n /* Breakpoint xl */\n data-flex-align-xl={xl?.align}\n data-flex-align-self-xl={xl?.alignSelf}\n data-flex-basis-xl={xl?.basis}\n data-flex-direction-xl={xl?.direction}\n data-flex-gap-xl={xl?.gap}\n data-flex-row-gap-xl={xl?.rowGap}\n data-flex-column-gap-xl={xl?.columnGap}\n data-flex-grow-xl={xl?.grow}\n data-flex-justify-xl={xl?.justify}\n data-flex-shrink-xl={xl?.shrink}\n data-flex-wrap-xl={xl?.wrap}\n data-padding-xl={xl?.padding}\n data-padding-block-xl={xl?.paddingBlock}\n data-padding-inline-xl={xl?.paddingInline}\n />\n )\n}) as unknown as FlexComponent\n\nFlex.displayName = \"Flex\"\n"],"names":["React"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Flex.js","sources":["../../../src/components/flex/Flex.tsx"],"sourcesContent":["import \"../../css/layout.css\"\n\nimport { type Breakpoint } from \"@utilities/breakpoints\"\nimport { type Spacing } from \"@utilities/spacingTokens\"\nimport { useContainerClass } from \"@utilities/useContainerClass\"\nimport classNames from \"classnames\"\nimport React, { forwardRef } from \"react\"\n\ninterface FlexSizingExpand {\n basis?: never\n /** A convenience prop that sets `flex: 1 1 0%; min-width: 0` to fill remaining space. Mutually exclusive with `grow`, `shrink`, and `basis`. */\n expand?: true\n grow?: never\n shrink?: never\n}\n\ninterface FlexSizing {\n /** The initial main size of this flex item before space is distributed. */\n basis?: 0 | \"auto\" | \"100%\"\n expand?: never\n /** The flex grow factor of this flex item. */\n grow?: 0 | 1\n /** The flex shrink factor of this flex item. */\n shrink?: 0 | 1\n}\n\nexport type FlexElement =\n | \"article\"\n | \"aside\"\n | \"dd\"\n | \"div\"\n | \"dl\"\n | \"dt\"\n | \"footer\"\n | \"header\"\n | \"li\"\n | \"main\"\n | \"nav\"\n | \"ol\"\n | \"section\"\n | \"ul\"\n\ntype FlexBaseProps = {\n /** The alignment of children along the cross axis. */\n align?: \"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\"\n /** The alignment of this flex item along the cross axis, overriding the container's `align`. */\n alignSelf?: \"auto\" | \"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\"\n /** The HTML element to render. */\n as?: FlexElement\n /** The column gap between children. Overrides `gap` on the column axis. Tapestry spacing scale. */\n columnGap?: Spacing\n /** The direction of the main axis. */\n direction?: \"row\" | \"row-reverse\" | \"column\" | \"column-reverse\"\n /** The gap between children. Tapestry spacing scale. */\n gap?: Spacing\n /** If set, renders as `inline-flex` instead of `flex`. */\n inline?: true\n /** The distribution of space between and around children along the main axis. */\n justify?:\n | \"start\"\n | \"center\"\n | \"end\"\n | \"space-between\"\n | \"space-around\"\n | \"space-evenly\"\n /** The padding on all sides. Tapestry spacing scale. */\n padding?: Spacing\n /** The padding on the block axis. Overrides `padding` on the block axis. Tapestry spacing scale. */\n paddingBlock?: Spacing\n /** The padding on the inline axis. Overrides `padding` on the inline axis. Tapestry spacing scale. */\n paddingInline?: Spacing\n /**\n * Responsive overrides. Accepts viewport breakpoint keys and/or a\n * `container` map of container query conditions.\n * **`container` is experimental.**\n * @example { md: { direction: \"row\", gap: 2 } }\n * @example { container: { \"(inline-size > 20rem)\": { direction: \"row\" } } }\n */\n responsive?: FlexResponsive\n /** The row gap between children. Overrides `gap` on the row axis. Tapestry spacing scale. */\n rowGap?: Spacing\n /** Whether children are forced onto one line or can wrap onto multiple lines. */\n wrap?: \"nowrap\" | \"wrap\" | \"wrap-reverse\"\n} & (FlexSizingExpand | FlexSizing)\n\nexport type FlexResponsiveValue = Omit<\n FlexBaseProps,\n \"as\" | \"expand\" | \"inline\" | \"responsive\"\n>\n\nexport type FlexResponsive = Partial<\n Record<Breakpoint, FlexResponsiveValue>\n> & {\n /**\n * Container query overrides. Keys are `inline-size` condition strings —\n * optionally prefixed with a named container — and values are the props to\n * apply when the condition is met. Requires an ancestor with\n * `container-type: inline-size` (or equivalent) to establish the\n * containment context.\n * @experimental\n * @example { \"(inline-size > 20rem)\": { direction: \"row\" } }\n * @example { \"sidebar (inline-size >= 16rem)\": { gap: 1 } }\n */\n container?: Record<string, FlexResponsiveValue>\n}\n\nexport type FlexProps = FlexBaseProps &\n Omit<React.HTMLAttributes<HTMLElement>, keyof FlexBaseProps>\n\ninterface FlexComponent {\n (\n props: FlexProps & React.RefAttributes<HTMLElement>\n ): React.ReactElement | null\n displayName?: string\n}\n\n/**\n * A flexbox layout primitive with token-constrained spacing.\n *\n * @component\n * @see {@link https://planningcenter.github.io/tapestry/?path=/docs/components-flex--docs | Storybook Documentation}\n */\nexport const Flex = forwardRef(function Flex(\n {\n align,\n alignSelf,\n as: Element = \"div\",\n basis,\n className,\n columnGap,\n direction,\n expand,\n gap,\n grow,\n inline,\n justify,\n padding,\n paddingBlock,\n paddingInline,\n responsive,\n rowGap,\n shrink,\n wrap,\n ...rest\n }: FlexProps,\n ref: React.ForwardedRef<HTMLElement>\n) {\n const { xs, sm, md, lg, xl, container } = responsive ?? {}\n\n const containerClass = useContainerClass(\n container as Record<string, object> | undefined\n )\n\n const Tag = Element as unknown as React.ComponentType<\n React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>\n >\n return (\n <Tag\n {...rest}\n className={classNames(\"tds-flex\", containerClass, className)}\n ref={ref}\n data-flex-align={align}\n data-flex-align-self={alignSelf}\n data-flex-basis={basis}\n data-flex-direction={direction}\n data-flex-expand={expand || undefined}\n data-flex-gap={gap}\n data-flex-row-gap={rowGap}\n data-flex-column-gap={columnGap}\n data-flex-grow={grow}\n data-flex-inline={inline || undefined}\n data-flex-justify={justify}\n data-flex-shrink={shrink}\n data-flex-wrap={wrap}\n data-padding={padding}\n data-padding-block={paddingBlock}\n data-padding-inline={paddingInline}\n /* Breakpoint xs */\n data-flex-align-xs={xs?.align}\n data-flex-align-self-xs={xs?.alignSelf}\n data-flex-basis-xs={xs?.basis}\n data-flex-direction-xs={xs?.direction}\n data-flex-gap-xs={xs?.gap}\n data-flex-row-gap-xs={xs?.rowGap}\n data-flex-column-gap-xs={xs?.columnGap}\n data-flex-grow-xs={xs?.grow}\n data-flex-justify-xs={xs?.justify}\n data-flex-shrink-xs={xs?.shrink}\n data-flex-wrap-xs={xs?.wrap}\n data-padding-xs={xs?.padding}\n data-padding-block-xs={xs?.paddingBlock}\n data-padding-inline-xs={xs?.paddingInline}\n /* Breakpoint sm */\n data-flex-align-sm={sm?.align}\n data-flex-align-self-sm={sm?.alignSelf}\n data-flex-basis-sm={sm?.basis}\n data-flex-direction-sm={sm?.direction}\n data-flex-gap-sm={sm?.gap}\n data-flex-row-gap-sm={sm?.rowGap}\n data-flex-column-gap-sm={sm?.columnGap}\n data-flex-grow-sm={sm?.grow}\n data-flex-justify-sm={sm?.justify}\n data-flex-shrink-sm={sm?.shrink}\n data-flex-wrap-sm={sm?.wrap}\n data-padding-sm={sm?.padding}\n data-padding-block-sm={sm?.paddingBlock}\n data-padding-inline-sm={sm?.paddingInline}\n /* Breakpoint md */\n data-flex-align-md={md?.align}\n data-flex-align-self-md={md?.alignSelf}\n data-flex-basis-md={md?.basis}\n data-flex-direction-md={md?.direction}\n data-flex-gap-md={md?.gap}\n data-flex-row-gap-md={md?.rowGap}\n data-flex-column-gap-md={md?.columnGap}\n data-flex-grow-md={md?.grow}\n data-flex-justify-md={md?.justify}\n data-flex-shrink-md={md?.shrink}\n data-flex-wrap-md={md?.wrap}\n data-padding-md={md?.padding}\n data-padding-block-md={md?.paddingBlock}\n data-padding-inline-md={md?.paddingInline}\n /* Breakpoint lg */\n data-flex-align-lg={lg?.align}\n data-flex-align-self-lg={lg?.alignSelf}\n data-flex-basis-lg={lg?.basis}\n data-flex-direction-lg={lg?.direction}\n data-flex-gap-lg={lg?.gap}\n data-flex-row-gap-lg={lg?.rowGap}\n data-flex-column-gap-lg={lg?.columnGap}\n data-flex-grow-lg={lg?.grow}\n data-flex-justify-lg={lg?.justify}\n data-flex-shrink-lg={lg?.shrink}\n data-flex-wrap-lg={lg?.wrap}\n data-padding-lg={lg?.padding}\n data-padding-block-lg={lg?.paddingBlock}\n data-padding-inline-lg={lg?.paddingInline}\n /* Breakpoint xl */\n data-flex-align-xl={xl?.align}\n data-flex-align-self-xl={xl?.alignSelf}\n data-flex-basis-xl={xl?.basis}\n data-flex-direction-xl={xl?.direction}\n data-flex-gap-xl={xl?.gap}\n data-flex-row-gap-xl={xl?.rowGap}\n data-flex-column-gap-xl={xl?.columnGap}\n data-flex-grow-xl={xl?.grow}\n data-flex-justify-xl={xl?.justify}\n data-flex-shrink-xl={xl?.shrink}\n data-flex-wrap-xl={xl?.wrap}\n data-padding-xl={xl?.padding}\n data-padding-block-xl={xl?.paddingBlock}\n data-padding-inline-xl={xl?.paddingInline}\n />\n )\n}) as unknown as FlexComponent\n\nFlex.displayName = \"Flex\"\n"],"names":["React"],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import "../button/btn.css";
|
|
2
2
|
import { BaseComponentProps, ComponentKind } from "../../utilities/buttonLinkShared";
|
|
3
|
+
import { Simplify } from "../../utilities/typeUtils";
|
|
3
4
|
import React, { AnchorHTMLAttributes } from "react";
|
|
4
5
|
type BaseLinkBaseProps = BaseComponentProps & Omit<AnchorHTMLAttributes<HTMLAnchorElement>, keyof BaseComponentProps | "children" | "href"> & {
|
|
5
6
|
children?: React.ReactNode;
|
|
@@ -7,9 +8,6 @@ type BaseLinkBaseProps = BaseComponentProps & Omit<AnchorHTMLAttributes<HTMLAnch
|
|
|
7
8
|
kind?: ComponentKind;
|
|
8
9
|
label?: React.ReactNode;
|
|
9
10
|
};
|
|
10
|
-
export type Simplify<T> = {
|
|
11
|
-
[K in keyof T]: T[K];
|
|
12
|
-
} & {};
|
|
13
11
|
export type BaseLinkElementProps = Simplify<BaseLinkBaseProps & {
|
|
14
12
|
/**
|
|
15
13
|
* When true, merges the link's styling onto the child element instead
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseLink.d.ts","sourceRoot":"","sources":["../../../src/components/link/BaseLink.tsx"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAA;AAG1B,OAAO,EACL,kBAAkB,EAGlB,aAAa,EAEd,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"BaseLink.d.ts","sourceRoot":"","sources":["../../../src/components/link/BaseLink.tsx"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAA;AAG1B,OAAO,EACL,kBAAkB,EAGlB,aAAa,EAEd,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAE/C,OAAO,KAAK,EAAE,EAAE,oBAAoB,EAAc,MAAM,OAAO,CAAA;AAE/D,KAAK,iBAAiB,GAAG,kBAAkB,GACzC,IAAI,CACF,oBAAoB,CAAC,iBAAiB,CAAC,EACvC,MAAM,kBAAkB,GAAG,UAAU,GAAG,MAAM,CAC/C,GAAG;IACF,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,aAAa,CAAA;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACxB,CAAA;AAEH,MAAM,MAAM,oBAAoB,GAC5B,QAAQ,CACN,iBAAiB,GAAG;IAClB;;;;;OAKG;IACH,OAAO,EAAE,IAAI,CAAA;IACb,IAAI,CAAC,EAAE,KAAK,CAAA;CACb,CACF,GACD,QAAQ,CAAC,iBAAiB,GAAG;IAAE,OAAO,CAAC,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAEnE,eAAO,MAAM,QAAQ,gGA+CpB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseLink.js","sources":["../../../src/components/link/BaseLink.tsx"],"sourcesContent":["import \"../button/btn.css\"\n\nimport { Slot, Slottable } from \"@radix-ui/react-slot\"\nimport {\n BaseComponentProps,\n COMPONENT_KIND_CLASS_MAP,\n COMPONENT_SIZE_CLASS_MAP,\n ComponentKind,\n wrapStringWithSpan,\n} from \"@utilities/buttonLinkShared\"\nimport classNames from \"classnames\"\nimport React, { AnchorHTMLAttributes, forwardRef } from \"react\"\n\ntype BaseLinkBaseProps = BaseComponentProps &\n Omit<\n AnchorHTMLAttributes<HTMLAnchorElement>,\n keyof BaseComponentProps | \"children\" | \"href\"\n > & {\n children?: React.ReactNode\n external?: boolean\n kind?: ComponentKind\n label?: React.ReactNode\n }\n\
|
|
1
|
+
{"version":3,"file":"BaseLink.js","sources":["../../../src/components/link/BaseLink.tsx"],"sourcesContent":["import \"../button/btn.css\"\n\nimport { Slot, Slottable } from \"@radix-ui/react-slot\"\nimport {\n BaseComponentProps,\n COMPONENT_KIND_CLASS_MAP,\n COMPONENT_SIZE_CLASS_MAP,\n ComponentKind,\n wrapStringWithSpan,\n} from \"@utilities/buttonLinkShared\"\nimport { Simplify } from \"@utilities/typeUtils\"\nimport classNames from \"classnames\"\nimport React, { AnchorHTMLAttributes, forwardRef } from \"react\"\n\ntype BaseLinkBaseProps = BaseComponentProps &\n Omit<\n AnchorHTMLAttributes<HTMLAnchorElement>,\n keyof BaseComponentProps | \"children\" | \"href\"\n > & {\n children?: React.ReactNode\n external?: boolean\n kind?: ComponentKind\n label?: React.ReactNode\n }\n\nexport type BaseLinkElementProps =\n | Simplify<\n BaseLinkBaseProps & {\n /**\n * When true, merges the link's styling onto the child element instead\n * of rendering an `<a>`. Use to wrap a router link (e.g. react-router,\n * Next.js) or any link-like component. The `external` prop still\n * applies — it spreads `rel`/`target` onto the child element.\n */\n asChild: true\n href?: never\n }\n >\n | Simplify<BaseLinkBaseProps & { asChild?: false; href: string }>\n\nexport const BaseLink = forwardRef<HTMLAnchorElement, BaseLinkElementProps>(\n (\n {\n asChild = false,\n children,\n className,\n external = false,\n fullWidth,\n href,\n kind,\n label,\n prefix,\n size,\n suffix,\n ...restProps\n }: BaseLinkElementProps,\n ref\n ) => {\n const combinedClassName = classNames(\n kind && \"tds-btn\",\n size && size !== \"md\" && kind && COMPONENT_SIZE_CLASS_MAP[size],\n kind && COMPONENT_KIND_CLASS_MAP[kind],\n fullWidth && \"tds-btn--full-width\",\n className,\n { \"tds-btn--prefix\": prefix, \"tds-btn--suffix\": suffix }\n )\n\n const externalProps = external\n ? { rel: \"noopener noreferrer\", target: \"_blank\" }\n : {}\n\n const Comp = asChild ? Slot : \"a\"\n\n return (\n <Comp\n {...(!asChild && { href })}\n className={combinedClassName}\n ref={ref}\n {...restProps}\n {...externalProps}\n >\n {wrapStringWithSpan(prefix)}\n <Slottable>{label || children}</Slottable>\n {wrapStringWithSpan(suffix)}\n </Comp>\n )\n }\n)\n\nBaseLink.displayName = \"BaseLink\"\n"],"names":["React"],"mappings":";;;;;AAwCO,MAAM,QAAQ,GAAG,UAAU,CAChC,CACE,EACE,OAAO,GAAG,KAAK,EACf,QAAQ,EACR,SAAS,EACT,QAAQ,GAAG,KAAK,EAChB,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,MAAM,EACN,IAAI,EACJ,MAAM,EACN,GAAG,SAAS,EACS,EACvB,GAAG,KACD;IACF,MAAM,iBAAiB,GAAG,UAAU,CAClC,IAAI,IAAI,SAAS,EACjB,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,wBAAwB,CAAC,IAAI,CAAC,EAC/D,IAAI,IAAI,wBAAwB,CAAC,IAAI,CAAC,EACtC,SAAS,IAAI,qBAAqB,EAClC,SAAS,EACT,EAAE,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,CACzD;IAED,MAAM,aAAa,GAAG;UAClB,EAAE,GAAG,EAAE,qBAAqB,EAAE,MAAM,EAAE,QAAQ;UAC9C,EAAE;IAEN,MAAM,IAAI,GAAG,OAAO,GAAG,IAAI,GAAG,GAAG;IAEjC,QACEA,6BAAC,IAAI,EAAA,EAAA,IACE,CAAC,OAAO,IAAI,EAAE,IAAI,EAAE,CAAC,EAC1B,SAAS,EAAE,iBAAiB,EAC5B,GAAG,EAAE,GAAG,EAAA,GACJ,SAAS,EAAA,GACT,aAAa,EAAA;QAEhB,kBAAkB,CAAC,MAAM,CAAC;AAC3B,QAAAA,cAAA,CAAA,aAAA,CAAC,SAAS,EAAA,IAAA,EAAE,KAAK,IAAI,QAAQ,CAAa;AACzC,QAAA,kBAAkB,CAAC,MAAM,CAAC,CACtB;AAEX,CAAC;AAGH,QAAQ,CAAC,WAAW,GAAG,UAAU;;;;"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import "../button/btn.css";
|
|
2
|
+
import { Simplify } from "../../utilities/typeUtils";
|
|
2
3
|
import React from "react";
|
|
3
|
-
import { BaseLinkElementProps
|
|
4
|
+
import { BaseLinkElementProps } from "./BaseLink";
|
|
4
5
|
export type LinkProps = Simplify<Omit<Extract<BaseLinkElementProps, {
|
|
5
6
|
asChild?: false;
|
|
6
7
|
}>, "label"> & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../../../src/components/link/Link.tsx"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAA;AAE1B,OAAO,KAAqB,MAAM,OAAO,CAAA;AAEzC,OAAO,EAAY,oBAAoB,EAAE,
|
|
1
|
+
{"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../../../src/components/link/Link.tsx"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAA;AAE1B,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,KAAqB,MAAM,OAAO,CAAA;AAEzC,OAAO,EAAY,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAE3D,MAAM,MAAM,SAAS,GACjB,QAAQ,CACN,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE;IAAE,OAAO,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC,EAAE,OAAO,CAAC,GAAG;IAClE,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CACF,GACD,QAAQ,CACN,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,CAAC,EAAE,OAAO,CAAC,GAAG;IAChE,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CACF,CAAA;AAEL;;;;;;;;GAQG;AACH,eAAO,MAAM,IAAI,qFAKhB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Link.js","sources":["../../../src/components/link/Link.tsx"],"sourcesContent":["import \"../button/btn.css\"\n\nimport React, { forwardRef } from \"react\"\n\nimport { BaseLink, BaseLinkElementProps
|
|
1
|
+
{"version":3,"file":"Link.js","sources":["../../../src/components/link/Link.tsx"],"sourcesContent":["import \"../button/btn.css\"\n\nimport { Simplify } from \"@utilities/typeUtils\"\nimport React, { forwardRef } from \"react\"\n\nimport { BaseLink, BaseLinkElementProps } from \"./BaseLink\"\n\nexport type LinkProps =\n | Simplify<\n Omit<Extract<BaseLinkElementProps, { asChild?: false }>, \"label\"> & {\n label?: string\n }\n >\n | Simplify<\n Omit<Extract<BaseLinkElementProps, { asChild: true }>, \"label\"> & {\n label?: string\n }\n >\n\n/**\n * A link component that renders as an HTML `<a>` element with button-like\n * styling. Use for navigation; for actions that don't change the URL, use\n * `Button` instead.\n *\n * @component\n * @see {@link https://planningcenter.github.io/tapestry/?path=/docs/components-link--docs | Storybook Documentation}\n * @see {@link https://github.com/planningcenter/tapestry/tree/main/packages/tapestry-migration-cli | Migration CLI: Available}\n */\nexport const Link = forwardRef<HTMLAnchorElement, LinkProps>(\n (props: LinkProps, ref) => {\n // eslint-disable-next-line tapestry/valid-href\n return <BaseLink ref={ref} {...props} />\n }\n)\n\nLink.displayName = \"Link\"\n"],"names":["React"],"mappings":";;;AAmBA;;;;;;;;AAQG;AACI,MAAM,IAAI,GAAG,UAAU,CAC5B,CAAC,KAAgB,EAAE,GAAG,KAAI;;IAExB,OAAOA,cAAA,CAAA,aAAA,CAAC,QAAQ,EAAA,EAAC,GAAG,EAAE,GAAG,EAAA,GAAM,KAAK,EAAA,CAAI;AAC1C,CAAC;AAGH,IAAI,CAAC,WAAW,GAAG,MAAM;;;;"}
|