@planningcenter/tapestry 4.12.0-rc.0 → 4.12.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/DataTable/CollectionEditorsLazy.js +2 -1
- package/dist/components/DataTable/CollectionEditorsLazy.js.map +1 -1
- package/dist/components/DataTable/DataTable.d.ts +5 -4
- package/dist/components/DataTable/DataTable.d.ts.map +1 -1
- package/dist/components/DataTable/DataTable.js +4 -2
- package/dist/components/DataTable/DataTable.js.map +1 -1
- package/dist/components/DataTable/ManageSavedViewsModal.d.ts +5 -2
- package/dist/components/DataTable/ManageSavedViewsModal.d.ts.map +1 -1
- package/dist/components/DataTable/ManageSavedViewsModal.js +167 -18
- package/dist/components/DataTable/ManageSavedViewsModal.js.map +1 -1
- package/dist/components/DataTable/ManageSavedViewsModal.module.css.js +1 -1
- package/dist/components/DataTable/SavedViewsBar.d.ts.map +1 -1
- package/dist/components/DataTable/SavedViewsBar.js +23 -9
- package/dist/components/DataTable/SavedViewsBar.js.map +1 -1
- package/dist/components/DataTable/savedViews.d.ts +24 -0
- package/dist/components/DataTable/savedViews.d.ts.map +1 -1
- package/dist/components/DataTable/savedViews.js +58 -1
- package/dist/components/DataTable/savedViews.js.map +1 -1
- package/dist/components/button/ActionsDropdownIconButton.d.ts +3 -2
- package/dist/components/button/ActionsDropdownIconButton.d.ts.map +1 -1
- package/dist/components/button/ActionsDropdownIconButton.js.map +1 -1
- package/dist/components/button/BaseButton.d.ts.map +1 -1
- package/dist/components/button/BaseButton.js +2 -1
- package/dist/components/button/BaseButton.js.map +1 -1
- package/dist/components/button/IconButton.d.ts +1 -3
- package/dist/components/button/IconButton.d.ts.map +1 -1
- package/dist/components/button/IconButton.js.map +1 -1
- package/dist/components/button/ToggleIconButton.d.ts +5 -2
- package/dist/components/button/ToggleIconButton.d.ts.map +1 -1
- package/dist/components/button/ToggleIconButton.js +1 -0
- package/dist/components/button/ToggleIconButton.js.map +1 -1
- package/dist/components/button/index.d.ts +1 -1
- package/dist/components/button/index.d.ts.map +1 -1
- package/dist/components/combo-box/ComboBox.d.ts +2 -0
- package/dist/components/combo-box/ComboBox.d.ts.map +1 -1
- package/dist/components/combo-box/ComboBox.js +31 -5
- package/dist/components/combo-box/ComboBox.js.map +1 -1
- package/dist/components/date-picker/DatePicker.d.ts.map +1 -1
- package/dist/components/date-picker/DatePicker.js +18 -14
- package/dist/components/date-picker/DatePicker.js.map +1 -1
- package/dist/components/internal/LoadingAnnouncement.d.ts +11 -0
- package/dist/components/internal/LoadingAnnouncement.d.ts.map +1 -0
- package/dist/components/internal/LoadingAnnouncement.js +21 -0
- package/dist/components/internal/LoadingAnnouncement.js.map +1 -0
- package/dist/components/internal/index.d.ts +1 -0
- package/dist/components/internal/index.d.ts.map +1 -1
- package/dist/components/internal/tooltip/Tooltip.d.ts +4 -2
- package/dist/components/internal/tooltip/Tooltip.d.ts.map +1 -1
- package/dist/components/internal/tooltip/Tooltip.js.map +1 -1
- package/dist/components/internal/tooltip/TooltipTriggerContext.d.ts +3 -3
- package/dist/components/internal/tooltip/TooltipTriggerContext.d.ts.map +1 -1
- package/dist/components/internal/tooltip/TooltipTriggerContext.js +1 -1
- package/dist/components/internal/tooltip/TooltipTriggerContext.js.map +1 -1
- package/dist/components/internal/tooltip/index.d.ts +1 -1
- package/dist/components/internal/tooltip/index.d.ts.map +1 -1
- package/dist/components/link/BaseLink.d.ts.map +1 -1
- package/dist/components/link/BaseLink.js +15 -3
- package/dist/components/link/BaseLink.js.map +1 -1
- package/dist/components/link/IconLink.d.ts +28 -290
- package/dist/components/link/IconLink.d.ts.map +1 -1
- package/dist/components/link/IconLink.js +9 -2
- package/dist/components/link/IconLink.js.map +1 -1
- package/dist/components/page-header/defineElements.js +1 -1
- package/dist/components/pane/Pane.d.ts +1 -1
- package/dist/components/pane/Pane.js +1 -1
- package/dist/components/pane/Pane.js.map +1 -1
- package/dist/components/pane/PaneBody.d.ts +1 -1
- package/dist/components/pane/PaneBody.js +1 -1
- package/dist/components/pane/PaneBody.js.map +1 -1
- package/dist/components/pane/PaneDivider.d.ts +1 -1
- package/dist/components/pane/PaneDivider.js +1 -1
- package/dist/components/pane/PaneDivider.js.map +1 -1
- package/dist/components/pane/PaneFooter.d.ts +1 -1
- package/dist/components/pane/PaneFooter.js +1 -1
- package/dist/components/pane/PaneFooter.js.map +1 -1
- package/dist/components/pane/PaneHeader.d.ts +1 -1
- package/dist/components/pane/PaneHeader.js +1 -1
- package/dist/components/pane/PaneHeader.js.map +1 -1
- package/dist/components/pane/PaneHeaderActions.d.ts +1 -1
- package/dist/components/pane/PaneHeaderActions.js +1 -1
- package/dist/components/pane/PaneHeaderActions.js.map +1 -1
- package/dist/components/sidenav/defineElements.js +1 -1
- package/dist/components/time-field/TimeField.d.ts.map +1 -1
- package/dist/components/time-field/TimeField.js +7 -3
- package/dist/components/time-field/TimeField.js.map +1 -1
- package/dist/index.css +142 -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 +6 -0
- package/dist/index.js.map +1 -1
- package/dist/packages/tapestry-wc/dist/components/{p-np7vhMVg.js → p-A1JK45WV.js} +3 -3
- package/dist/packages/tapestry-wc/dist/components/p-A1JK45WV.js.map +1 -0
- package/dist/packages/tapestry-wc/dist/components/{p-BVvtAaVT.js → p-BbuNAv9q.js} +3 -3
- package/dist/packages/tapestry-wc/dist/components/p-BbuNAv9q.js.map +1 -0
- package/dist/packages/tapestry-wc/dist/components/{p-B2xqMgNQ.js → p-CBFtMIxJ.js} +2 -2
- package/dist/packages/tapestry-wc/dist/components/p-CBFtMIxJ.js.map +1 -0
- package/dist/packages/tapestry-wc/dist/components/{p-Rn6lOB18.js → p-CY_DC4d_.js} +3 -3
- package/dist/packages/tapestry-wc/dist/components/p-CY_DC4d_.js.map +1 -0
- package/dist/packages/tapestry-wc/dist/components/{p-6NO22Vi_.js → p-DNHgMtxw.js} +2 -2
- package/dist/packages/tapestry-wc/dist/components/p-DNHgMtxw.js.map +1 -0
- package/dist/packages/tapestry-wc/dist/components/tds-page-header-nav.js +2 -2
- package/dist/packages/tapestry-wc/dist/components/tds-page-header-nav.js.map +1 -1
- package/dist/packages/tapestry-wc/dist/components/tds-page-header.js +3 -3
- package/dist/packages/tapestry-wc/dist/components/tds-page-header.js.map +1 -1
- package/dist/packages/tapestry-wc/dist/components/tds-sidenav-item.js +3 -3
- package/dist/packages/tapestry-wc/dist/components/tds-sidenav-item.js.map +1 -1
- package/dist/packages/tapestry-wc/dist/components/tds-sidenav-responsive-header.js +2 -2
- package/dist/packages/tapestry-wc/dist/components/tds-sidenav-responsive-header.js.map +1 -1
- package/dist/packages/tapestry-wc/dist/components/tds-sidenav-section.js +3 -3
- package/dist/packages/tapestry-wc/dist/components/tds-sidenav-section.js.map +1 -1
- package/dist/packages/tapestry-wc/dist/components/tds-sidenav.js +5 -5
- package/dist/packages/tapestry-wc/dist/components/tds-sidenav.js.map +1 -1
- package/dist/reactRender.css +1171 -1101
- package/dist/reactRender.css.map +1 -1
- package/dist/reactRenderLegacy.css +1171 -1101
- package/dist/reactRenderLegacy.css.map +1 -1
- package/dist/tapestryMount.css +1171 -1101
- package/dist/tapestryMount.css.map +1 -1
- package/dist/tapestryMountLegacy.css +1171 -1101
- package/dist/tapestryMountLegacy.css.map +1 -1
- package/dist/unstable.css +201 -131
- 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 +6 -6
- package/dist/utilities/dateFieldLocale.d.ts +2 -0
- package/dist/utilities/dateFieldLocale.d.ts.map +1 -0
- package/dist/utilities/dateFieldLocale.js +32 -0
- package/dist/utilities/dateFieldLocale.js.map +1 -0
- package/dist/utilities/useAnnounce.d.ts +8 -1
- package/dist/utilities/useAnnounce.d.ts.map +1 -1
- package/dist/utilities/useAnnounce.js.map +1 -1
- package/dist/utilities/useDateFieldLocale.d.ts +2 -0
- package/dist/utilities/useDateFieldLocale.d.ts.map +1 -0
- package/dist/utilities/useDateFieldLocale.js +11 -0
- package/dist/utilities/useDateFieldLocale.js.map +1 -0
- package/package.json +4 -3
- package/dist/packages/tapestry-wc/dist/components/p-6NO22Vi_.js.map +0 -1
- package/dist/packages/tapestry-wc/dist/components/p-B2xqMgNQ.js.map +0 -1
- package/dist/packages/tapestry-wc/dist/components/p-BVvtAaVT.js.map +0 -1
- package/dist/packages/tapestry-wc/dist/components/p-Rn6lOB18.js.map +0 -1
- package/dist/packages/tapestry-wc/dist/components/p-np7vhMVg.js.map +0 -1
|
@@ -1,305 +1,43 @@
|
|
|
1
1
|
import "../button/btn.css";
|
|
2
|
+
import { type TooltipPlacement } from "../internal/tooltip";
|
|
2
3
|
import React from "react";
|
|
3
4
|
import { BaseLinkElementProps } from "./BaseLink";
|
|
4
|
-
|
|
5
|
+
type IconLinkSharedProps = Omit<Extract<BaseLinkElementProps, {
|
|
5
6
|
asChild?: false;
|
|
6
7
|
}>, "label" | "children"> & {
|
|
7
|
-
"aria-label": string;
|
|
8
8
|
/** The icon element to display. */
|
|
9
9
|
icon: React.ReactNode;
|
|
10
10
|
};
|
|
11
|
+
type IconLinkTooltipProps = {
|
|
12
|
+
/** Accessible label. Required for icon-only links to provide context about the link's purpose. Not required when `tooltip` is set. When both are set, this is the name and the tooltip is visual only. */
|
|
13
|
+
"aria-label"?: string;
|
|
14
|
+
/** Text shown on hover and focus. Without `aria-label`, it is also used as the `aria-label`. With `aria-label`, start the `aria-label` with the same text (e.g. tooltip `"Download"`, aria-label `"Download, report.pdf"`). The tooltip itself is hidden from screen readers. Ignores `aria-labelledby`. */
|
|
15
|
+
tooltip: string;
|
|
16
|
+
};
|
|
17
|
+
type IconLinkAriaLabelProps = {
|
|
18
|
+
/** Accessible label. Required for icon-only links to provide context about the link's purpose. Not required when `tooltip` is set. When both are set, this is the name and the tooltip is visual only. */
|
|
19
|
+
"aria-label": string;
|
|
20
|
+
/** Text shown on hover and focus. Without `aria-label`, it is also used as the `aria-label`. With `aria-label`, start the `aria-label` with the same text (e.g. tooltip `"Download"`, aria-label `"Download, report.pdf"`). The tooltip itself is hidden from screen readers. Ignores `aria-labelledby`. */
|
|
21
|
+
tooltip?: string;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* An icon-only link needs a name: `aria-label`, `tooltip`, or both.
|
|
25
|
+
* `IconLinkAriaLabelProps` is declared last so that a missing name
|
|
26
|
+
* reports "aria-label is missing", not "tooltip is missing".
|
|
27
|
+
*/
|
|
28
|
+
type IconLinkNameProps = IconLinkAriaLabelProps | IconLinkTooltipProps;
|
|
29
|
+
export type IconLinkProps = IconLinkSharedProps & IconLinkNameProps & {
|
|
30
|
+
/** Where the tooltip renders relative to the link. Default `"bottom"`. Has no effect without `tooltip`. */
|
|
31
|
+
tooltipPlacement?: TooltipPlacement;
|
|
32
|
+
};
|
|
11
33
|
/**
|
|
12
34
|
* An icon-only link component that renders as an HTML `<a>` element with
|
|
13
|
-
* button-like styling. Requires an `icon
|
|
35
|
+
* button-like styling. Requires an `icon`, and an `aria-label` or `tooltip`
|
|
36
|
+
* for accessibility.
|
|
14
37
|
*
|
|
15
38
|
* @component
|
|
16
39
|
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/links-icon-link--docs | Storybook Documentation}
|
|
17
40
|
*/
|
|
18
|
-
export declare const IconLink: React.ForwardRefExoticComponent<
|
|
19
|
-
|
|
20
|
-
kind?: import("../../utilities/buttonLinkShared").ComponentKind | undefined;
|
|
21
|
-
prefix?: React.ReactNode;
|
|
22
|
-
size?: import("../../utilities/buttonLinkShared").ComponentSize | undefined;
|
|
23
|
-
suffix?: React.ReactNode;
|
|
24
|
-
slot?: string | undefined | undefined;
|
|
25
|
-
style?: React.CSSProperties | undefined;
|
|
26
|
-
title?: string | undefined | undefined;
|
|
27
|
-
dir?: string | undefined | undefined;
|
|
28
|
-
className?: string | undefined | undefined;
|
|
29
|
-
target?: React.HTMLAttributeAnchorTarget | undefined;
|
|
30
|
-
popover?: "" | "auto" | "manual" | undefined;
|
|
31
|
-
"aria-current"?: boolean | "false" | "true" | "page" | "step" | "location" | "date" | "time" | undefined | undefined;
|
|
32
|
-
type?: string | undefined | undefined;
|
|
33
|
-
id?: string | undefined | undefined;
|
|
34
|
-
"aria-expanded"?: (boolean | "true" | "false") | undefined;
|
|
35
|
-
defaultChecked?: boolean | undefined | undefined;
|
|
36
|
-
defaultValue?: string | number | readonly string[] | undefined;
|
|
37
|
-
suppressContentEditableWarning?: boolean | undefined | undefined;
|
|
38
|
-
suppressHydrationWarning?: boolean | undefined | undefined;
|
|
39
|
-
accessKey?: string | undefined | undefined;
|
|
40
|
-
autoFocus?: boolean | undefined | undefined;
|
|
41
|
-
contentEditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
|
|
42
|
-
contextMenu?: string | undefined | undefined;
|
|
43
|
-
draggable?: (boolean | "true" | "false") | undefined;
|
|
44
|
-
hidden?: boolean | undefined | undefined;
|
|
45
|
-
lang?: string | undefined | undefined;
|
|
46
|
-
nonce?: string | undefined | undefined;
|
|
47
|
-
spellCheck?: (boolean | "true" | "false") | undefined;
|
|
48
|
-
tabIndex?: number | undefined | undefined;
|
|
49
|
-
translate?: "yes" | "no" | undefined | undefined;
|
|
50
|
-
radioGroup?: string | undefined | undefined;
|
|
51
|
-
role?: React.AriaRole | undefined;
|
|
52
|
-
about?: string | undefined | undefined;
|
|
53
|
-
content?: string | undefined | undefined;
|
|
54
|
-
datatype?: string | undefined | undefined;
|
|
55
|
-
inlist?: any;
|
|
56
|
-
property?: string | undefined | undefined;
|
|
57
|
-
rel?: string | undefined | undefined;
|
|
58
|
-
resource?: string | undefined | undefined;
|
|
59
|
-
rev?: string | undefined | undefined;
|
|
60
|
-
typeof?: string | undefined | undefined;
|
|
61
|
-
vocab?: string | undefined | undefined;
|
|
62
|
-
autoCapitalize?: string | undefined | undefined;
|
|
63
|
-
autoCorrect?: string | undefined | undefined;
|
|
64
|
-
autoSave?: string | undefined | undefined;
|
|
65
|
-
color?: string | undefined | undefined;
|
|
66
|
-
itemProp?: string | undefined | undefined;
|
|
67
|
-
itemScope?: boolean | undefined | undefined;
|
|
68
|
-
itemType?: string | undefined | undefined;
|
|
69
|
-
itemID?: string | undefined | undefined;
|
|
70
|
-
itemRef?: string | undefined | undefined;
|
|
71
|
-
results?: number | undefined | undefined;
|
|
72
|
-
security?: string | undefined | undefined;
|
|
73
|
-
unselectable?: "on" | "off" | undefined | undefined;
|
|
74
|
-
inputMode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | undefined | undefined;
|
|
75
|
-
is?: string | undefined | undefined;
|
|
76
|
-
"aria-activedescendant"?: string | undefined | undefined;
|
|
77
|
-
"aria-atomic"?: (boolean | "true" | "false") | undefined;
|
|
78
|
-
"aria-autocomplete"?: "none" | "inline" | "list" | "both" | undefined | undefined;
|
|
79
|
-
"aria-braillelabel"?: string | undefined | undefined;
|
|
80
|
-
"aria-brailleroledescription"?: string | undefined | undefined;
|
|
81
|
-
"aria-busy"?: (boolean | "true" | "false") | undefined;
|
|
82
|
-
"aria-checked"?: boolean | "false" | "mixed" | "true" | undefined | undefined;
|
|
83
|
-
"aria-colcount"?: number | undefined | undefined;
|
|
84
|
-
"aria-colindex"?: number | undefined | undefined;
|
|
85
|
-
"aria-colindextext"?: string | undefined | undefined;
|
|
86
|
-
"aria-colspan"?: number | undefined | undefined;
|
|
87
|
-
"aria-controls"?: string | undefined | undefined;
|
|
88
|
-
"aria-describedby"?: string | undefined | undefined;
|
|
89
|
-
"aria-description"?: string | undefined | undefined;
|
|
90
|
-
"aria-details"?: string | undefined | undefined;
|
|
91
|
-
"aria-disabled"?: (boolean | "true" | "false") | undefined;
|
|
92
|
-
"aria-dropeffect"?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined | undefined;
|
|
93
|
-
"aria-errormessage"?: string | undefined | undefined;
|
|
94
|
-
"aria-flowto"?: string | undefined | undefined;
|
|
95
|
-
"aria-grabbed"?: (boolean | "true" | "false") | undefined;
|
|
96
|
-
"aria-haspopup"?: boolean | "false" | "true" | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined | undefined;
|
|
97
|
-
"aria-hidden"?: (boolean | "true" | "false") | undefined;
|
|
98
|
-
"aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined | undefined;
|
|
99
|
-
"aria-keyshortcuts"?: string | undefined | undefined;
|
|
100
|
-
"aria-label"?: string | undefined | undefined;
|
|
101
|
-
"aria-labelledby"?: string | undefined | undefined;
|
|
102
|
-
"aria-level"?: number | undefined | undefined;
|
|
103
|
-
"aria-live"?: "off" | "assertive" | "polite" | undefined | undefined;
|
|
104
|
-
"aria-modal"?: (boolean | "true" | "false") | undefined;
|
|
105
|
-
"aria-multiline"?: (boolean | "true" | "false") | undefined;
|
|
106
|
-
"aria-multiselectable"?: (boolean | "true" | "false") | undefined;
|
|
107
|
-
"aria-orientation"?: "horizontal" | "vertical" | undefined | undefined;
|
|
108
|
-
"aria-owns"?: string | undefined | undefined;
|
|
109
|
-
"aria-placeholder"?: string | undefined | undefined;
|
|
110
|
-
"aria-posinset"?: number | undefined | undefined;
|
|
111
|
-
"aria-pressed"?: boolean | "false" | "mixed" | "true" | undefined | undefined;
|
|
112
|
-
"aria-readonly"?: (boolean | "true" | "false") | undefined;
|
|
113
|
-
"aria-relevant"?: "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text" | "text additions" | "text removals" | undefined | undefined;
|
|
114
|
-
"aria-required"?: (boolean | "true" | "false") | undefined;
|
|
115
|
-
"aria-roledescription"?: string | undefined | undefined;
|
|
116
|
-
"aria-rowcount"?: number | undefined | undefined;
|
|
117
|
-
"aria-rowindex"?: number | undefined | undefined;
|
|
118
|
-
"aria-rowindextext"?: string | undefined | undefined;
|
|
119
|
-
"aria-rowspan"?: number | undefined | undefined;
|
|
120
|
-
"aria-selected"?: (boolean | "true" | "false") | undefined;
|
|
121
|
-
"aria-setsize"?: number | undefined | undefined;
|
|
122
|
-
"aria-sort"?: "none" | "ascending" | "descending" | "other" | undefined | undefined;
|
|
123
|
-
"aria-valuemax"?: number | undefined | undefined;
|
|
124
|
-
"aria-valuemin"?: number | undefined | undefined;
|
|
125
|
-
"aria-valuenow"?: number | undefined | undefined;
|
|
126
|
-
"aria-valuetext"?: string | undefined | undefined;
|
|
127
|
-
dangerouslySetInnerHTML?: {
|
|
128
|
-
__html: string | TrustedHTML;
|
|
129
|
-
} | undefined | undefined;
|
|
130
|
-
onCopy?: React.ClipboardEventHandler<HTMLAnchorElement> | undefined;
|
|
131
|
-
onCopyCapture?: React.ClipboardEventHandler<HTMLAnchorElement> | undefined;
|
|
132
|
-
onCut?: React.ClipboardEventHandler<HTMLAnchorElement> | undefined;
|
|
133
|
-
onCutCapture?: React.ClipboardEventHandler<HTMLAnchorElement> | undefined;
|
|
134
|
-
onPaste?: React.ClipboardEventHandler<HTMLAnchorElement> | undefined;
|
|
135
|
-
onPasteCapture?: React.ClipboardEventHandler<HTMLAnchorElement> | undefined;
|
|
136
|
-
onCompositionEnd?: React.CompositionEventHandler<HTMLAnchorElement> | undefined;
|
|
137
|
-
onCompositionEndCapture?: React.CompositionEventHandler<HTMLAnchorElement> | undefined;
|
|
138
|
-
onCompositionStart?: React.CompositionEventHandler<HTMLAnchorElement> | undefined;
|
|
139
|
-
onCompositionStartCapture?: React.CompositionEventHandler<HTMLAnchorElement> | undefined;
|
|
140
|
-
onCompositionUpdate?: React.CompositionEventHandler<HTMLAnchorElement> | undefined;
|
|
141
|
-
onCompositionUpdateCapture?: React.CompositionEventHandler<HTMLAnchorElement> | undefined;
|
|
142
|
-
onFocus?: React.FocusEventHandler<HTMLAnchorElement> | undefined;
|
|
143
|
-
onFocusCapture?: React.FocusEventHandler<HTMLAnchorElement> | undefined;
|
|
144
|
-
onBlur?: React.FocusEventHandler<HTMLAnchorElement> | undefined;
|
|
145
|
-
onBlurCapture?: React.FocusEventHandler<HTMLAnchorElement> | undefined;
|
|
146
|
-
onChange?: React.FormEventHandler<HTMLAnchorElement> | undefined;
|
|
147
|
-
onChangeCapture?: React.FormEventHandler<HTMLAnchorElement> | undefined;
|
|
148
|
-
onBeforeInput?: React.FormEventHandler<HTMLAnchorElement> | undefined;
|
|
149
|
-
onBeforeInputCapture?: React.FormEventHandler<HTMLAnchorElement> | undefined;
|
|
150
|
-
onInput?: React.FormEventHandler<HTMLAnchorElement> | undefined;
|
|
151
|
-
onInputCapture?: React.FormEventHandler<HTMLAnchorElement> | undefined;
|
|
152
|
-
onReset?: React.FormEventHandler<HTMLAnchorElement> | undefined;
|
|
153
|
-
onResetCapture?: React.FormEventHandler<HTMLAnchorElement> | undefined;
|
|
154
|
-
onSubmit?: React.FormEventHandler<HTMLAnchorElement> | undefined;
|
|
155
|
-
onSubmitCapture?: React.FormEventHandler<HTMLAnchorElement> | undefined;
|
|
156
|
-
onInvalid?: React.FormEventHandler<HTMLAnchorElement> | undefined;
|
|
157
|
-
onInvalidCapture?: React.FormEventHandler<HTMLAnchorElement> | undefined;
|
|
158
|
-
onLoad?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
159
|
-
onLoadCapture?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
160
|
-
onError?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
161
|
-
onErrorCapture?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
162
|
-
onKeyDown?: React.KeyboardEventHandler<HTMLAnchorElement> | undefined;
|
|
163
|
-
onKeyDownCapture?: React.KeyboardEventHandler<HTMLAnchorElement> | undefined;
|
|
164
|
-
onKeyPress?: React.KeyboardEventHandler<HTMLAnchorElement> | undefined;
|
|
165
|
-
onKeyPressCapture?: React.KeyboardEventHandler<HTMLAnchorElement> | undefined;
|
|
166
|
-
onKeyUp?: React.KeyboardEventHandler<HTMLAnchorElement> | undefined;
|
|
167
|
-
onKeyUpCapture?: React.KeyboardEventHandler<HTMLAnchorElement> | undefined;
|
|
168
|
-
onAbort?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
169
|
-
onAbortCapture?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
170
|
-
onCanPlay?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
171
|
-
onCanPlayCapture?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
172
|
-
onCanPlayThrough?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
173
|
-
onCanPlayThroughCapture?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
174
|
-
onDurationChange?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
175
|
-
onDurationChangeCapture?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
176
|
-
onEmptied?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
177
|
-
onEmptiedCapture?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
178
|
-
onEncrypted?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
179
|
-
onEncryptedCapture?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
180
|
-
onEnded?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
181
|
-
onEndedCapture?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
182
|
-
onLoadedData?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
183
|
-
onLoadedDataCapture?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
184
|
-
onLoadedMetadata?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
185
|
-
onLoadedMetadataCapture?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
186
|
-
onLoadStart?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
187
|
-
onLoadStartCapture?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
188
|
-
onPause?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
189
|
-
onPauseCapture?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
190
|
-
onPlay?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
191
|
-
onPlayCapture?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
192
|
-
onPlaying?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
193
|
-
onPlayingCapture?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
194
|
-
onProgress?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
195
|
-
onProgressCapture?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
196
|
-
onRateChange?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
197
|
-
onRateChangeCapture?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
198
|
-
onResize?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
199
|
-
onResizeCapture?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
200
|
-
onSeeked?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
201
|
-
onSeekedCapture?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
202
|
-
onSeeking?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
203
|
-
onSeekingCapture?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
204
|
-
onStalled?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
205
|
-
onStalledCapture?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
206
|
-
onSuspend?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
207
|
-
onSuspendCapture?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
208
|
-
onTimeUpdate?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
209
|
-
onTimeUpdateCapture?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
210
|
-
onVolumeChange?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
211
|
-
onVolumeChangeCapture?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
212
|
-
onWaiting?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
213
|
-
onWaitingCapture?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
214
|
-
onAuxClick?: React.MouseEventHandler<HTMLAnchorElement> | undefined;
|
|
215
|
-
onAuxClickCapture?: React.MouseEventHandler<HTMLAnchorElement> | undefined;
|
|
216
|
-
onClick?: React.MouseEventHandler<HTMLAnchorElement> | undefined;
|
|
217
|
-
onClickCapture?: React.MouseEventHandler<HTMLAnchorElement> | undefined;
|
|
218
|
-
onContextMenu?: React.MouseEventHandler<HTMLAnchorElement> | undefined;
|
|
219
|
-
onContextMenuCapture?: React.MouseEventHandler<HTMLAnchorElement> | undefined;
|
|
220
|
-
onDoubleClick?: React.MouseEventHandler<HTMLAnchorElement> | undefined;
|
|
221
|
-
onDoubleClickCapture?: React.MouseEventHandler<HTMLAnchorElement> | undefined;
|
|
222
|
-
onDrag?: React.DragEventHandler<HTMLAnchorElement> | undefined;
|
|
223
|
-
onDragCapture?: React.DragEventHandler<HTMLAnchorElement> | undefined;
|
|
224
|
-
onDragEnd?: React.DragEventHandler<HTMLAnchorElement> | undefined;
|
|
225
|
-
onDragEndCapture?: React.DragEventHandler<HTMLAnchorElement> | undefined;
|
|
226
|
-
onDragEnter?: React.DragEventHandler<HTMLAnchorElement> | undefined;
|
|
227
|
-
onDragEnterCapture?: React.DragEventHandler<HTMLAnchorElement> | undefined;
|
|
228
|
-
onDragExit?: React.DragEventHandler<HTMLAnchorElement> | undefined;
|
|
229
|
-
onDragExitCapture?: React.DragEventHandler<HTMLAnchorElement> | undefined;
|
|
230
|
-
onDragLeave?: React.DragEventHandler<HTMLAnchorElement> | undefined;
|
|
231
|
-
onDragLeaveCapture?: React.DragEventHandler<HTMLAnchorElement> | undefined;
|
|
232
|
-
onDragOver?: React.DragEventHandler<HTMLAnchorElement> | undefined;
|
|
233
|
-
onDragOverCapture?: React.DragEventHandler<HTMLAnchorElement> | undefined;
|
|
234
|
-
onDragStart?: React.DragEventHandler<HTMLAnchorElement> | undefined;
|
|
235
|
-
onDragStartCapture?: React.DragEventHandler<HTMLAnchorElement> | undefined;
|
|
236
|
-
onDrop?: React.DragEventHandler<HTMLAnchorElement> | undefined;
|
|
237
|
-
onDropCapture?: React.DragEventHandler<HTMLAnchorElement> | undefined;
|
|
238
|
-
onMouseDown?: React.MouseEventHandler<HTMLAnchorElement> | undefined;
|
|
239
|
-
onMouseDownCapture?: React.MouseEventHandler<HTMLAnchorElement> | undefined;
|
|
240
|
-
onMouseEnter?: React.MouseEventHandler<HTMLAnchorElement> | undefined;
|
|
241
|
-
onMouseLeave?: React.MouseEventHandler<HTMLAnchorElement> | undefined;
|
|
242
|
-
onMouseMove?: React.MouseEventHandler<HTMLAnchorElement> | undefined;
|
|
243
|
-
onMouseMoveCapture?: React.MouseEventHandler<HTMLAnchorElement> | undefined;
|
|
244
|
-
onMouseOut?: React.MouseEventHandler<HTMLAnchorElement> | undefined;
|
|
245
|
-
onMouseOutCapture?: React.MouseEventHandler<HTMLAnchorElement> | undefined;
|
|
246
|
-
onMouseOver?: React.MouseEventHandler<HTMLAnchorElement> | undefined;
|
|
247
|
-
onMouseOverCapture?: React.MouseEventHandler<HTMLAnchorElement> | undefined;
|
|
248
|
-
onMouseUp?: React.MouseEventHandler<HTMLAnchorElement> | undefined;
|
|
249
|
-
onMouseUpCapture?: React.MouseEventHandler<HTMLAnchorElement> | undefined;
|
|
250
|
-
onSelect?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
251
|
-
onSelectCapture?: React.ReactEventHandler<HTMLAnchorElement> | undefined;
|
|
252
|
-
onTouchCancel?: React.TouchEventHandler<HTMLAnchorElement> | undefined;
|
|
253
|
-
onTouchCancelCapture?: React.TouchEventHandler<HTMLAnchorElement> | undefined;
|
|
254
|
-
onTouchEnd?: React.TouchEventHandler<HTMLAnchorElement> | undefined;
|
|
255
|
-
onTouchEndCapture?: React.TouchEventHandler<HTMLAnchorElement> | undefined;
|
|
256
|
-
onTouchMove?: React.TouchEventHandler<HTMLAnchorElement> | undefined;
|
|
257
|
-
onTouchMoveCapture?: React.TouchEventHandler<HTMLAnchorElement> | undefined;
|
|
258
|
-
onTouchStart?: React.TouchEventHandler<HTMLAnchorElement> | undefined;
|
|
259
|
-
onTouchStartCapture?: React.TouchEventHandler<HTMLAnchorElement> | undefined;
|
|
260
|
-
onPointerDown?: React.PointerEventHandler<HTMLAnchorElement> | undefined;
|
|
261
|
-
onPointerDownCapture?: React.PointerEventHandler<HTMLAnchorElement> | undefined;
|
|
262
|
-
onPointerMove?: React.PointerEventHandler<HTMLAnchorElement> | undefined;
|
|
263
|
-
onPointerMoveCapture?: React.PointerEventHandler<HTMLAnchorElement> | undefined;
|
|
264
|
-
onPointerUp?: React.PointerEventHandler<HTMLAnchorElement> | undefined;
|
|
265
|
-
onPointerUpCapture?: React.PointerEventHandler<HTMLAnchorElement> | undefined;
|
|
266
|
-
onPointerCancel?: React.PointerEventHandler<HTMLAnchorElement> | undefined;
|
|
267
|
-
onPointerCancelCapture?: React.PointerEventHandler<HTMLAnchorElement> | undefined;
|
|
268
|
-
onPointerEnter?: React.PointerEventHandler<HTMLAnchorElement> | undefined;
|
|
269
|
-
onPointerLeave?: React.PointerEventHandler<HTMLAnchorElement> | undefined;
|
|
270
|
-
onPointerOver?: React.PointerEventHandler<HTMLAnchorElement> | undefined;
|
|
271
|
-
onPointerOverCapture?: React.PointerEventHandler<HTMLAnchorElement> | undefined;
|
|
272
|
-
onPointerOut?: React.PointerEventHandler<HTMLAnchorElement> | undefined;
|
|
273
|
-
onPointerOutCapture?: React.PointerEventHandler<HTMLAnchorElement> | undefined;
|
|
274
|
-
onGotPointerCapture?: React.PointerEventHandler<HTMLAnchorElement> | undefined;
|
|
275
|
-
onGotPointerCaptureCapture?: React.PointerEventHandler<HTMLAnchorElement> | undefined;
|
|
276
|
-
onLostPointerCapture?: React.PointerEventHandler<HTMLAnchorElement> | undefined;
|
|
277
|
-
onLostPointerCaptureCapture?: React.PointerEventHandler<HTMLAnchorElement> | undefined;
|
|
278
|
-
onScroll?: React.UIEventHandler<HTMLAnchorElement> | undefined;
|
|
279
|
-
onScrollCapture?: React.UIEventHandler<HTMLAnchorElement> | undefined;
|
|
280
|
-
onWheel?: React.WheelEventHandler<HTMLAnchorElement> | undefined;
|
|
281
|
-
onWheelCapture?: React.WheelEventHandler<HTMLAnchorElement> | undefined;
|
|
282
|
-
onAnimationStart?: React.AnimationEventHandler<HTMLAnchorElement> | undefined;
|
|
283
|
-
onAnimationStartCapture?: React.AnimationEventHandler<HTMLAnchorElement> | undefined;
|
|
284
|
-
onAnimationEnd?: React.AnimationEventHandler<HTMLAnchorElement> | undefined;
|
|
285
|
-
onAnimationEndCapture?: React.AnimationEventHandler<HTMLAnchorElement> | undefined;
|
|
286
|
-
onAnimationIteration?: React.AnimationEventHandler<HTMLAnchorElement> | undefined;
|
|
287
|
-
onAnimationIterationCapture?: React.AnimationEventHandler<HTMLAnchorElement> | undefined;
|
|
288
|
-
onTransitionEnd?: React.TransitionEventHandler<HTMLAnchorElement> | undefined;
|
|
289
|
-
onTransitionEndCapture?: React.TransitionEventHandler<HTMLAnchorElement> | undefined;
|
|
290
|
-
media?: string | undefined | undefined;
|
|
291
|
-
download?: any;
|
|
292
|
-
hrefLang?: string | undefined | undefined;
|
|
293
|
-
ping?: string | undefined | undefined;
|
|
294
|
-
referrerPolicy?: React.HTMLAttributeReferrerPolicy | undefined;
|
|
295
|
-
children?: React.ReactNode;
|
|
296
|
-
external?: boolean | undefined;
|
|
297
|
-
label?: React.ReactNode;
|
|
298
|
-
asChild?: false | undefined;
|
|
299
|
-
href: string;
|
|
300
|
-
}, "label" | "children"> & {
|
|
301
|
-
"aria-label": string;
|
|
302
|
-
/** The icon element to display. */
|
|
303
|
-
icon: React.ReactNode;
|
|
304
|
-
} & React.RefAttributes<HTMLAnchorElement>>;
|
|
41
|
+
export declare const IconLink: React.ForwardRefExoticComponent<IconLinkProps & React.RefAttributes<HTMLAnchorElement>>;
|
|
42
|
+
export {};
|
|
305
43
|
//# sourceMappingURL=IconLink.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IconLink.d.ts","sourceRoot":"","sources":["../../../src/components/link/IconLink.tsx"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"IconLink.d.ts","sourceRoot":"","sources":["../../../src/components/link/IconLink.tsx"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAA;AAE1B,OAAO,EAAW,KAAK,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAE7E,OAAO,KAAqB,MAAM,OAAO,CAAA;AAEzC,OAAO,EAAY,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAE3D,KAAK,mBAAmB,GAAG,IAAI,CAC7B,OAAO,CAAC,oBAAoB,EAAE;IAAE,OAAO,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC,EAClD,OAAO,GAAG,UAAU,CACrB,GAAG;IACF,mCAAmC;IACnC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAA;CACtB,CAAA;AAED,KAAK,oBAAoB,GAAG;IAC1B,0MAA0M;IAC1M,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,4SAA4S;IAC5S,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,KAAK,sBAAsB,GAAG;IAC5B,0MAA0M;IAC1M,YAAY,EAAE,MAAM,CAAA;IACpB,4SAA4S;IAC5S,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED;;;;GAIG;AACH,KAAK,iBAAiB,GAAG,sBAAsB,GAAG,oBAAoB,CAAA;AAEtE,MAAM,MAAM,aAAa,GAAG,mBAAmB,GAC7C,iBAAiB,GAAG;IAClB,2GAA2G;IAC3G,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;CACpC,CAAA;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,yFA6CpB,CAAA"}
|
|
@@ -1,16 +1,23 @@
|
|
|
1
|
+
import { Tooltip } from '../internal/tooltip/Tooltip.js';
|
|
1
2
|
import classNames from 'classnames';
|
|
2
3
|
import React__default, { forwardRef } from 'react';
|
|
3
4
|
import { BaseLink } from './BaseLink.js';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* An icon-only link component that renders as an HTML `<a>` element with
|
|
7
|
-
* button-like styling. Requires an `icon
|
|
8
|
+
* button-like styling. Requires an `icon`, and an `aria-label` or `tooltip`
|
|
9
|
+
* for accessibility.
|
|
8
10
|
*
|
|
9
11
|
* @component
|
|
10
12
|
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/links-icon-link--docs | Storybook Documentation}
|
|
11
13
|
*/
|
|
12
|
-
const IconLink = forwardRef(({ className, href, icon, ...restProps }, ref) => {
|
|
14
|
+
const IconLink = forwardRef(({ className, href, icon, tooltip, tooltipPlacement = "bottom", ...restProps }, ref) => {
|
|
13
15
|
const iconOnlyClassName = classNames("tds-btn--icononly", className);
|
|
16
|
+
if (tooltip) {
|
|
17
|
+
const { "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, ...linkProps } = restProps;
|
|
18
|
+
return (React__default.createElement(Tooltip, { content: tooltip, placement: tooltipPlacement, visualOnly: true },
|
|
19
|
+
React__default.createElement(BaseLink, { href: href, label: icon, className: iconOnlyClassName, ref: ref, ...linkProps, "aria-label": ariaLabel || tooltip })));
|
|
20
|
+
}
|
|
14
21
|
return (React__default.createElement(BaseLink, { href: href, label: icon, className: iconOnlyClassName, ref: ref, ...restProps }));
|
|
15
22
|
});
|
|
16
23
|
IconLink.displayName = "IconLink";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IconLink.js","sources":["../../../src/components/link/IconLink.tsx"],"sourcesContent":["import \"../button/btn.css\"\n\nimport classNames from \"classnames\"\nimport React, { forwardRef } from \"react\"\n\nimport { BaseLink, BaseLinkElementProps } from \"./BaseLink\"\n\
|
|
1
|
+
{"version":3,"file":"IconLink.js","sources":["../../../src/components/link/IconLink.tsx"],"sourcesContent":["import \"../button/btn.css\"\n\nimport { Tooltip, type TooltipPlacement } from \"@components/internal/tooltip\"\nimport classNames from \"classnames\"\nimport React, { forwardRef } from \"react\"\n\nimport { BaseLink, BaseLinkElementProps } from \"./BaseLink\"\n\ntype IconLinkSharedProps = Omit<\n Extract<BaseLinkElementProps, { asChild?: false }>,\n \"label\" | \"children\"\n> & {\n /** The icon element to display. */\n icon: React.ReactNode\n}\n\ntype IconLinkTooltipProps = {\n /** Accessible label. Required for icon-only links to provide context about the link's purpose. Not required when `tooltip` is set. When both are set, this is the name and the tooltip is visual only. */\n \"aria-label\"?: string\n /** Text shown on hover and focus. Without `aria-label`, it is also used as the `aria-label`. With `aria-label`, start the `aria-label` with the same text (e.g. tooltip `\"Download\"`, aria-label `\"Download, report.pdf\"`). The tooltip itself is hidden from screen readers. Ignores `aria-labelledby`. */\n tooltip: string\n}\n\ntype IconLinkAriaLabelProps = {\n /** Accessible label. Required for icon-only links to provide context about the link's purpose. Not required when `tooltip` is set. When both are set, this is the name and the tooltip is visual only. */\n \"aria-label\": string\n /** Text shown on hover and focus. Without `aria-label`, it is also used as the `aria-label`. With `aria-label`, start the `aria-label` with the same text (e.g. tooltip `\"Download\"`, aria-label `\"Download, report.pdf\"`). The tooltip itself is hidden from screen readers. Ignores `aria-labelledby`. */\n tooltip?: string\n}\n\n/**\n * An icon-only link needs a name: `aria-label`, `tooltip`, or both.\n * `IconLinkAriaLabelProps` is declared last so that a missing name\n * reports \"aria-label is missing\", not \"tooltip is missing\".\n */\ntype IconLinkNameProps = IconLinkAriaLabelProps | IconLinkTooltipProps\n\nexport type IconLinkProps = IconLinkSharedProps &\n IconLinkNameProps & {\n /** Where the tooltip renders relative to the link. Default `\"bottom\"`. Has no effect without `tooltip`. */\n tooltipPlacement?: TooltipPlacement\n }\n\n/**\n * An icon-only link component that renders as an HTML `<a>` element with\n * button-like styling. Requires an `icon`, and an `aria-label` or `tooltip`\n * for accessibility.\n *\n * @component\n * @see {@link https://planningcenter.github.io/tapestry/?path=/docs/links-icon-link--docs | Storybook Documentation}\n */\nexport const IconLink = forwardRef<HTMLAnchorElement, IconLinkProps>(\n (\n {\n className,\n href,\n icon,\n tooltip,\n tooltipPlacement = \"bottom\",\n ...restProps\n }: IconLinkProps,\n ref\n ) => {\n const iconOnlyClassName = classNames(\"tds-btn--icononly\", className)\n\n if (tooltip) {\n const {\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n ...linkProps\n } = restProps\n\n return (\n <Tooltip content={tooltip} placement={tooltipPlacement} visualOnly>\n <BaseLink\n href={href}\n label={icon}\n className={iconOnlyClassName}\n ref={ref}\n {...linkProps}\n aria-label={ariaLabel || tooltip}\n />\n </Tooltip>\n )\n }\n\n return (\n <BaseLink\n href={href}\n label={icon}\n className={iconOnlyClassName}\n ref={ref}\n {...restProps}\n />\n )\n }\n)\n\nIconLink.displayName = \"IconLink\"\n"],"names":["React"],"mappings":";;;;;AA2CA;;;;;;;AAOG;AACI,MAAM,QAAQ,GAAG,UAAU,CAChC,CACE,EACE,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,gBAAgB,GAAG,QAAQ,EAC3B,GAAG,SAAS,EACE,EAChB,GAAG,KACD;IACF,MAAM,iBAAiB,GAAG,UAAU,CAAC,mBAAmB,EAAE,SAAS,CAAC;IAEpE,IAAI,OAAO,EAAE;AACX,QAAA,MAAM,EACJ,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,EACjC,GAAG,SAAS,EACb,GAAG,SAAS;AAEb,QAAA,QACEA,cAAA,CAAA,aAAA,CAAC,OAAO,EAAA,EAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,UAAU,EAAA,IAAA,EAAA;YAChEA,cAAA,CAAA,aAAA,CAAC,QAAQ,EAAA,EACP,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,IAAI,EACX,SAAS,EAAE,iBAAiB,EAC5B,GAAG,EAAE,GAAG,EAAA,GACJ,SAAS,EAAA,YAAA,EACD,SAAS,IAAI,OAAO,EAAA,CAChC,CACM;IAEd;IAEA,QACEA,6BAAC,QAAQ,EAAA,EACP,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,IAAI,EACX,SAAS,EAAE,iBAAiB,EAC5B,GAAG,EAAE,GAAG,EAAA,GACJ,SAAS,EAAA,CACb;AAEN,CAAC;AAGH,QAAQ,CAAC,WAAW,GAAG,UAAU;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import '../../packages/tapestry-wc/dist/components/p-
|
|
1
|
+
import '../../packages/tapestry-wc/dist/components/p-CBFtMIxJ.js';
|
|
2
2
|
import { defineCustomElement } from '../../packages/tapestry-wc/dist/components/tds-page-header.js';
|
|
3
3
|
import { defineCustomElement as defineCustomElement$1 } from '../../packages/tapestry-wc/dist/components/tds-page-header-nav.js';
|
|
4
4
|
import { defineTdsScrollToSelectedInUnorderedList } from './tds-scroll-to-selected-in-unordered-list.js';
|
|
@@ -13,7 +13,7 @@ export type PaneElementProps = Omit<HTMLAttributes<HTMLDivElement>, keyof PanePr
|
|
|
13
13
|
* `Flex` or another layout primitive.
|
|
14
14
|
*
|
|
15
15
|
* @component
|
|
16
|
-
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/
|
|
16
|
+
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/layout-pane--docs | Storybook Documentation}
|
|
17
17
|
*/
|
|
18
18
|
export declare function Pane({ children, className, id, ...restProps }: PaneElementProps): React.JSX.Element;
|
|
19
19
|
export declare namespace Pane {
|
|
@@ -31,7 +31,7 @@ function flattenChildren(children) {
|
|
|
31
31
|
* `Flex` or another layout primitive.
|
|
32
32
|
*
|
|
33
33
|
* @component
|
|
34
|
-
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/
|
|
34
|
+
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/layout-pane--docs | Storybook Documentation}
|
|
35
35
|
*/
|
|
36
36
|
function Pane({ children, className, id, ...restProps }) {
|
|
37
37
|
const stableId = useId();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pane.js","sources":["../../../src/components/pane/Pane.tsx"],"sourcesContent":["import \"./index.css\"\n\nimport { useId } from \"@utilities/useId\"\nimport classNames from \"classnames\"\nimport React, { type HTMLAttributes } from \"react\"\n\nimport { PaneContext } from \"./PaneContext\"\nimport { hasRenderableContent, PaneHeader } from \"./PaneHeader\"\n\nexport interface PaneProps {\n /** `PaneHeader` / `PaneBody` / `PaneFooter`. */\n children: React.ReactNode\n}\n\nexport type PaneElementProps = Omit<\n HTMLAttributes<HTMLDivElement>,\n keyof PaneProps\n> &\n PaneProps\n\n/**\n * Flattens Fragments so a `PaneHeader` can be found regardless of whether\n * children arrive as direct JSX children or as a single Fragment value (as\n * happens when `children` is passed via props, e.g. Storybook args or\n * `tapestry-render`).\n */\nfunction flattenChildren(children: React.ReactNode): React.ReactNode[] {\n const result: React.ReactNode[] = []\n\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child) && child.type === React.Fragment) {\n const fragmentProps = child.props as { children?: React.ReactNode }\n result.push(...flattenChildren(fragmentProps.children))\n } else {\n result.push(child)\n }\n })\n\n return result\n}\n\n/**\n * A decorative, static surface — a card-toned container with rounded corners\n * used to visually group related content. Renders a fixed anatomy: an\n * optional `PaneHeader`, a `PaneBody`, and an optional `PaneFooter`. Pane does\n * not manage layout — arrange Panes on a page, and content within one, with\n * `Flex` or another layout primitive.\n *\n * @component\n * @see {@link https://planningcenter.github.io/tapestry/?path=/docs/
|
|
1
|
+
{"version":3,"file":"Pane.js","sources":["../../../src/components/pane/Pane.tsx"],"sourcesContent":["import \"./index.css\"\n\nimport { useId } from \"@utilities/useId\"\nimport classNames from \"classnames\"\nimport React, { type HTMLAttributes } from \"react\"\n\nimport { PaneContext } from \"./PaneContext\"\nimport { hasRenderableContent, PaneHeader } from \"./PaneHeader\"\n\nexport interface PaneProps {\n /** `PaneHeader` / `PaneBody` / `PaneFooter`. */\n children: React.ReactNode\n}\n\nexport type PaneElementProps = Omit<\n HTMLAttributes<HTMLDivElement>,\n keyof PaneProps\n> &\n PaneProps\n\n/**\n * Flattens Fragments so a `PaneHeader` can be found regardless of whether\n * children arrive as direct JSX children or as a single Fragment value (as\n * happens when `children` is passed via props, e.g. Storybook args or\n * `tapestry-render`).\n */\nfunction flattenChildren(children: React.ReactNode): React.ReactNode[] {\n const result: React.ReactNode[] = []\n\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child) && child.type === React.Fragment) {\n const fragmentProps = child.props as { children?: React.ReactNode }\n result.push(...flattenChildren(fragmentProps.children))\n } else {\n result.push(child)\n }\n })\n\n return result\n}\n\n/**\n * A decorative, static surface — a card-toned container with rounded corners\n * used to visually group related content. Renders a fixed anatomy: an\n * optional `PaneHeader`, a `PaneBody`, and an optional `PaneFooter`. Pane does\n * not manage layout — arrange Panes on a page, and content within one, with\n * `Flex` or another layout primitive.\n *\n * @component\n * @see {@link https://planningcenter.github.io/tapestry/?path=/docs/layout-pane--docs | Storybook Documentation}\n */\nexport function Pane({\n children,\n className,\n id,\n ...restProps\n}: PaneElementProps) {\n const stableId = useId()\n const paneId = id || `tds-pane-${stableId}`\n const titleId = `${paneId}-title`\n const combinedClassName = classNames(\"tds-pane\", className)\n\n const paneHeader = flattenChildren(children).find(\n (child): child is React.ReactElement<{ title?: React.ReactNode }> =>\n React.isValidElement(child) && child.type === PaneHeader\n )\n const hasTitle = hasRenderableContent(paneHeader?.props.title)\n\n return (\n <div\n {...restProps}\n aria-labelledby={hasTitle ? titleId : undefined}\n className={combinedClassName}\n id={paneId}\n role={hasTitle ? \"region\" : undefined}\n >\n <PaneContext.Provider value={{ paneId, titleId }}>\n {children}\n </PaneContext.Provider>\n </div>\n )\n}\n\nPane.displayName = \"Pane\"\n"],"names":["React"],"mappings":";;;;;;AAoBA;;;;;AAKG;AACH,SAAS,eAAe,CAAC,QAAyB,EAAA;IAChD,MAAM,MAAM,GAAsB,EAAE;IAEpCA,cAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,KAAI;AACzC,QAAA,IAAIA,cAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAKA,cAAK,CAAC,QAAQ,EAAE;AAChE,YAAA,MAAM,aAAa,GAAG,KAAK,CAAC,KAAuC;YACnE,MAAM,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACzD;aAAO;AACL,YAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QACpB;AACF,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,MAAM;AACf;AAEA;;;;;;;;;AASG;AACG,SAAU,IAAI,CAAC,EACnB,QAAQ,EACR,SAAS,EACT,EAAE,EACF,GAAG,SAAS,EACK,EAAA;AACjB,IAAA,MAAM,QAAQ,GAAG,KAAK,EAAE;AACxB,IAAA,MAAM,MAAM,GAAG,EAAE,IAAI,CAAA,SAAA,EAAY,QAAQ,EAAE;AAC3C,IAAA,MAAM,OAAO,GAAG,CAAA,EAAG,MAAM,QAAQ;IACjC,MAAM,iBAAiB,GAAG,UAAU,CAAC,UAAU,EAAE,SAAS,CAAC;IAE3D,MAAM,UAAU,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,IAAI,CAC/C,CAAC,KAAK,KACJA,cAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,CAC3D;IACD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC;AAE9D,IAAA,QACEA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,GACM,SAAS,EAAA,iBAAA,EACI,QAAQ,GAAG,OAAO,GAAG,SAAS,EAC/C,SAAS,EAAE,iBAAiB,EAC5B,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,EAAA;AAErC,QAAAA,cAAA,CAAA,aAAA,CAAC,WAAW,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAA,EAC7C,QAAQ,CACY,CACnB;AAEV;AAEA,IAAI,CAAC,WAAW,GAAG,MAAM;;;;"}
|
|
@@ -9,7 +9,7 @@ export type PaneBodyElementProps = Omit<HTMLAttributes<HTMLDivElement>, keyof Pa
|
|
|
9
9
|
* The body region of a `Pane` — holds arbitrary content.
|
|
10
10
|
*
|
|
11
11
|
* @component
|
|
12
|
-
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/
|
|
12
|
+
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/layout-pane--docs | Storybook Documentation}
|
|
13
13
|
*/
|
|
14
14
|
export declare function PaneBody({ children, className, ...restProps }: PaneBodyElementProps): React.JSX.Element;
|
|
15
15
|
export declare namespace PaneBody {
|
|
@@ -5,7 +5,7 @@ import React__default from 'react';
|
|
|
5
5
|
* The body region of a `Pane` — holds arbitrary content.
|
|
6
6
|
*
|
|
7
7
|
* @component
|
|
8
|
-
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/
|
|
8
|
+
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/layout-pane--docs | Storybook Documentation}
|
|
9
9
|
*/
|
|
10
10
|
function PaneBody({ children, className, ...restProps }) {
|
|
11
11
|
const combinedClassName = classNames("tds-pane-body", className);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaneBody.js","sources":["../../../src/components/pane/PaneBody.tsx"],"sourcesContent":["import \"./index.css\"\n\nimport classNames from \"classnames\"\nimport React, { type HTMLAttributes } from \"react\"\n\nexport interface PaneBodyProps {\n /** Arbitrary content; may include a `PaneDivider` between sub-sections. */\n children: React.ReactNode\n}\n\nexport type PaneBodyElementProps = Omit<\n HTMLAttributes<HTMLDivElement>,\n keyof PaneBodyProps\n> &\n PaneBodyProps\n\n/**\n * The body region of a `Pane` — holds arbitrary content.\n *\n * @component\n * @see {@link https://planningcenter.github.io/tapestry/?path=/docs/
|
|
1
|
+
{"version":3,"file":"PaneBody.js","sources":["../../../src/components/pane/PaneBody.tsx"],"sourcesContent":["import \"./index.css\"\n\nimport classNames from \"classnames\"\nimport React, { type HTMLAttributes } from \"react\"\n\nexport interface PaneBodyProps {\n /** Arbitrary content; may include a `PaneDivider` between sub-sections. */\n children: React.ReactNode\n}\n\nexport type PaneBodyElementProps = Omit<\n HTMLAttributes<HTMLDivElement>,\n keyof PaneBodyProps\n> &\n PaneBodyProps\n\n/**\n * The body region of a `Pane` — holds arbitrary content.\n *\n * @component\n * @see {@link https://planningcenter.github.io/tapestry/?path=/docs/layout-pane--docs | Storybook Documentation}\n */\nexport function PaneBody({\n children,\n className,\n ...restProps\n}: PaneBodyElementProps) {\n const combinedClassName = classNames(\"tds-pane-body\", className)\n\n return (\n <div {...restProps} className={combinedClassName}>\n {children}\n </div>\n )\n}\n\nPaneBody.displayName = \"PaneBody\"\n"],"names":["React"],"mappings":";;;AAgBA;;;;;AAKG;AACG,SAAU,QAAQ,CAAC,EACvB,QAAQ,EACR,SAAS,EACT,GAAG,SAAS,EACS,EAAA;IACrB,MAAM,iBAAiB,GAAG,UAAU,CAAC,eAAe,EAAE,SAAS,CAAC;IAEhE,QACEA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,GAAS,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAA,EAC7C,QAAQ,CACL;AAEV;AAEA,QAAQ,CAAC,WAAW,GAAG,UAAU;;;;"}
|
|
@@ -8,7 +8,7 @@ export type PaneDividerElementProps = HTMLAttributes<HTMLHRElement> & {
|
|
|
8
8
|
* A 1px rule between sub-sections inside a `PaneBody`.
|
|
9
9
|
*
|
|
10
10
|
* @component
|
|
11
|
-
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/
|
|
11
|
+
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/layout-pane--docs | Storybook Documentation}
|
|
12
12
|
*/
|
|
13
13
|
export declare function PaneDivider({ className, inset, ...restProps }: PaneDividerElementProps): React.JSX.Element;
|
|
14
14
|
export declare namespace PaneDivider {
|
|
@@ -5,7 +5,7 @@ import React__default from 'react';
|
|
|
5
5
|
* A 1px rule between sub-sections inside a `PaneBody`.
|
|
6
6
|
*
|
|
7
7
|
* @component
|
|
8
|
-
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/
|
|
8
|
+
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/layout-pane--docs | Storybook Documentation}
|
|
9
9
|
*/
|
|
10
10
|
function PaneDivider({ className, inset = false, ...restProps }) {
|
|
11
11
|
const combinedClassName = classNames("tds-pane-divider", { "tds-pane-divider--inset": inset }, className);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaneDivider.js","sources":["../../../src/components/pane/PaneDivider.tsx"],"sourcesContent":["import \"./index.css\"\n\nimport classNames from \"classnames\"\nimport React, { type HTMLAttributes } from \"react\"\n\nexport type PaneDividerElementProps = HTMLAttributes<HTMLHRElement> & {\n /** Keeps the rule inside `PaneBody`'s padding instead of bleeding to the Pane's edges. */\n inset?: boolean\n}\n\n/**\n * A 1px rule between sub-sections inside a `PaneBody`.\n *\n * @component\n * @see {@link https://planningcenter.github.io/tapestry/?path=/docs/
|
|
1
|
+
{"version":3,"file":"PaneDivider.js","sources":["../../../src/components/pane/PaneDivider.tsx"],"sourcesContent":["import \"./index.css\"\n\nimport classNames from \"classnames\"\nimport React, { type HTMLAttributes } from \"react\"\n\nexport type PaneDividerElementProps = HTMLAttributes<HTMLHRElement> & {\n /** Keeps the rule inside `PaneBody`'s padding instead of bleeding to the Pane's edges. */\n inset?: boolean\n}\n\n/**\n * A 1px rule between sub-sections inside a `PaneBody`.\n *\n * @component\n * @see {@link https://planningcenter.github.io/tapestry/?path=/docs/layout-pane--docs | Storybook Documentation}\n */\nexport function PaneDivider({\n className,\n inset = false,\n ...restProps\n}: PaneDividerElementProps) {\n const combinedClassName = classNames(\n \"tds-pane-divider\",\n { \"tds-pane-divider--inset\": inset },\n className\n )\n\n return <hr {...restProps} className={combinedClassName} />\n}\n\nPaneDivider.displayName = \"PaneDivider\"\n"],"names":["React"],"mappings":";;;AAUA;;;;;AAKG;AACG,SAAU,WAAW,CAAC,EAC1B,SAAS,EACT,KAAK,GAAG,KAAK,EACb,GAAG,SAAS,EACY,EAAA;AACxB,IAAA,MAAM,iBAAiB,GAAG,UAAU,CAClC,kBAAkB,EAClB,EAAE,yBAAyB,EAAE,KAAK,EAAE,EACpC,SAAS,CACV;AAED,IAAA,OAAOA,wCAAQ,SAAS,EAAE,SAAS,EAAE,iBAAiB,GAAI;AAC5D;AAEA,WAAW,CAAC,WAAW,GAAG,aAAa;;;;"}
|
|
@@ -18,7 +18,7 @@ export type PaneFooterElementProps = DistributiveOmit<FlexProps, "as"> & PaneFoo
|
|
|
18
18
|
* controls spacing and alignment without reaching for a wrapper element.
|
|
19
19
|
*
|
|
20
20
|
* @component
|
|
21
|
-
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/
|
|
21
|
+
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/layout-pane--docs | Storybook Documentation}
|
|
22
22
|
*/
|
|
23
23
|
export declare function PaneFooter({ children, className, ...restProps }: PaneFooterElementProps): React.JSX.Element;
|
|
24
24
|
export declare namespace PaneFooter {
|
|
@@ -8,7 +8,7 @@ import React__default from 'react';
|
|
|
8
8
|
* controls spacing and alignment without reaching for a wrapper element.
|
|
9
9
|
*
|
|
10
10
|
* @component
|
|
11
|
-
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/
|
|
11
|
+
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/layout-pane--docs | Storybook Documentation}
|
|
12
12
|
*/
|
|
13
13
|
function PaneFooter({ children, className, ...restProps }) {
|
|
14
14
|
const combinedClassName = classNames("tds-pane-footer", className);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaneFooter.js","sources":["../../../src/components/pane/PaneFooter.tsx"],"sourcesContent":["import \"./index.css\"\n\nimport { Flex, type FlexProps } from \"@components/flex\"\nimport type { DistributiveOmit } from \"@utilities/typeUtils\"\nimport classNames from \"classnames\"\nimport React from \"react\"\n\nexport interface PaneFooterProps {\n /**\n * Action buttons only — per Figma guidance, a footer should be avoided\n * outside the documented exceptions (top-down flows like forms/wizards, or\n * when a primary action can't live in the header). Laid out in a row; pass\n * any `Flex` prop to adjust the layout.\n */\n children: React.ReactNode\n}\n\nexport type PaneFooterElementProps = DistributiveOmit<FlexProps, \"as\"> &\n PaneFooterProps\n\n/**\n * The footer region of a `Pane`, intended for action buttons. Lays its\n * children out in a `Flex` row and accepts every `Flex` prop, so the caller\n * controls spacing and alignment without reaching for a wrapper element.\n *\n * @component\n * @see {@link https://planningcenter.github.io/tapestry/?path=/docs/
|
|
1
|
+
{"version":3,"file":"PaneFooter.js","sources":["../../../src/components/pane/PaneFooter.tsx"],"sourcesContent":["import \"./index.css\"\n\nimport { Flex, type FlexProps } from \"@components/flex\"\nimport type { DistributiveOmit } from \"@utilities/typeUtils\"\nimport classNames from \"classnames\"\nimport React from \"react\"\n\nexport interface PaneFooterProps {\n /**\n * Action buttons only — per Figma guidance, a footer should be avoided\n * outside the documented exceptions (top-down flows like forms/wizards, or\n * when a primary action can't live in the header). Laid out in a row; pass\n * any `Flex` prop to adjust the layout.\n */\n children: React.ReactNode\n}\n\nexport type PaneFooterElementProps = DistributiveOmit<FlexProps, \"as\"> &\n PaneFooterProps\n\n/**\n * The footer region of a `Pane`, intended for action buttons. Lays its\n * children out in a `Flex` row and accepts every `Flex` prop, so the caller\n * controls spacing and alignment without reaching for a wrapper element.\n *\n * @component\n * @see {@link https://planningcenter.github.io/tapestry/?path=/docs/layout-pane--docs | Storybook Documentation}\n */\nexport function PaneFooter({\n children,\n className,\n ...restProps\n}: PaneFooterElementProps) {\n const combinedClassName = classNames(\"tds-pane-footer\", className)\n\n return (\n <Flex\n align=\"center\"\n direction=\"row\"\n gap={2}\n justify=\"end\"\n {...restProps}\n as=\"footer\"\n className={combinedClassName}\n role=\"group\"\n >\n {children}\n </Flex>\n )\n}\n\nPaneFooter.displayName = \"PaneFooter\"\n"],"names":["React"],"mappings":";;;;AAoBA;;;;;;;AAOG;AACG,SAAU,UAAU,CAAC,EACzB,QAAQ,EACR,SAAS,EACT,GAAG,SAAS,EACW,EAAA;IACvB,MAAM,iBAAiB,GAAG,UAAU,CAAC,iBAAiB,EAAE,SAAS,CAAC;AAElE,IAAA,QACEA,cAAA,CAAA,aAAA,CAAC,IAAI,EAAA,EACH,KAAK,EAAC,QAAQ,EACd,SAAS,EAAC,KAAK,EACf,GAAG,EAAE,CAAC,EACN,OAAO,EAAC,KAAK,EAAA,GACT,SAAS,EACb,EAAE,EAAC,QAAQ,EACX,SAAS,EAAE,iBAAiB,EAC5B,IAAI,EAAC,OAAO,IAEX,QAAQ,CACJ;AAEX;AAEA,UAAU,CAAC,WAAW,GAAG,YAAY;;;;"}
|
|
@@ -41,7 +41,7 @@ export declare function hasRenderableContent(content: React.ReactNode): boolean;
|
|
|
41
41
|
* `Pane`.
|
|
42
42
|
*
|
|
43
43
|
* @component
|
|
44
|
-
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/
|
|
44
|
+
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/layout-pane--docs | Storybook Documentation}
|
|
45
45
|
*/
|
|
46
46
|
export declare function PaneHeader({ children, className, helpContent, level, title, ...restProps }: PaneHeaderElementProps): React.JSX.Element;
|
|
47
47
|
export declare namespace PaneHeader {
|
|
@@ -23,7 +23,7 @@ function hasRenderableContent(content) {
|
|
|
23
23
|
* `Pane`.
|
|
24
24
|
*
|
|
25
25
|
* @component
|
|
26
|
-
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/
|
|
26
|
+
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/layout-pane--docs | Storybook Documentation}
|
|
27
27
|
*/
|
|
28
28
|
function PaneHeader({ children, className, helpContent, level = 2, title, ...restProps }) {
|
|
29
29
|
const { paneId, titleId } = useContext(PaneContext) ?? {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaneHeader.js","sources":["../../../src/components/pane/PaneHeader.tsx"],"sourcesContent":["import \"./index.css\"\n\nimport { Flex } from \"@components/flex\"\nimport { HelperShelf } from \"@components/internal/helper-shelf\"\nimport classNames from \"classnames\"\nimport React, { type HTMLAttributes, useContext } from \"react\"\n\nimport { PaneContext } from \"./PaneContext\"\n\nexport type PaneHeaderLevel = 2 | 3\n\nexport interface PaneHeaderProps {\n /**\n * Trailing header content, rendered after the title — typically a\n * `PaneHeaderActions` wrapping the buttons that affect the whole pane.\n */\n children?: React.ReactNode\n /**\n * Content for the collapsible helper shelf. When set, the header renders a\n * \"More info\" trigger after the title and the shelf beneath it. The shelf\n * starts closed.\n */\n helpContent?: React.ReactNode\n /**\n * Controls which heading element renders (`h2` or `h3`) so the title fits\n * the document outline wherever the Pane is nested. Visual style stays\n * constant at every level. Defaults to `2`; override to `3` when nesting a\n * Pane one level deeper in the heading outline.\n */\n level?: PaneHeaderLevel\n /**\n * The pane's title. Optional only in the documented exception — e.g. a\n * wizard step whose title already lives in a Stepper component.\n */\n title?: React.ReactNode\n}\n\nexport type PaneHeaderElementProps = Omit<\n HTMLAttributes<HTMLDivElement>,\n keyof PaneHeaderProps\n> &\n PaneHeaderProps\n\n/**\n * Whether `content` produces visible output — skips `undefined`, `null`, `\"\"`,\n * and booleans (e.g. `isEditing && \"Edit settings\"`). Used for both `title`\n * and `helpContent`, and shared with `Pane` so the root's `role=\"region\"` /\n * `aria-labelledby` stays in sync with whether the heading actually renders.\n */\nexport function hasRenderableContent(content: React.ReactNode): boolean {\n return (\n content !== undefined &&\n content !== null &&\n content !== \"\" &&\n typeof content !== \"boolean\"\n )\n}\n\n/**\n * The header region of a `Pane` — renders the title, an optional help trigger\n * and shelf (`helpContent`), then any children, which should be a\n * `PaneHeaderActions` when the pane has actions. Must be rendered inside a\n * `Pane`.\n *\n * @component\n * @see {@link https://planningcenter.github.io/tapestry/?path=/docs/
|
|
1
|
+
{"version":3,"file":"PaneHeader.js","sources":["../../../src/components/pane/PaneHeader.tsx"],"sourcesContent":["import \"./index.css\"\n\nimport { Flex } from \"@components/flex\"\nimport { HelperShelf } from \"@components/internal/helper-shelf\"\nimport classNames from \"classnames\"\nimport React, { type HTMLAttributes, useContext } from \"react\"\n\nimport { PaneContext } from \"./PaneContext\"\n\nexport type PaneHeaderLevel = 2 | 3\n\nexport interface PaneHeaderProps {\n /**\n * Trailing header content, rendered after the title — typically a\n * `PaneHeaderActions` wrapping the buttons that affect the whole pane.\n */\n children?: React.ReactNode\n /**\n * Content for the collapsible helper shelf. When set, the header renders a\n * \"More info\" trigger after the title and the shelf beneath it. The shelf\n * starts closed.\n */\n helpContent?: React.ReactNode\n /**\n * Controls which heading element renders (`h2` or `h3`) so the title fits\n * the document outline wherever the Pane is nested. Visual style stays\n * constant at every level. Defaults to `2`; override to `3` when nesting a\n * Pane one level deeper in the heading outline.\n */\n level?: PaneHeaderLevel\n /**\n * The pane's title. Optional only in the documented exception — e.g. a\n * wizard step whose title already lives in a Stepper component.\n */\n title?: React.ReactNode\n}\n\nexport type PaneHeaderElementProps = Omit<\n HTMLAttributes<HTMLDivElement>,\n keyof PaneHeaderProps\n> &\n PaneHeaderProps\n\n/**\n * Whether `content` produces visible output — skips `undefined`, `null`, `\"\"`,\n * and booleans (e.g. `isEditing && \"Edit settings\"`). Used for both `title`\n * and `helpContent`, and shared with `Pane` so the root's `role=\"region\"` /\n * `aria-labelledby` stays in sync with whether the heading actually renders.\n */\nexport function hasRenderableContent(content: React.ReactNode): boolean {\n return (\n content !== undefined &&\n content !== null &&\n content !== \"\" &&\n typeof content !== \"boolean\"\n )\n}\n\n/**\n * The header region of a `Pane` — renders the title, an optional help trigger\n * and shelf (`helpContent`), then any children, which should be a\n * `PaneHeaderActions` when the pane has actions. Must be rendered inside a\n * `Pane`.\n *\n * @component\n * @see {@link https://planningcenter.github.io/tapestry/?path=/docs/layout-pane--docs | Storybook Documentation}\n */\nexport function PaneHeader({\n children,\n className,\n helpContent,\n level = 2,\n title,\n ...restProps\n}: PaneHeaderElementProps) {\n const { paneId, titleId } = useContext(PaneContext) ?? {}\n const combinedClassName = classNames(\"tds-pane-header\", className)\n const Heading = `h${level}` as \"h2\" | \"h3\"\n const hasTitle = hasRenderableContent(title)\n const hasHelpContent = hasRenderableContent(helpContent)\n\n return (\n <Flex\n as=\"header\"\n align=\"center\"\n gap={2}\n justify=\"space-between\"\n direction=\"row\"\n wrap=\"wrap\"\n {...restProps}\n className={combinedClassName}\n role=\"group\"\n >\n {hasTitle && (\n <Heading className=\"tds-pane-title\" id={titleId}>\n {title}\n </Heading>\n )}\n {hasHelpContent && (\n <HelperShelf\n id={paneId && `${paneId}-help`}\n labelledById={hasTitle ? titleId : undefined}\n >\n {helpContent}\n </HelperShelf>\n )}\n {children}\n </Flex>\n )\n}\n\nPaneHeader.displayName = \"PaneHeader\"\n"],"names":["React"],"mappings":";;;;;;AA2CA;;;;;AAKG;AACG,SAAU,oBAAoB,CAAC,OAAwB,EAAA;IAC3D,QACE,OAAO,KAAK,SAAS;AACrB,QAAA,OAAO,KAAK,IAAI;AAChB,QAAA,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,OAAO,KAAK,SAAS;AAEhC;AAEA;;;;;;;;AAQG;SACa,UAAU,CAAC,EACzB,QAAQ,EACR,SAAS,EACT,WAAW,EACX,KAAK,GAAG,CAAC,EACT,KAAK,EACL,GAAG,SAAS,EACW,EAAA;AACvB,IAAA,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE;IACzD,MAAM,iBAAiB,GAAG,UAAU,CAAC,iBAAiB,EAAE,SAAS,CAAC;AAClE,IAAA,MAAM,OAAO,GAAG,CAAA,CAAA,EAAI,KAAK,EAAiB;AAC1C,IAAA,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,CAAC;AAC5C,IAAA,MAAM,cAAc,GAAG,oBAAoB,CAAC,WAAW,CAAC;AAExD,IAAA,QACEA,cAAA,CAAA,aAAA,CAAC,IAAI,EAAA,EACH,EAAE,EAAC,QAAQ,EACX,KAAK,EAAC,QAAQ,EACd,GAAG,EAAE,CAAC,EACN,OAAO,EAAC,eAAe,EACvB,SAAS,EAAC,KAAK,EACf,IAAI,EAAC,MAAM,EAAA,GACP,SAAS,EACb,SAAS,EAAE,iBAAiB,EAC5B,IAAI,EAAC,OAAO,EAAA;AAEX,QAAA,QAAQ,KACPA,cAAA,CAAA,aAAA,CAAC,OAAO,IAAC,SAAS,EAAC,gBAAgB,EAAC,EAAE,EAAE,OAAO,EAAA,EAC5C,KAAK,CACE,CACX;QACA,cAAc,KACbA,cAAA,CAAA,aAAA,CAAC,WAAW,EAAA,EACV,EAAE,EAAE,MAAM,IAAI,CAAA,EAAG,MAAM,CAAA,KAAA,CAAO,EAC9B,YAAY,EAAE,QAAQ,GAAG,OAAO,GAAG,SAAS,EAAA,EAE3C,WAAW,CACA,CACf;QACA,QAAQ,CACJ;AAEX;AAEA,UAAU,CAAC,WAAW,GAAG,YAAY;;;;"}
|
|
@@ -15,7 +15,7 @@ export type PaneHeaderActionsElementProps = FlexProps & PaneHeaderActionsProps;
|
|
|
15
15
|
* alignment without reaching for a wrapper element.
|
|
16
16
|
*
|
|
17
17
|
* @component
|
|
18
|
-
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/
|
|
18
|
+
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/layout-pane--docs | Storybook Documentation}
|
|
19
19
|
*/
|
|
20
20
|
export declare function PaneHeaderActions({ children, className, ...restProps }: PaneHeaderActionsElementProps): React.JSX.Element;
|
|
21
21
|
export declare namespace PaneHeaderActions {
|
|
@@ -8,7 +8,7 @@ import React__default from 'react';
|
|
|
8
8
|
* alignment without reaching for a wrapper element.
|
|
9
9
|
*
|
|
10
10
|
* @component
|
|
11
|
-
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/
|
|
11
|
+
* @see {@link https://planningcenter.github.io/tapestry/?path=/docs/layout-pane--docs | Storybook Documentation}
|
|
12
12
|
*/
|
|
13
13
|
function PaneHeaderActions({ children, className, ...restProps }) {
|
|
14
14
|
const combinedClassName = classNames("tds-pane-header-actions", className);
|