@planningcenter/tapestry 4.11.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.
Files changed (195) hide show
  1. package/dist/components/DataTable/CollectionEditorsLazy.js +2 -1
  2. package/dist/components/DataTable/CollectionEditorsLazy.js.map +1 -1
  3. package/dist/components/DataTable/DataTable.d.ts +49 -14
  4. package/dist/components/DataTable/DataTable.d.ts.map +1 -1
  5. package/dist/components/DataTable/DataTable.js +32 -24
  6. package/dist/components/DataTable/DataTable.js.map +1 -1
  7. package/dist/components/DataTable/DeleteSavedViewAlertDialog.d.ts +14 -0
  8. package/dist/components/DataTable/DeleteSavedViewAlertDialog.d.ts.map +1 -0
  9. package/dist/components/DataTable/DeleteSavedViewAlertDialog.js +10 -0
  10. package/dist/components/DataTable/DeleteSavedViewAlertDialog.js.map +1 -0
  11. package/dist/components/DataTable/ManageSavedViewsButton.d.ts +4 -1
  12. package/dist/components/DataTable/ManageSavedViewsButton.d.ts.map +1 -1
  13. package/dist/components/DataTable/ManageSavedViewsButton.js +3 -7
  14. package/dist/components/DataTable/ManageSavedViewsButton.js.map +1 -1
  15. package/dist/components/DataTable/ManageSavedViewsModal.d.ts +11 -1
  16. package/dist/components/DataTable/ManageSavedViewsModal.d.ts.map +1 -1
  17. package/dist/components/DataTable/ManageSavedViewsModal.js +265 -5
  18. package/dist/components/DataTable/ManageSavedViewsModal.js.map +1 -1
  19. package/dist/components/DataTable/ManageSavedViewsModal.module.css.js +4 -0
  20. package/dist/components/DataTable/ManageSavedViewsModal.module.css.js.map +1 -0
  21. package/dist/components/DataTable/NewSavedViewModal.d.ts +4 -1
  22. package/dist/components/DataTable/NewSavedViewModal.d.ts.map +1 -1
  23. package/dist/components/DataTable/NewSavedViewModal.js.map +1 -1
  24. package/dist/components/DataTable/ResultsCount.d.ts +9 -0
  25. package/dist/components/DataTable/ResultsCount.d.ts.map +1 -1
  26. package/dist/components/DataTable/ResultsCount.js +1 -1
  27. package/dist/components/DataTable/ResultsCount.js.map +1 -1
  28. package/dist/components/DataTable/SavedViewsBar.d.ts +14 -6
  29. package/dist/components/DataTable/SavedViewsBar.d.ts.map +1 -1
  30. package/dist/components/DataTable/SavedViewsBar.js +176 -45
  31. package/dist/components/DataTable/SavedViewsBar.js.map +1 -1
  32. package/dist/components/DataTable/TableActions.d.ts.map +1 -1
  33. package/dist/components/DataTable/TableActions.js +4 -6
  34. package/dist/components/DataTable/TableActions.js.map +1 -1
  35. package/dist/components/DataTable/ViewSettingsToggle.d.ts.map +1 -1
  36. package/dist/components/DataTable/ViewSettingsToggle.js +2 -4
  37. package/dist/components/DataTable/ViewSettingsToggle.js.map +1 -1
  38. package/dist/components/DataTable/index.d.ts +1 -1
  39. package/dist/components/DataTable/index.d.ts.map +1 -1
  40. package/dist/components/DataTable/savedViews.d.ts +40 -15
  41. package/dist/components/DataTable/savedViews.d.ts.map +1 -1
  42. package/dist/components/DataTable/savedViews.js +85 -6
  43. package/dist/components/DataTable/savedViews.js.map +1 -1
  44. package/dist/components/DataTable/useActiveSavedView.d.ts +1 -1
  45. package/dist/components/DataTable/useActiveSavedView.d.ts.map +1 -1
  46. package/dist/components/DataTable/useActiveSavedView.js +9 -3
  47. package/dist/components/DataTable/useActiveSavedView.js.map +1 -1
  48. package/dist/components/DataTable/useFilterAnnouncement.d.ts +24 -0
  49. package/dist/components/DataTable/useFilterAnnouncement.d.ts.map +1 -0
  50. package/dist/components/DataTable/useFilterAnnouncement.js +49 -0
  51. package/dist/components/DataTable/useFilterAnnouncement.js.map +1 -0
  52. package/dist/components/DataTable/useUpdateSavedViewName.d.ts +7 -0
  53. package/dist/components/DataTable/useUpdateSavedViewName.d.ts.map +1 -0
  54. package/dist/components/DataTable/useUpdateSavedViewName.js +12 -0
  55. package/dist/components/DataTable/useUpdateSavedViewName.js.map +1 -0
  56. package/dist/components/button/ActionsDropdownIconButton.d.ts +18 -9
  57. package/dist/components/button/ActionsDropdownIconButton.d.ts.map +1 -1
  58. package/dist/components/button/ActionsDropdownIconButton.js +5 -2
  59. package/dist/components/button/ActionsDropdownIconButton.js.map +1 -1
  60. package/dist/components/button/BaseButton.d.ts.map +1 -1
  61. package/dist/components/button/BaseButton.js +2 -1
  62. package/dist/components/button/BaseButton.js.map +1 -1
  63. package/dist/components/button/DropdownIconButton.d.ts +4 -5
  64. package/dist/components/button/DropdownIconButton.d.ts.map +1 -1
  65. package/dist/components/button/DropdownIconButton.js +2 -1
  66. package/dist/components/button/DropdownIconButton.js.map +1 -1
  67. package/dist/components/button/IconButton.d.ts +31 -10
  68. package/dist/components/button/IconButton.d.ts.map +1 -1
  69. package/dist/components/button/IconButton.js +8 -2
  70. package/dist/components/button/IconButton.js.map +1 -1
  71. package/dist/components/button/ToggleIconButton.d.ts +4 -1
  72. package/dist/components/button/ToggleIconButton.d.ts.map +1 -1
  73. package/dist/components/button/ToggleIconButton.js +1 -0
  74. package/dist/components/button/ToggleIconButton.js.map +1 -1
  75. package/dist/components/button/index.d.ts +1 -0
  76. package/dist/components/button/index.d.ts.map +1 -1
  77. package/dist/components/combo-box/ComboBox.d.ts +8 -0
  78. package/dist/components/combo-box/ComboBox.d.ts.map +1 -1
  79. package/dist/components/combo-box/ComboBox.js +31 -5
  80. package/dist/components/combo-box/ComboBox.js.map +1 -1
  81. package/dist/components/date-picker/DatePicker.d.ts.map +1 -1
  82. package/dist/components/date-picker/DatePicker.js +18 -14
  83. package/dist/components/date-picker/DatePicker.js.map +1 -1
  84. package/dist/components/internal/LoadingAnnouncement.d.ts +11 -0
  85. package/dist/components/internal/LoadingAnnouncement.d.ts.map +1 -0
  86. package/dist/components/internal/LoadingAnnouncement.js +21 -0
  87. package/dist/components/internal/LoadingAnnouncement.js.map +1 -0
  88. package/dist/components/internal/alert-dialog/AlertDialog.d.ts +56 -0
  89. package/dist/components/internal/alert-dialog/AlertDialog.d.ts.map +1 -0
  90. package/dist/components/internal/alert-dialog/AlertDialog.js +68 -0
  91. package/dist/components/internal/alert-dialog/AlertDialog.js.map +1 -0
  92. package/dist/components/internal/alert-dialog/index.d.ts +5 -0
  93. package/dist/components/internal/alert-dialog/index.d.ts.map +1 -0
  94. package/dist/components/internal/index.d.ts +1 -0
  95. package/dist/components/internal/index.d.ts.map +1 -1
  96. package/dist/components/internal/tooltip/Tooltip.d.ts +13 -5
  97. package/dist/components/internal/tooltip/Tooltip.d.ts.map +1 -1
  98. package/dist/components/internal/tooltip/Tooltip.js +63 -8
  99. package/dist/components/internal/tooltip/Tooltip.js.map +1 -1
  100. package/dist/components/internal/tooltip/TooltipTriggerContext.d.ts +3 -3
  101. package/dist/components/internal/tooltip/TooltipTriggerContext.d.ts.map +1 -1
  102. package/dist/components/internal/tooltip/TooltipTriggerContext.js +1 -1
  103. package/dist/components/internal/tooltip/TooltipTriggerContext.js.map +1 -1
  104. package/dist/components/internal/tooltip/index.d.ts +1 -1
  105. package/dist/components/internal/tooltip/index.d.ts.map +1 -1
  106. package/dist/components/link/BaseLink.d.ts.map +1 -1
  107. package/dist/components/link/BaseLink.js +15 -3
  108. package/dist/components/link/BaseLink.js.map +1 -1
  109. package/dist/components/link/IconLink.d.ts +28 -290
  110. package/dist/components/link/IconLink.d.ts.map +1 -1
  111. package/dist/components/link/IconLink.js +9 -2
  112. package/dist/components/link/IconLink.js.map +1 -1
  113. package/dist/components/page-header/defineElements.js +1 -1
  114. package/dist/components/pane/Pane.d.ts +1 -1
  115. package/dist/components/pane/Pane.js +1 -1
  116. package/dist/components/pane/Pane.js.map +1 -1
  117. package/dist/components/pane/PaneBody.d.ts +1 -1
  118. package/dist/components/pane/PaneBody.js +1 -1
  119. package/dist/components/pane/PaneBody.js.map +1 -1
  120. package/dist/components/pane/PaneDivider.d.ts +6 -3
  121. package/dist/components/pane/PaneDivider.d.ts.map +1 -1
  122. package/dist/components/pane/PaneDivider.js +3 -3
  123. package/dist/components/pane/PaneDivider.js.map +1 -1
  124. package/dist/components/pane/PaneFooter.d.ts +1 -1
  125. package/dist/components/pane/PaneFooter.js +1 -1
  126. package/dist/components/pane/PaneFooter.js.map +1 -1
  127. package/dist/components/pane/PaneHeader.d.ts +1 -1
  128. package/dist/components/pane/PaneHeader.js +1 -1
  129. package/dist/components/pane/PaneHeader.js.map +1 -1
  130. package/dist/components/pane/PaneHeaderActions.d.ts +1 -1
  131. package/dist/components/pane/PaneHeaderActions.js +1 -1
  132. package/dist/components/pane/PaneHeaderActions.js.map +1 -1
  133. package/dist/components/sidenav/defineElements.js +1 -1
  134. package/dist/components/time-field/TimeField.d.ts.map +1 -1
  135. package/dist/components/time-field/TimeField.js +7 -3
  136. package/dist/components/time-field/TimeField.js.map +1 -1
  137. package/dist/index.css +169 -27
  138. package/dist/index.css.map +1 -1
  139. package/dist/index.d.ts +1 -0
  140. package/dist/index.d.ts.map +1 -1
  141. package/dist/index.js +6 -0
  142. package/dist/index.js.map +1 -1
  143. package/dist/packages/tapestry-wc/dist/components/{p-np7vhMVg.js → p-A1JK45WV.js} +3 -3
  144. package/dist/packages/tapestry-wc/dist/components/p-A1JK45WV.js.map +1 -0
  145. package/dist/packages/tapestry-wc/dist/components/{p-BVvtAaVT.js → p-BbuNAv9q.js} +3 -3
  146. package/dist/packages/tapestry-wc/dist/components/p-BbuNAv9q.js.map +1 -0
  147. package/dist/packages/tapestry-wc/dist/components/{p-B2xqMgNQ.js → p-CBFtMIxJ.js} +2 -2
  148. package/dist/packages/tapestry-wc/dist/components/p-CBFtMIxJ.js.map +1 -0
  149. package/dist/packages/tapestry-wc/dist/components/{p-Rn6lOB18.js → p-CY_DC4d_.js} +3 -3
  150. package/dist/packages/tapestry-wc/dist/components/p-CY_DC4d_.js.map +1 -0
  151. package/dist/packages/tapestry-wc/dist/components/{p-6NO22Vi_.js → p-DNHgMtxw.js} +2 -2
  152. package/dist/packages/tapestry-wc/dist/components/p-DNHgMtxw.js.map +1 -0
  153. package/dist/packages/tapestry-wc/dist/components/tds-page-header-nav.js +2 -2
  154. package/dist/packages/tapestry-wc/dist/components/tds-page-header-nav.js.map +1 -1
  155. package/dist/packages/tapestry-wc/dist/components/tds-page-header.js +3 -3
  156. package/dist/packages/tapestry-wc/dist/components/tds-page-header.js.map +1 -1
  157. package/dist/packages/tapestry-wc/dist/components/tds-sidenav-item.js +3 -3
  158. package/dist/packages/tapestry-wc/dist/components/tds-sidenav-item.js.map +1 -1
  159. package/dist/packages/tapestry-wc/dist/components/tds-sidenav-responsive-header.js +2 -2
  160. package/dist/packages/tapestry-wc/dist/components/tds-sidenav-responsive-header.js.map +1 -1
  161. package/dist/packages/tapestry-wc/dist/components/tds-sidenav-section.js +3 -3
  162. package/dist/packages/tapestry-wc/dist/components/tds-sidenav-section.js.map +1 -1
  163. package/dist/packages/tapestry-wc/dist/components/tds-sidenav.js +5 -5
  164. package/dist/packages/tapestry-wc/dist/components/tds-sidenav.js.map +1 -1
  165. package/dist/reactRender.css +756 -574
  166. package/dist/reactRender.css.map +1 -1
  167. package/dist/reactRenderLegacy.css +756 -574
  168. package/dist/reactRenderLegacy.css.map +1 -1
  169. package/dist/tapestryMount.css +756 -574
  170. package/dist/tapestryMount.css.map +1 -1
  171. package/dist/tapestryMountLegacy.css +756 -574
  172. package/dist/tapestryMountLegacy.css.map +1 -1
  173. package/dist/unstable.css +309 -127
  174. package/dist/unstable.css.map +1 -1
  175. package/dist/unstable.d.ts +0 -1
  176. package/dist/unstable.d.ts.map +1 -1
  177. package/dist/unstable.js +6 -6
  178. package/dist/utilities/dateFieldLocale.d.ts +2 -0
  179. package/dist/utilities/dateFieldLocale.d.ts.map +1 -0
  180. package/dist/utilities/dateFieldLocale.js +32 -0
  181. package/dist/utilities/dateFieldLocale.js.map +1 -0
  182. package/dist/utilities/useAnnounce.d.ts +22 -0
  183. package/dist/utilities/useAnnounce.d.ts.map +1 -0
  184. package/dist/utilities/useAnnounce.js +27 -0
  185. package/dist/utilities/useAnnounce.js.map +1 -0
  186. package/dist/utilities/useDateFieldLocale.d.ts +2 -0
  187. package/dist/utilities/useDateFieldLocale.d.ts.map +1 -0
  188. package/dist/utilities/useDateFieldLocale.js +11 -0
  189. package/dist/utilities/useDateFieldLocale.js.map +1 -0
  190. package/package.json +4 -4
  191. package/dist/packages/tapestry-wc/dist/components/p-6NO22Vi_.js.map +0 -1
  192. package/dist/packages/tapestry-wc/dist/components/p-B2xqMgNQ.js.map +0 -1
  193. package/dist/packages/tapestry-wc/dist/components/p-BVvtAaVT.js.map +0 -1
  194. package/dist/packages/tapestry-wc/dist/components/p-Rn6lOB18.js.map +0 -1
  195. package/dist/packages/tapestry-wc/dist/components/p-np7vhMVg.js.map +0 -1
@@ -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/unstable-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;;;;"}
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/unstable-pane--docs | Storybook Documentation}
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/unstable-pane--docs | Storybook Documentation}
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/unstable-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;;;;"}
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/unstable-pane--docs | Storybook Documentation}
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/unstable-pane--docs | Storybook Documentation}
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);
@@ -1 +1 @@
1
- {"version":3,"file":"PaneHeaderActions.js","sources":["../../../src/components/pane/PaneHeaderActions.tsx"],"sourcesContent":["import \"./index.css\"\n\nimport { Flex, type FlexProps } from \"@components/flex\"\nimport classNames from \"classnames\"\nimport React from \"react\"\n\nexport interface PaneHeaderActionsProps {\n /**\n * The actions themselves — buttons that affect the whole pane (e.g. Save /\n * Cancel). Laid out in a row; pass any `Flex` prop to adjust the layout.\n */\n children: React.ReactNode\n}\n\nexport type PaneHeaderActionsElementProps = FlexProps & PaneHeaderActionsProps\n\n/**\n * The trailing action cluster of a `PaneHeader`. Wraps its children in a\n * `Flex` row and accepts every `Flex` prop, so the caller controls spacing and\n * alignment without reaching for a wrapper element.\n *\n * @component\n * @see {@link https://planningcenter.github.io/tapestry/?path=/docs/unstable-pane--docs | Storybook Documentation}\n */\nexport function PaneHeaderActions({\n children,\n className,\n ...restProps\n}: PaneHeaderActionsElementProps) {\n const combinedClassName = classNames(\"tds-pane-header-actions\", className)\n\n return (\n <Flex\n align=\"center\"\n direction=\"row\"\n gap={1}\n {...restProps}\n className={combinedClassName}\n >\n {children}\n </Flex>\n )\n}\n\nPaneHeaderActions.displayName = \"PaneHeaderActions\"\n"],"names":["React"],"mappings":";;;;AAgBA;;;;;;;AAOG;AACG,SAAU,iBAAiB,CAAC,EAChC,QAAQ,EACR,SAAS,EACT,GAAG,SAAS,EACkB,EAAA;IAC9B,MAAM,iBAAiB,GAAG,UAAU,CAAC,yBAAyB,EAAE,SAAS,CAAC;IAE1E,QACEA,cAAA,CAAA,aAAA,CAAC,IAAI,EAAA,EACH,KAAK,EAAC,QAAQ,EACd,SAAS,EAAC,KAAK,EACf,GAAG,EAAE,CAAC,EAAA,GACF,SAAS,EACb,SAAS,EAAE,iBAAiB,EAAA,EAE3B,QAAQ,CACJ;AAEX;AAEA,iBAAiB,CAAC,WAAW,GAAG,mBAAmB;;;;"}
1
+ {"version":3,"file":"PaneHeaderActions.js","sources":["../../../src/components/pane/PaneHeaderActions.tsx"],"sourcesContent":["import \"./index.css\"\n\nimport { Flex, type FlexProps } from \"@components/flex\"\nimport classNames from \"classnames\"\nimport React from \"react\"\n\nexport interface PaneHeaderActionsProps {\n /**\n * The actions themselves — buttons that affect the whole pane (e.g. Save /\n * Cancel). Laid out in a row; pass any `Flex` prop to adjust the layout.\n */\n children: React.ReactNode\n}\n\nexport type PaneHeaderActionsElementProps = FlexProps & PaneHeaderActionsProps\n\n/**\n * The trailing action cluster of a `PaneHeader`. Wraps its children in a\n * `Flex` row and accepts every `Flex` prop, so the caller controls spacing and\n * 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 PaneHeaderActions({\n children,\n className,\n ...restProps\n}: PaneHeaderActionsElementProps) {\n const combinedClassName = classNames(\"tds-pane-header-actions\", className)\n\n return (\n <Flex\n align=\"center\"\n direction=\"row\"\n gap={1}\n {...restProps}\n className={combinedClassName}\n >\n {children}\n </Flex>\n )\n}\n\nPaneHeaderActions.displayName = \"PaneHeaderActions\"\n"],"names":["React"],"mappings":";;;;AAgBA;;;;;;;AAOG;AACG,SAAU,iBAAiB,CAAC,EAChC,QAAQ,EACR,SAAS,EACT,GAAG,SAAS,EACkB,EAAA;IAC9B,MAAM,iBAAiB,GAAG,UAAU,CAAC,yBAAyB,EAAE,SAAS,CAAC;IAE1E,QACEA,cAAA,CAAA,aAAA,CAAC,IAAI,EAAA,EACH,KAAK,EAAC,QAAQ,EACd,SAAS,EAAC,KAAK,EACf,GAAG,EAAE,CAAC,EAAA,GACF,SAAS,EACb,SAAS,EAAE,iBAAiB,EAAA,EAE3B,QAAQ,CACJ;AAEX;AAEA,iBAAiB,CAAC,WAAW,GAAG,mBAAmB;;;;"}
@@ -1,4 +1,4 @@
1
- import '../../packages/tapestry-wc/dist/components/p-B2xqMgNQ.js';
1
+ import '../../packages/tapestry-wc/dist/components/p-CBFtMIxJ.js';
2
2
  import { defineCustomElement } from '../../packages/tapestry-wc/dist/components/tds-sidenav.js';
3
3
  import { defineCustomElement as defineCustomElement$1 } from '../../packages/tapestry-wc/dist/components/tds-sidenav-item.js';
4
4
  import { defineCustomElement as defineCustomElement$3 } from '../../packages/tapestry-wc/dist/components/tds-sidenav-responsive-header.js';
@@ -1 +1 @@
1
- {"version":3,"file":"TimeField.d.ts","sourceRoot":"","sources":["../../../src/components/time-field/TimeField.tsx"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAA;AAC3B,OAAO,aAAa,CAAA;AAEpB,OAAO,EACL,KAAK,gBAAgB,EAErB,KAAK,IAAI,EACT,KAAK,aAAa,EACnB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAA;AAEhF,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAML,KAAK,cAAc,IAAI,kBAAkB,EAC1C,MAAM,iCAAiC,CAAA;AAExC,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,CAAA;AAEvC,MAAM,MAAM,cAAc,GAAG,gBAAgB,GAAG,IAAI,GAAG,aAAa,CAAA;AAEpE,MAAM,WAAW,cAAc;IAC7B,0GAA0G;IAC1G,YAAY,CAAC,EAAE,cAAc,GAAG,MAAM,CAAA;IACtC,gGAAgG;IAChG,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC7B,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,oDAAoD;IACpD,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,qEAAqE;IACrE,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAA;IACb,mGAAmG;IACnG,GAAG,CAAC,EAAE,cAAc,GAAG,MAAM,CAAA;IAC7B,mGAAmG;IACnG,GAAG,CAAC,EAAE,cAAc,GAAG,MAAM,CAAA;IAC7B,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,kCAAkC;IAClC,IAAI,CAAC,EAAE,aAAa,CAAA;CACrB;AAED,KAAK,wBAAwB,GACzB,UAAU,GACV,aAAa,GACb,kBAAkB,GAClB,yBAAyB,GACzB,MAAM,CAAA;AAEV,KAAK,2BAA2B,GAC5B,cAAc,GACd,WAAW,GACX,MAAM,GACN,UAAU,GACV,OAAO,CAAA;AAEX,MAAM,MAAM,qBAAqB,GAAG,+BAA+B,CACjE,kBAAkB,CAAC,cAAc,CAAC,EAClC,cAAc,EACd,wBAAwB,EACxB,2BAA2B,CAC5B,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,EACxB,SAAS,EACT,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,iBAAiB,EACjB,SAAS,EACT,OAAO,EACP,KAAK,EACL,GAAG,EACH,GAAG,EACH,QAAQ,EACR,QAAQ,EACR,IAAW,EACX,GAAG,SAAS,EACb,EAAE,qBAAqB,qBAyDvB"}
1
+ {"version":3,"file":"TimeField.d.ts","sourceRoot":"","sources":["../../../src/components/time-field/TimeField.tsx"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAA;AAC3B,OAAO,aAAa,CAAA;AAEpB,OAAO,EACL,KAAK,gBAAgB,EAErB,KAAK,IAAI,EACT,KAAK,aAAa,EACnB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAA;AAGhF,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAML,KAAK,cAAc,IAAI,kBAAkB,EAC1C,MAAM,iCAAiC,CAAA;AAExC,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,CAAA;AAEvC,MAAM,MAAM,cAAc,GAAG,gBAAgB,GAAG,IAAI,GAAG,aAAa,CAAA;AAEpE,MAAM,WAAW,cAAc;IAC7B,0GAA0G;IAC1G,YAAY,CAAC,EAAE,cAAc,GAAG,MAAM,CAAA;IACtC,gGAAgG;IAChG,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC7B,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,oDAAoD;IACpD,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,qEAAqE;IACrE,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAA;IACb,mGAAmG;IACnG,GAAG,CAAC,EAAE,cAAc,GAAG,MAAM,CAAA;IAC7B,mGAAmG;IACnG,GAAG,CAAC,EAAE,cAAc,GAAG,MAAM,CAAA;IAC7B,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,kCAAkC;IAClC,IAAI,CAAC,EAAE,aAAa,CAAA;CACrB;AAED,KAAK,wBAAwB,GACzB,UAAU,GACV,aAAa,GACb,kBAAkB,GAClB,yBAAyB,GACzB,MAAM,CAAA;AAEV,KAAK,2BAA2B,GAC5B,cAAc,GACd,WAAW,GACX,MAAM,GACN,UAAU,GACV,OAAO,CAAA;AAEX,MAAM,MAAM,qBAAqB,GAAG,+BAA+B,CACjE,kBAAkB,CAAC,cAAc,CAAC,EAClC,cAAc,EACd,wBAAwB,EACxB,2BAA2B,CAC5B,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,EACxB,SAAS,EACT,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,iBAAiB,EACjB,SAAS,EACT,OAAO,EACP,KAAK,EACL,GAAG,EACH,GAAG,EACH,QAAQ,EACR,QAAQ,EACR,IAAW,EACX,GAAG,SAAS,EACb,EAAE,qBAAqB,qBA6DvB"}
@@ -1,7 +1,9 @@
1
1
  import { parseTime as $58246871e4652552$export$c9698ec7f05a07e1 } from './../../ext/@internationalized/date/dist/private/string.js';
2
2
  import Icon from '../../utilities/Icon.js';
3
+ import { useDateFieldLocale } from '../../utilities/useDateFieldLocale.js';
3
4
  import classNames from 'classnames';
4
5
  import React from 'react';
6
+ import { I18nProvider } from 'react-aria/I18nProvider';
5
7
  import { TimeField as TimeField$1, Label, DateInput, DateSegment, Text } from 'react-aria-components/TimeField';
6
8
 
7
9
  /**
@@ -22,11 +24,13 @@ function TimeField({ className, defaultValue, description, disabled, forceLeadin
22
24
  "tds-field--lg": size === "lg",
23
25
  "tds-time-field--lg": size === "lg",
24
26
  }, className);
27
+ const dateFieldLocale = useDateFieldLocale();
25
28
  return (React.createElement(TimeField$1, { ...restProps, "aria-label": hideLabel ? label : undefined, className: combinedClassName, defaultValue: asTimeFieldValue(defaultValue), granularity: "minute", isDisabled: disabled, isReadOnly: readOnly, isRequired: required, maxValue: asTimeFieldValue(max), minValue: asTimeFieldValue(min), shouldForceLeadingZeros: forceLeadingZeros },
26
29
  !hideLabel && React.createElement(Label, { className: "tds-field-label" }, label),
27
- React.createElement(DateInput, { "aria-invalid": invalid || undefined, className: "tds-field-control tds-time-field-input" }, (segment) => (React.createElement(DateSegment, { "aria-invalid": invalid || undefined, className: segment.type === "literal"
28
- ? "tds-field-date-segment-separator"
29
- : "tds-field-date-segment", segment: segment }))),
30
+ React.createElement(I18nProvider, { locale: dateFieldLocale },
31
+ React.createElement(DateInput, { "aria-invalid": invalid || undefined, className: "tds-field-control tds-time-field-input" }, (segment) => (React.createElement(DateSegment, { "aria-invalid": invalid || undefined, className: segment.type === "literal"
32
+ ? "tds-field-date-segment-separator"
33
+ : "tds-field-date-segment", segment: segment })))),
30
34
  description && (React.createElement(Text, { elementType: "p", className: "tds-field-description", slot: "description" },
31
35
  React.createElement(Icon, { "aria-hidden": true, className: "tds-field-description-invalid-icon", symbol: "general#exclamation-triangle" }),
32
36
  description))));
@@ -1 +1 @@
1
- {"version":3,"file":"TimeField.js","sources":["../../../src/components/time-field/TimeField.tsx"],"sourcesContent":["import \"../field/index.css\"\nimport \"./index.css\"\n\nimport {\n type CalendarDateTime,\n parseTime,\n type Time,\n type ZonedDateTime,\n} from \"@internationalized/date\"\nimport Icon from \"@utilities/Icon\"\nimport type { CombineAriaPropsWithCustomProps } from \"@utilities/reactAriaProps\"\nimport classNames from \"classnames\"\nimport React from \"react\"\nimport {\n DateInput,\n DateSegment,\n Label,\n Text,\n TimeField as AriaTimeField,\n type TimeFieldProps as AriaTimeFieldProps,\n} from \"react-aria-components/TimeField\"\n\nexport type TimeFieldSize = \"md\" | \"lg\"\n\nexport type TimeFieldValue = CalendarDateTime | Time | ZonedDateTime\n\nexport interface TimeFieldProps {\n /** The default value for the field, as a `TimeFieldValue` or an ISO 8601 time string (e.g. `\"12:00\"`). */\n defaultValue?: TimeFieldValue | string\n /** Helper text displayed below the component. Styled as error text when `invalid` is `true`. */\n description?: React.ReactNode\n /** Disables the field. */\n disabled?: boolean\n /** If `true`, always shows leading zeros in the hour field. */\n forceLeadingZeros?: boolean\n /** If `true`, renders the label visually hidden. */\n hideLabel?: boolean\n /** If `true`, applies error styling to the field and description. */\n invalid?: boolean\n /** Accessible label for the field. */\n label: string\n /** The maximum allowed time, as a `TimeFieldValue` or an ISO 8601 time string (e.g. `\"17:00\"`). */\n max?: TimeFieldValue | string\n /** The minimum allowed time, as a `TimeFieldValue` or an ISO 8601 time string (e.g. `\"09:00\"`). */\n min?: TimeFieldValue | string\n /** Allows the value to be read but not changed. */\n readOnly?: boolean\n /** If `true`, appends an asterisk after the label text. */\n required?: boolean\n /** The size of the time field. */\n size?: TimeFieldSize\n}\n\ntype AriaTimeFieldPropsToOmit =\n | \"children\"\n | \"granularity\"\n | \"placeholderValue\"\n | \"shouldForceLeadingZeros\"\n | \"slot\"\n\ntype AriaTimeFieldPropsToInclude =\n | \"hideTimeZone\"\n | \"hourCycle\"\n | \"name\"\n | \"onChange\"\n | \"value\"\n\nexport type TimeFieldElementProps = CombineAriaPropsWithCustomProps<\n AriaTimeFieldProps<TimeFieldValue>,\n TimeFieldProps,\n AriaTimeFieldPropsToOmit,\n AriaTimeFieldPropsToInclude\n>\n\n/**\n * A time field component allows users to enter and edit time values as individual\n * segments. Each segment supports keyboard entry, increment/decrement\n * with arrow keys, and respects the user's locale (12- vs 24-hour clock),\n * which can be overridden with `hourCycle`.\n *\n * Values are `Time`, `CalendarDateTime`, or `ZonedDateTime` from\n * `@internationalized/date`. Restrict the allowed range with `min`/`max`.\n *\n * @component\n * @see {@link https://planningcenter.github.io/tapestry/?path=/docs/forms-timefield--docs | Storybook Documentation}\n * @see {@link https://github.com/planningcenter/tapestry/tree/main/packages/tapestry-migration-cli | Migration CLI: Available}\n */\nexport function TimeField({\n className,\n defaultValue,\n description,\n disabled,\n forceLeadingZeros,\n hideLabel,\n invalid,\n label,\n max,\n min,\n readOnly,\n required,\n size = \"md\",\n ...restProps\n}: TimeFieldElementProps) {\n const combinedClassName = classNames(\n \"tds-field tds-time-field\",\n {\n \"tds-field--lg\": size === \"lg\",\n \"tds-time-field--lg\": size === \"lg\",\n },\n className\n )\n\n return (\n <AriaTimeField\n {...restProps}\n aria-label={hideLabel ? label : undefined}\n className={combinedClassName}\n defaultValue={asTimeFieldValue(defaultValue)}\n granularity=\"minute\"\n isDisabled={disabled}\n isReadOnly={readOnly}\n isRequired={required}\n maxValue={asTimeFieldValue(max)}\n minValue={asTimeFieldValue(min)}\n shouldForceLeadingZeros={forceLeadingZeros}\n >\n {!hideLabel && <Label className=\"tds-field-label\">{label}</Label>}\n <DateInput\n aria-invalid={invalid || undefined}\n className=\"tds-field-control tds-time-field-input\"\n >\n {(segment) => (\n <DateSegment\n aria-invalid={invalid || undefined}\n className={\n segment.type === \"literal\"\n ? \"tds-field-date-segment-separator\"\n : \"tds-field-date-segment\"\n }\n segment={segment}\n />\n )}\n </DateInput>\n {description && (\n <Text\n elementType=\"p\"\n className=\"tds-field-description\"\n slot=\"description\"\n >\n <Icon\n aria-hidden\n className=\"tds-field-description-invalid-icon\"\n symbol=\"general#exclamation-triangle\"\n />\n {description}\n </Text>\n )}\n </AriaTimeField>\n )\n}\n\nfunction asTimeFieldValue(\n value: TimeFieldValue | string | undefined\n): TimeFieldValue | undefined {\n if (typeof value === \"string\") {\n return parseTime(value)\n }\n return value ?? undefined\n}\n"],"names":["AriaTimeField","parseTime"],"mappings":";;;;;;AA0EA;;;;;;;;;;;;AAYG;AACG,SAAU,SAAS,CAAC,EACxB,SAAS,EACT,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,iBAAiB,EACjB,SAAS,EACT,OAAO,EACP,KAAK,EACL,GAAG,EACH,GAAG,EACH,QAAQ,EACR,QAAQ,EACR,IAAI,GAAG,IAAI,EACX,GAAG,SAAS,EACU,EAAA;AACtB,IAAA,MAAM,iBAAiB,GAAG,UAAU,CAClC,0BAA0B,EAC1B;QACE,eAAe,EAAE,IAAI,KAAK,IAAI;QAC9B,oBAAoB,EAAE,IAAI,KAAK,IAAI;KACpC,EACD,SAAS,CACV;IAED,QACE,KAAA,CAAA,aAAA,CAACA,WAAa,EAAA,EAAA,GACR,SAAS,EAAA,YAAA,EACD,SAAS,GAAG,KAAK,GAAG,SAAS,EACzC,SAAS,EAAE,iBAAiB,EAC5B,YAAY,EAAE,gBAAgB,CAAC,YAAY,CAAC,EAC5C,WAAW,EAAC,QAAQ,EACpB,UAAU,EAAE,QAAQ,EACpB,UAAU,EAAE,QAAQ,EACpB,UAAU,EAAE,QAAQ,EACpB,QAAQ,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAC/B,QAAQ,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAC/B,uBAAuB,EAAE,iBAAiB,EAAA;QAEzC,CAAC,SAAS,IAAI,KAAA,CAAA,aAAA,CAAC,KAAK,EAAA,EAAC,SAAS,EAAC,iBAAiB,EAAA,EAAE,KAAK,CAAS;AACjE,QAAA,KAAA,CAAA,aAAA,CAAC,SAAS,EAAA,EAAA,cAAA,EACM,OAAO,IAAI,SAAS,EAClC,SAAS,EAAC,wCAAwC,EAAA,EAEjD,CAAC,OAAO,MACP,KAAA,CAAA,aAAA,CAAC,WAAW,EAAA,EAAA,cAAA,EACI,OAAO,IAAI,SAAS,EAClC,SAAS,EACP,OAAO,CAAC,IAAI,KAAK;AACf,kBAAE;kBACA,wBAAwB,EAE9B,OAAO,EAAE,OAAO,EAAA,CAChB,CACH,CACS;AACX,QAAA,WAAW,KACV,KAAA,CAAA,aAAA,CAAC,IAAI,IACH,WAAW,EAAC,GAAG,EACf,SAAS,EAAC,uBAAuB,EACjC,IAAI,EAAC,aAAa,EAAA;YAElB,KAAA,CAAA,aAAA,CAAC,IAAI,yBAEH,SAAS,EAAC,oCAAoC,EAC9C,MAAM,EAAC,8BAA8B,EAAA,CACrC;AACD,YAAA,WAAW,CACP,CACR,CACa;AAEpB;AAEA,SAAS,gBAAgB,CACvB,KAA0C,EAAA;AAE1C,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,OAAOC,yCAAS,CAAC,KAAK,CAAC;IACzB;IACA,OAAO,KAAK,IAAI,SAAS;AAC3B;;;;"}
1
+ {"version":3,"file":"TimeField.js","sources":["../../../src/components/time-field/TimeField.tsx"],"sourcesContent":["import \"../field/index.css\"\nimport \"./index.css\"\n\nimport {\n type CalendarDateTime,\n parseTime,\n type Time,\n type ZonedDateTime,\n} from \"@internationalized/date\"\nimport Icon from \"@utilities/Icon\"\nimport type { CombineAriaPropsWithCustomProps } from \"@utilities/reactAriaProps\"\nimport { useDateFieldLocale } from \"@utilities/useDateFieldLocale\"\nimport classNames from \"classnames\"\nimport React from \"react\"\nimport { I18nProvider } from \"react-aria/I18nProvider\"\nimport {\n DateInput,\n DateSegment,\n Label,\n Text,\n TimeField as AriaTimeField,\n type TimeFieldProps as AriaTimeFieldProps,\n} from \"react-aria-components/TimeField\"\n\nexport type TimeFieldSize = \"md\" | \"lg\"\n\nexport type TimeFieldValue = CalendarDateTime | Time | ZonedDateTime\n\nexport interface TimeFieldProps {\n /** The default value for the field, as a `TimeFieldValue` or an ISO 8601 time string (e.g. `\"12:00\"`). */\n defaultValue?: TimeFieldValue | string\n /** Helper text displayed below the component. Styled as error text when `invalid` is `true`. */\n description?: React.ReactNode\n /** Disables the field. */\n disabled?: boolean\n /** If `true`, always shows leading zeros in the hour field. */\n forceLeadingZeros?: boolean\n /** If `true`, renders the label visually hidden. */\n hideLabel?: boolean\n /** If `true`, applies error styling to the field and description. */\n invalid?: boolean\n /** Accessible label for the field. */\n label: string\n /** The maximum allowed time, as a `TimeFieldValue` or an ISO 8601 time string (e.g. `\"17:00\"`). */\n max?: TimeFieldValue | string\n /** The minimum allowed time, as a `TimeFieldValue` or an ISO 8601 time string (e.g. `\"09:00\"`). */\n min?: TimeFieldValue | string\n /** Allows the value to be read but not changed. */\n readOnly?: boolean\n /** If `true`, appends an asterisk after the label text. */\n required?: boolean\n /** The size of the time field. */\n size?: TimeFieldSize\n}\n\ntype AriaTimeFieldPropsToOmit =\n | \"children\"\n | \"granularity\"\n | \"placeholderValue\"\n | \"shouldForceLeadingZeros\"\n | \"slot\"\n\ntype AriaTimeFieldPropsToInclude =\n | \"hideTimeZone\"\n | \"hourCycle\"\n | \"name\"\n | \"onChange\"\n | \"value\"\n\nexport type TimeFieldElementProps = CombineAriaPropsWithCustomProps<\n AriaTimeFieldProps<TimeFieldValue>,\n TimeFieldProps,\n AriaTimeFieldPropsToOmit,\n AriaTimeFieldPropsToInclude\n>\n\n/**\n * A time field component allows users to enter and edit time values as individual\n * segments. Each segment supports keyboard entry, increment/decrement\n * with arrow keys, and respects the user's locale (12- vs 24-hour clock),\n * which can be overridden with `hourCycle`.\n *\n * Values are `Time`, `CalendarDateTime`, or `ZonedDateTime` from\n * `@internationalized/date`. Restrict the allowed range with `min`/`max`.\n *\n * @component\n * @see {@link https://planningcenter.github.io/tapestry/?path=/docs/forms-timefield--docs | Storybook Documentation}\n * @see {@link https://github.com/planningcenter/tapestry/tree/main/packages/tapestry-migration-cli | Migration CLI: Available}\n */\nexport function TimeField({\n className,\n defaultValue,\n description,\n disabled,\n forceLeadingZeros,\n hideLabel,\n invalid,\n label,\n max,\n min,\n readOnly,\n required,\n size = \"md\",\n ...restProps\n}: TimeFieldElementProps) {\n const combinedClassName = classNames(\n \"tds-field tds-time-field\",\n {\n \"tds-field--lg\": size === \"lg\",\n \"tds-time-field--lg\": size === \"lg\",\n },\n className\n )\n\n const dateFieldLocale = useDateFieldLocale()\n\n return (\n <AriaTimeField\n {...restProps}\n aria-label={hideLabel ? label : undefined}\n className={combinedClassName}\n defaultValue={asTimeFieldValue(defaultValue)}\n granularity=\"minute\"\n isDisabled={disabled}\n isReadOnly={readOnly}\n isRequired={required}\n maxValue={asTimeFieldValue(max)}\n minValue={asTimeFieldValue(min)}\n shouldForceLeadingZeros={forceLeadingZeros}\n >\n {!hideLabel && <Label className=\"tds-field-label\">{label}</Label>}\n <I18nProvider locale={dateFieldLocale}>\n <DateInput\n aria-invalid={invalid || undefined}\n className=\"tds-field-control tds-time-field-input\"\n >\n {(segment) => (\n <DateSegment\n aria-invalid={invalid || undefined}\n className={\n segment.type === \"literal\"\n ? \"tds-field-date-segment-separator\"\n : \"tds-field-date-segment\"\n }\n segment={segment}\n />\n )}\n </DateInput>\n </I18nProvider>\n {description && (\n <Text\n elementType=\"p\"\n className=\"tds-field-description\"\n slot=\"description\"\n >\n <Icon\n aria-hidden\n className=\"tds-field-description-invalid-icon\"\n symbol=\"general#exclamation-triangle\"\n />\n {description}\n </Text>\n )}\n </AriaTimeField>\n )\n}\n\nfunction asTimeFieldValue(\n value: TimeFieldValue | string | undefined\n): TimeFieldValue | undefined {\n if (typeof value === \"string\") {\n return parseTime(value)\n }\n return value ?? undefined\n}\n"],"names":["AriaTimeField","parseTime"],"mappings":";;;;;;;;AA4EA;;;;;;;;;;;;AAYG;AACG,SAAU,SAAS,CAAC,EACxB,SAAS,EACT,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,iBAAiB,EACjB,SAAS,EACT,OAAO,EACP,KAAK,EACL,GAAG,EACH,GAAG,EACH,QAAQ,EACR,QAAQ,EACR,IAAI,GAAG,IAAI,EACX,GAAG,SAAS,EACU,EAAA;AACtB,IAAA,MAAM,iBAAiB,GAAG,UAAU,CAClC,0BAA0B,EAC1B;QACE,eAAe,EAAE,IAAI,KAAK,IAAI;QAC9B,oBAAoB,EAAE,IAAI,KAAK,IAAI;KACpC,EACD,SAAS,CACV;AAED,IAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE;IAE5C,QACE,KAAA,CAAA,aAAA,CAACA,WAAa,EAAA,EAAA,GACR,SAAS,EAAA,YAAA,EACD,SAAS,GAAG,KAAK,GAAG,SAAS,EACzC,SAAS,EAAE,iBAAiB,EAC5B,YAAY,EAAE,gBAAgB,CAAC,YAAY,CAAC,EAC5C,WAAW,EAAC,QAAQ,EACpB,UAAU,EAAE,QAAQ,EACpB,UAAU,EAAE,QAAQ,EACpB,UAAU,EAAE,QAAQ,EACpB,QAAQ,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAC/B,QAAQ,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAC/B,uBAAuB,EAAE,iBAAiB,EAAA;QAEzC,CAAC,SAAS,IAAI,KAAA,CAAA,aAAA,CAAC,KAAK,EAAA,EAAC,SAAS,EAAC,iBAAiB,EAAA,EAAE,KAAK,CAAS;AACjE,QAAA,KAAA,CAAA,aAAA,CAAC,YAAY,EAAA,EAAC,MAAM,EAAE,eAAe,EAAA;AACnC,YAAA,KAAA,CAAA,aAAA,CAAC,SAAS,EAAA,EAAA,cAAA,EACM,OAAO,IAAI,SAAS,EAClC,SAAS,EAAC,wCAAwC,EAAA,EAEjD,CAAC,OAAO,MACP,KAAA,CAAA,aAAA,CAAC,WAAW,EAAA,EAAA,cAAA,EACI,OAAO,IAAI,SAAS,EAClC,SAAS,EACP,OAAO,CAAC,IAAI,KAAK;AACf,sBAAE;sBACA,wBAAwB,EAE9B,OAAO,EAAE,OAAO,EAAA,CAChB,CACH,CACS,CACC;AACd,QAAA,WAAW,KACV,KAAA,CAAA,aAAA,CAAC,IAAI,IACH,WAAW,EAAC,GAAG,EACf,SAAS,EAAC,uBAAuB,EACjC,IAAI,EAAC,aAAa,EAAA;YAElB,KAAA,CAAA,aAAA,CAAC,IAAI,yBAEH,SAAS,EAAC,oCAAoC,EAC9C,MAAM,EAAC,8BAA8B,EAAA,CACrC;AACD,YAAA,WAAW,CACP,CACR,CACa;AAEpB;AAEA,SAAS,gBAAgB,CACvB,KAA0C,EAAA;AAE1C,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,OAAOC,yCAAS,CAAC,KAAK,CAAC;IACzB;IACA,OAAO,KAAK,IAAI,SAAS;AAC3B;;;;"}
package/dist/index.css CHANGED
@@ -2770,33 +2770,6 @@ tds-sidenav-section:not(.hydrated) > [slot="ssr"]{
2770
2770
  border-color:var(--tds-btn-border-color-disabled);
2771
2771
  }
2772
2772
 
2773
- .tds-loading-spinner{
2774
- position:absolute;
2775
- right:0;
2776
- left:0;
2777
- visibility:var(--tds-loading-spinner-visibility, hidden);
2778
- width:var(--tds-loading-spinner-size, 1.25em);
2779
- height:var(--tds-loading-spinner-size, 1.25em);
2780
- margin:auto;
2781
- border:var(--tds-loading-spinner-track-width, 4px) solid var(--tds-loading-spinner-track-color, var(--t-fill-color-transparency-dark-020));
2782
- border-top-color:var(--tds-loading-spinner-color, currentcolor);
2783
- border-radius:50%;
2784
- animation:spinner-rotate 500ms infinite linear;
2785
- animation-play-state:var(--tds-loading-spinner-animation-play-state, paused);
2786
- }
2787
-
2788
- @keyframes spinner-rotate{
2789
- to{
2790
- transform:rotate(360deg);
2791
- }
2792
- }
2793
-
2794
- @media (prefers-reduced-motion: reduce){
2795
- [class*="--loading"] .tds-loading-spinner{
2796
- --tds-loading-spinner-animation-play-state:paused;
2797
- }
2798
- }
2799
-
2800
2773
  .tds-tooltip{
2801
2774
  --tds-tooltip-arrow-depth:var(--tds-tooltip-arrow-depth-raw);
2802
2775
  --tds-tooltip-arrow-size:var(--tds-tooltip-arrow-size-raw);
@@ -2871,6 +2844,33 @@ tds-sidenav-section:not(.hydrated) > [slot="ssr"]{
2871
2844
  transform:var(--tds-tooltip-arrow-rotate);
2872
2845
  }
2873
2846
 
2847
+ .tds-loading-spinner{
2848
+ position:absolute;
2849
+ right:0;
2850
+ left:0;
2851
+ visibility:var(--tds-loading-spinner-visibility, hidden);
2852
+ width:var(--tds-loading-spinner-size, 1.25em);
2853
+ height:var(--tds-loading-spinner-size, 1.25em);
2854
+ margin:auto;
2855
+ border:var(--tds-loading-spinner-track-width, 4px) solid var(--tds-loading-spinner-track-color, var(--t-fill-color-transparency-dark-020));
2856
+ border-top-color:var(--tds-loading-spinner-color, currentcolor);
2857
+ border-radius:50%;
2858
+ animation:spinner-rotate 500ms infinite linear;
2859
+ animation-play-state:var(--tds-loading-spinner-animation-play-state, paused);
2860
+ }
2861
+
2862
+ @keyframes spinner-rotate{
2863
+ to{
2864
+ transform:rotate(360deg);
2865
+ }
2866
+ }
2867
+
2868
+ @media (prefers-reduced-motion: reduce){
2869
+ [class*="--loading"] .tds-loading-spinner{
2870
+ --tds-loading-spinner-animation-play-state:paused;
2871
+ }
2872
+ }
2873
+
2874
2874
  .tds-button-group{
2875
2875
  display:inline-flex;
2876
2876
  }
@@ -3388,6 +3388,15 @@ tds-sidenav-section:not(.hydrated) > [slot="ssr"]{
3388
3388
  --tds-loading-spinner-visibility:visible;
3389
3389
  --tds-loading-spinner-animation-play-state:running;
3390
3390
  }
3391
+
3392
+ .tds-combo-box-loading-label--hidden{
3393
+ position:absolute;
3394
+ width:1px;
3395
+ height:1px;
3396
+ overflow:hidden;
3397
+ white-space:nowrap;
3398
+ clip-path:inset(50%);
3399
+ }
3391
3400
  .tds-combo-box-list-section:not(:first-child){
3392
3401
  margin-block-start:var(--t-spacing-half);
3393
3402
  }
@@ -5272,6 +5281,139 @@ a.tds-dropdown-item:is(:hover, :active){
5272
5281
  margin-inline-end:var(--tds-number-stepper-button-offset);
5273
5282
  }
5274
5283
 
5284
+ .tds-pane{
5285
+ --tds-pane-background-color:var(--t-surface-color-card);
5286
+ --tds-pane-border-radius:var(--t-border-radius-lg);
5287
+ --tds-pane-border-color:var(--t-border-color);
5288
+
5289
+ --tds-pane-header-padding-block:var(--t-spacing-1-half);
5290
+ --tds-pane-header-padding-inline:var(--tds-pane-body-padding);
5291
+
5292
+ --tds-pane-title-color:var(--t-text-color-headline);
5293
+ --tds-pane-title-font-size:var(--t-font-size-lg);
5294
+ --tds-pane-title-font-weight:var(--t-font-weight-medium);
5295
+ --tds-pane-title-line-height:1.4;
5296
+
5297
+ --tds-pane-body-padding:var(--t-spacing-3);
5298
+
5299
+ --tds-pane-footer-padding-block:var(--t-spacing-2);
5300
+ --tds-pane-footer-padding-inline:var(--tds-pane-body-padding);
5301
+
5302
+ --tds-pane-divider-margin-block:var(--tds-pane-body-padding);
5303
+ --tds-pane-divider-margin-inline:calc(-1 * var(--tds-pane-body-padding));
5304
+
5305
+ background:var(--tds-pane-background-color);
5306
+ border-radius:var(--tds-pane-border-radius);
5307
+ border:var(--t-border-width) solid var(--tds-pane-border-color);
5308
+ display:flex;
5309
+ flex-direction:column;
5310
+ }
5311
+
5312
+ .tds-pane-header{
5313
+ border-bottom:var(--t-border-width) solid var(--tds-pane-border-color);
5314
+ padding-block:var(--tds-pane-header-padding-block);
5315
+ padding-inline:var(--tds-pane-header-padding-inline);
5316
+ }
5317
+
5318
+ .tds-pane-header > tds-helper-shelf > .tds-helper-shelf-trigger{
5319
+ margin-inline:calc(-1 * var(--t-spacing-1)) auto;
5320
+ }
5321
+
5322
+ .tds-pane-header > tds-helper-shelf > .tds-helper-shelf{
5323
+ flex-basis:100%;
5324
+ order:1;
5325
+ }
5326
+
5327
+ .tds-pane-header:has( > tds-helper-shelf){
5328
+ row-gap:var(--tds-pane-header-padding-block);
5329
+ padding-block-end:0;
5330
+ }
5331
+
5332
+ .tds-pane-header > tds-helper-shelf > .tds-helper-shelf > .tds-helper-shelf-content{
5333
+ font-size:var(--t-font-size-md);
5334
+ margin-block-end:var(--tds-pane-header-padding-block);
5335
+ }
5336
+
5337
+ .tds-pane-title{
5338
+ color:var(--tds-pane-title-color);
5339
+ font-size:var(--tds-pane-title-font-size);
5340
+ font-weight:var(--tds-pane-title-font-weight);
5341
+ line-height:var(--tds-pane-title-line-height);
5342
+ margin:0;
5343
+ }
5344
+
5345
+ .tds-pane-body{
5346
+ padding:var(--tds-pane-body-padding);
5347
+ }
5348
+
5349
+ .tds-pane-footer{
5350
+ padding-block-end:var(--tds-pane-footer-padding-block);
5351
+ padding-inline:var(--tds-pane-footer-padding-inline);
5352
+ }
5353
+
5354
+ .tds-pane-divider{
5355
+ border:0;
5356
+ border-top:var(--t-border-width) solid var(--tds-pane-border-color);
5357
+ margin-block:var(--tds-pane-divider-margin-block);
5358
+ margin-inline:var(--tds-pane-divider-margin-inline);
5359
+ }
5360
+
5361
+ .tds-pane-divider.tds-pane-divider--inset{
5362
+ margin-inline:0;
5363
+ }
5364
+
5365
+ tds-helper-shelf{
5366
+ display:contents;
5367
+ }
5368
+
5369
+ .tds-helper-shelf{
5370
+ --tds-helper-shelf-background-color:var(--t-fill-color-neutral-090);
5371
+ --tds-helper-shelf-border-radius:var(--t-border-radius-md);
5372
+ --tds-helper-shelf-color:var(--t-text-color);
5373
+ --tds-helper-shelf-font-size:var(--t-font-size-sm);
5374
+ --tds-helper-shelf-line-height:1.5;
5375
+ --tds-helper-shelf-padding:var(--t-spacing-1);
5376
+
5377
+ height:0;
5378
+ overflow:hidden;
5379
+ transition:height var(--t-duration-300) var(--t-ease-in);
5380
+ }
5381
+
5382
+ @media (prefers-reduced-motion: reduce){
5383
+
5384
+ .tds-helper-shelf{
5385
+ transition:none;
5386
+ }
5387
+ }
5388
+
5389
+ .tds-helper-shelf--expanded{
5390
+ height:auto;
5391
+ transition-timing-function:var(--t-ease-out);
5392
+ }
5393
+
5394
+ @supports (interpolate-size: allow-keywords){
5395
+ .tds-helper-shelf{
5396
+ interpolate-size:allow-keywords;
5397
+ }
5398
+ }
5399
+
5400
+ .tds-helper-shelf-content{
5401
+ padding:var(--tds-helper-shelf-padding);
5402
+ font-size:var(--tds-helper-shelf-font-size);
5403
+ line-height:var(--tds-helper-shelf-line-height);
5404
+ color:var(--tds-helper-shelf-color);
5405
+ background:var(--tds-helper-shelf-background-color);
5406
+ border-radius:var(--tds-helper-shelf-border-radius);
5407
+ }
5408
+
5409
+ .tds-helper-shelf-trigger{
5410
+ --tds-helper-shelf-trigger-color-expanded:var(--t-text-color-interaction);
5411
+ }
5412
+
5413
+ .tds-helper-shelf-trigger[aria-expanded="true"]{
5414
+ --tds-btn-color:var(--tds-helper-shelf-trigger-color-expanded);
5415
+ }
5416
+
5275
5417
  .tds-popover{
5276
5418
  max-inline-size:24rem;
5277
5419
  overflow:auto;