@planningcenter/tapestry 3.2.1-rc.4 → 3.2.1-rc.5

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.
@@ -0,0 +1,44 @@
1
+ import "../button/btn.css";
2
+ import "./index.css";
3
+ import React, { type AriaAttributes } from "react";
4
+ export type NumberStepperSize = "md" | "lg";
5
+ export interface NumberStepperProps {
6
+ /** The default uncontrolled value. */
7
+ defaultValue?: number;
8
+ /** Helper text displayed below the component. Styled as error text when `invalid` is `true`. */
9
+ description?: string;
10
+ /** Disables the input and stepper buttons. */
11
+ disabled?: boolean;
12
+ /** Formatting options for the displayed value. Uses `Intl.NumberFormat`. */
13
+ formatOptions?: Intl.NumberFormatOptions;
14
+ /** If `true`, renders the label visually hidden. */
15
+ hideLabel?: boolean;
16
+ /** If `true`, applies error styling to the field and description. */
17
+ invalid?: boolean;
18
+ /** Accessible label for the field. */
19
+ label: string;
20
+ /** Maximum allowed value. */
21
+ max?: number;
22
+ /** Minimum allowed value. */
23
+ min?: number;
24
+ /** Field name for form submission. */
25
+ name?: string;
26
+ /** Called when the value changes. */
27
+ onChange?: (value: number) => void;
28
+ /** Allows the value to be read but not changed. */
29
+ readOnly?: boolean;
30
+ /** If `true`, appends an asterisk after the label text. */
31
+ required?: boolean;
32
+ /** The size of the number stepper. */
33
+ size?: NumberStepperSize;
34
+ /** Amount to increment or decrement by. Defaults to `1`. */
35
+ step?: number;
36
+ /** The controlled value. */
37
+ value?: number;
38
+ }
39
+ export type NumberStepperElementProps = NumberStepperProps & Omit<AriaAttributes, keyof NumberStepperProps> & {
40
+ className?: string;
41
+ id?: string;
42
+ };
43
+ export declare function NumberStepper({ className, defaultValue, description, disabled, formatOptions, hideLabel, id, invalid, label, max, min, name, onChange, readOnly, required, size, step, value, ...restProps }: NumberStepperElementProps): React.JSX.Element;
44
+ //# sourceMappingURL=NumberStepper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NumberStepper.d.ts","sourceRoot":"","sources":["../../../src/components/NumberStepper/NumberStepper.tsx"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAA;AAC1B,OAAO,aAAa,CAAA;AAIpB,OAAO,KAAK,EAAE,EAAE,KAAK,cAAc,EAAE,MAAM,OAAO,CAAA;AAUlD,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAAA;AAE3C,MAAM,WAAW,kBAAkB;IACjC,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,gGAAgG;IAChG,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAA;IACxC,oDAAoD;IACpD,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,qEAAqE;IACrE,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAA;IACb,6BAA6B;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,6BAA6B;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,qCAAqC;IACrC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,sCAAsC;IACtC,IAAI,CAAC,EAAE,iBAAiB,CAAA;IACxB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,MAAM,yBAAyB,GAAG,kBAAkB,GACxD,IAAI,CAAC,cAAc,EAAE,MAAM,kBAAkB,CAAC,GAAG;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ,CAAA;AAEH,wBAAgB,aAAa,CAAC,EAC5B,SAAS,EACT,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,aAAa,EACb,SAAS,EACT,EAAE,EACF,OAAO,EACP,KAAK,EACL,GAAG,EACH,GAAG,EACH,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,IAAW,EACX,IAAI,EACJ,KAAK,EACL,GAAG,SAAS,EACb,EAAE,yBAAyB,qBAwD3B"}
@@ -0,0 +1,22 @@
1
+ import Icon from '../../utilities/Icon.js';
2
+ import classNames from 'classnames';
3
+ import React__default from 'react';
4
+ import { NumberField, Label, Group, Input, Button, Text } from 'react-aria-components';
5
+
6
+ function NumberStepper({ className, defaultValue, description, disabled, formatOptions, hideLabel, id, invalid, label, max, min, name, onChange, readOnly, required, size = "md", step, value, ...restProps }) {
7
+ const combinedClassName = classNames("tds-number-stepper", { "tds-number-stepper--lg": size === "lg" }, className);
8
+ return (React__default.createElement(NumberField, { ...restProps, "aria-label": hideLabel ? label : undefined, className: combinedClassName, defaultValue: defaultValue, formatOptions: formatOptions, id: id, isDisabled: disabled, isInvalid: invalid, isReadOnly: readOnly, isRequired: required, maxValue: max, minValue: min, name: name, onChange: onChange ?? undefined, step: step, value: value },
9
+ !hideLabel && (React__default.createElement(Label, { className: "tds-number-stepper-label" }, label)),
10
+ React__default.createElement(Group, { className: "tds-number-stepper-field" },
11
+ React__default.createElement(Input, { className: "tds-number-stepper-input" }),
12
+ React__default.createElement(Button, { className: "tds-btn tds-btn--infield tds-number-stepper-button", slot: "decrement" },
13
+ React__default.createElement(Icon, { "aria-hidden": true, symbol: "general#minus" })),
14
+ React__default.createElement(Button, { className: "tds-btn tds-btn--infield tds-number-stepper-button", slot: "increment" },
15
+ React__default.createElement(Icon, { "aria-hidden": true, symbol: "general#plus" }))),
16
+ description && (React__default.createElement(Text, { className: "tds-number-stepper-description", slot: "description" },
17
+ React__default.createElement(Icon, { "aria-hidden": true, className: "tds-number-stepper-description-invalid-icon", symbol: "general#exclamation-triangle" }),
18
+ description))));
19
+ }
20
+
21
+ export { NumberStepper };
22
+ //# sourceMappingURL=NumberStepper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NumberStepper.js","sources":["../../../src/components/NumberStepper/NumberStepper.tsx"],"sourcesContent":["import \"../button/btn.css\"\nimport \"./index.css\"\n\nimport Icon from \"@utilities/Icon\"\nimport classNames from \"classnames\"\nimport React, { type AriaAttributes } from \"react\"\nimport {\n Button,\n Group,\n Input,\n Label,\n NumberField as AriaNumberField,\n Text,\n} from \"react-aria-components\"\n\nexport type NumberStepperSize = \"md\" | \"lg\"\n\nexport interface NumberStepperProps {\n /** The default uncontrolled value. */\n defaultValue?: number\n /** Helper text displayed below the component. Styled as error text when `invalid` is `true`. */\n description?: string\n /** Disables the input and stepper buttons. */\n disabled?: boolean\n /** Formatting options for the displayed value. Uses `Intl.NumberFormat`. */\n formatOptions?: Intl.NumberFormatOptions\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 /** Maximum allowed value. */\n max?: number\n /** Minimum allowed value. */\n min?: number\n /** Field name for form submission. */\n name?: string\n /** Called when the value changes. */\n onChange?: (value: number) => void\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 number stepper. */\n size?: NumberStepperSize\n /** Amount to increment or decrement by. Defaults to `1`. */\n step?: number\n /** The controlled value. */\n value?: number\n}\n\nexport type NumberStepperElementProps = NumberStepperProps &\n Omit<AriaAttributes, keyof NumberStepperProps> & {\n className?: string\n id?: string\n }\n\nexport function NumberStepper({\n className,\n defaultValue,\n description,\n disabled,\n formatOptions,\n hideLabel,\n id,\n invalid,\n label,\n max,\n min,\n name,\n onChange,\n readOnly,\n required,\n size = \"md\",\n step,\n value,\n ...restProps\n}: NumberStepperElementProps) {\n const combinedClassName = classNames(\n \"tds-number-stepper\",\n { \"tds-number-stepper--lg\": size === \"lg\" },\n className\n )\n\n return (\n <AriaNumberField\n {...restProps}\n aria-label={hideLabel ? label : undefined}\n className={combinedClassName}\n defaultValue={defaultValue}\n formatOptions={formatOptions}\n id={id}\n isDisabled={disabled}\n isInvalid={invalid}\n isReadOnly={readOnly}\n isRequired={required}\n maxValue={max}\n minValue={min}\n name={name}\n onChange={onChange ?? undefined}\n step={step}\n value={value}\n >\n {!hideLabel && (\n <Label className=\"tds-number-stepper-label\">{label}</Label>\n )}\n <Group className=\"tds-number-stepper-field\">\n <Input className=\"tds-number-stepper-input\" />\n <Button\n className=\"tds-btn tds-btn--infield tds-number-stepper-button\"\n slot=\"decrement\"\n >\n <Icon aria-hidden symbol=\"general#minus\" />\n </Button>\n <Button\n className=\"tds-btn tds-btn--infield tds-number-stepper-button\"\n slot=\"increment\"\n >\n <Icon aria-hidden symbol=\"general#plus\" />\n </Button>\n </Group>\n {description && (\n <Text className=\"tds-number-stepper-description\" slot=\"description\">\n <Icon\n aria-hidden\n className=\"tds-number-stepper-description-invalid-icon\"\n symbol=\"general#exclamation-triangle\"\n />\n {description}\n </Text>\n )}\n </AriaNumberField>\n )\n}\n"],"names":["React","AriaNumberField"],"mappings":";;;;;AA0DM,SAAU,aAAa,CAAC,EAC5B,SAAS,EACT,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,aAAa,EACb,SAAS,EACT,EAAE,EACF,OAAO,EACP,KAAK,EACL,GAAG,EACH,GAAG,EACH,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,IAAI,GAAG,IAAI,EACX,IAAI,EACJ,KAAK,EACL,GAAG,SAAS,EACc,EAAA;AAC1B,IAAA,MAAM,iBAAiB,GAAG,UAAU,CAClC,oBAAoB,EACpB,EAAE,wBAAwB,EAAE,IAAI,KAAK,IAAI,EAAE,EAC3C,SAAS,CACV;AAED,IAAA,QACEA,cAAA,CAAA,aAAA,CAACC,WAAe,EAAA,EAAA,GACV,SAAS,EAAA,YAAA,EACD,SAAS,GAAG,KAAK,GAAG,SAAS,EACzC,SAAS,EAAE,iBAAiB,EAC5B,YAAY,EAAE,YAAY,EAC1B,aAAa,EAAE,aAAa,EAC5B,EAAE,EAAE,EAAE,EACN,UAAU,EAAE,QAAQ,EACpB,SAAS,EAAE,OAAO,EAClB,UAAU,EAAE,QAAQ,EACpB,UAAU,EAAE,QAAQ,EACpB,QAAQ,EAAE,GAAG,EACb,QAAQ,EAAE,GAAG,EACb,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,IAAI,SAAS,EAC/B,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EAAA;AAEX,QAAA,CAAC,SAAS,KACTD,cAAA,CAAA,aAAA,CAAC,KAAK,EAAA,EAAC,SAAS,EAAC,0BAA0B,EAAA,EAAE,KAAK,CAAS,CAC5D;AACD,QAAAA,cAAA,CAAA,aAAA,CAAC,KAAK,EAAA,EAAC,SAAS,EAAC,0BAA0B,EAAA;AACzC,YAAAA,cAAA,CAAA,aAAA,CAAC,KAAK,EAAA,EAAC,SAAS,EAAC,0BAA0B,EAAA,CAAG;YAC9CA,cAAA,CAAA,aAAA,CAAC,MAAM,IACL,SAAS,EAAC,oDAAoD,EAC9D,IAAI,EAAC,WAAW,EAAA;AAEhB,gBAAAA,cAAA,CAAA,aAAA,CAAC,IAAI,EAAA,EAAA,aAAA,EAAA,IAAA,EAAa,MAAM,EAAC,eAAe,GAAG,CACpC;YACTA,cAAA,CAAA,aAAA,CAAC,MAAM,IACL,SAAS,EAAC,oDAAoD,EAC9D,IAAI,EAAC,WAAW,EAAA;AAEhB,gBAAAA,cAAA,CAAA,aAAA,CAAC,IAAI,EAAA,EAAA,aAAA,EAAA,IAAA,EAAa,MAAM,EAAC,cAAc,EAAA,CAAG,CACnC,CACH;QACP,WAAW,KACVA,cAAA,CAAA,aAAA,CAAC,IAAI,EAAA,EAAC,SAAS,EAAC,gCAAgC,EAAC,IAAI,EAAC,aAAa,EAAA;YACjEA,cAAA,CAAA,aAAA,CAAC,IAAI,yBAEH,SAAS,EAAC,6CAA6C,EACvD,MAAM,EAAC,8BAA8B,EAAA,CACrC;AACD,YAAA,WAAW,CACP,CACR,CACe;AAEtB;;;;"}
@@ -0,0 +1,4 @@
1
+ import "./index.css";
2
+ export type { NumberStepperElementProps, NumberStepperProps, NumberStepperSize, } from "./NumberStepper";
3
+ export { NumberStepper } from "./NumberStepper";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/NumberStepper/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAA;AAEpB,YAAY,EACV,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA"}
package/dist/index.css CHANGED
@@ -1991,6 +1991,56 @@ a[class="tds-btn"]{
1991
1991
  border-radius:var(--t-border-radius-round);
1992
1992
  }
1993
1993
 
1994
+ .tds-btn--infield{
1995
+ --tds-btn-color:var(--t-text-color-status-neutral);
1996
+ --tds-btn-bg:var(--t-fill-color-button-neutral-solid);
1997
+ --tds-btn-border-color:var(--t-fill-color-button-neutral-solid);
1998
+ --tds-btn-color-hover:var(--t-text-color-status-neutral);
1999
+ --tds-btn-bg-hover:var(--t-fill-color-button-neutral-solid-hover);
2000
+ --tds-btn-border-color-hover:var(--t-fill-color-button-neutral-solid-hover);
2001
+ --tds-btn-color-active:var(--t-text-color-status-neutral);
2002
+ --tds-btn-bg-active:var(--t-fill-color-button-neutral-solid-active);
2003
+ --tds-btn-border-color-active:var(--t-fill-color-button-neutral-solid-active);
2004
+ --tds-btn-color-disabled:var(--t-text-color-disabled);
2005
+ --tds-btn-bg-disabled:var(--t-fill-color-button-neutral-solid-disabled);
2006
+ --tds-btn-border-color-disabled:var(--t-fill-color-button-neutral-solid-disabled);
2007
+ --tds-btn-padding-x:0;
2008
+ --tds-btn-padding-y:0;
2009
+ --tds-btn-font-size:.66lh;
2010
+ --tds-btn-min-height:auto;
2011
+ --tds-btn-border-width:var(--t-border-width);
2012
+
2013
+ aspect-ratio:1;
2014
+ cursor:pointer;
2015
+ }
2016
+
2017
+ .tds-btn--infield[data-hovered]:not([data-disabled]){
2018
+ color:var(--tds-btn-color-hover);
2019
+ background-color:var(--tds-btn-bg-hover);
2020
+ border-color:var(--tds-btn-border-color-hover);
2021
+ }
2022
+
2023
+ .tds-btn--infield[data-focus-visible]{
2024
+ color:var(--tds-btn-color-hover);
2025
+ outline:var(--t-focus-ring-outline);
2026
+ outline-offset:var(--t-focus-ring-offset);
2027
+ background-color:var(--tds-btn-bg-hover);
2028
+ border-color:var(--tds-btn-border-color-hover);
2029
+ }
2030
+
2031
+ .tds-btn--infield[data-pressed]:not([data-disabled]){
2032
+ color:var(--tds-btn-color-active);
2033
+ background-color:var(--tds-btn-bg-active);
2034
+ border-color:var(--tds-btn-border-color-active);
2035
+ }
2036
+
2037
+ .tds-btn--infield[data-disabled]{
2038
+ color:var(--tds-btn-color-disabled);
2039
+ pointer-events:none;
2040
+ background-color:var(--tds-btn-bg-disabled);
2041
+ border-color:var(--tds-btn-border-color-disabled);
2042
+ }
2043
+
1994
2044
  .tds-loading-spinner{
1995
2045
  --tds-loading-spinner-size:1.25em;
1996
2046