glassine-paper 1.0.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.
@@ -0,0 +1,55 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React, {} from 'react';
3
+ const NavDrawerItem = ({ key, id, label, leadingIcon, trailingIcon, divider = false, active = false, hidden = false, disabled = false, onClick, href, }) => {
4
+ const classes = [
5
+ active ? 'active' : '',
6
+ hidden ? 'hidden' : '',
7
+ disabled ? 'disabled' : '',
8
+ ].join(' ');
9
+ return divider ? (_jsx("hr", {})) : href ? (_jsxs("a", { id: id, className: classes, href: href, children: [leadingIcon, label, trailingIcon] }, key)) : (_jsxs("button", { id: id, className: classes, onClick: onClick, children: [leadingIcon, label, trailingIcon] }, key));
10
+ };
11
+ /**
12
+ * Material Design 3 NavDrawer component
13
+ *
14
+ * @param props NavDrawerProps
15
+ * @param props.id Element id
16
+ * @param props.items Array of NavDrawerItem configurations
17
+ * @param props.items[].key Unique key for the item
18
+ * @param props.items[].id Element id for the item
19
+ * @param props.items[].label Label text
20
+ * @param props.items[].leadingIcon Leading icon element
21
+ * @param props.items[].trailingIcon Trailing icon element
22
+ * @param props.items[].divider Show as divider (renders hr element)
23
+ * @param props.items[].active Active state
24
+ * @param props.items[].hidden Hidden state
25
+ * @param props.items[].disabled Disabled state
26
+ * @param props.items[].onClick Click handler
27
+ * @param props.items[].href Link URL (renders as anchor tag)
28
+ * @param props.className Additional CSS class names
29
+ * @param props.style Custom inline styles
30
+ * @returns JSX.Element
31
+ *
32
+ * @example
33
+ * <NavDrawer
34
+ * id="example-nav-drawer"
35
+ * items={[
36
+ * {
37
+ * leadingIcon: {<svg>...</svg>},
38
+ * label: "Item 1",
39
+ * trailingIcon: {<svg>...</svg>},
40
+ * active: true,
41
+ * onClick: () => {},
42
+ * },
43
+ * { divider: true },
44
+ * {
45
+ * label: "Item 2",
46
+ * href: "...",
47
+ * },
48
+ * ]}
49
+ * />
50
+ */
51
+ export const NavDrawer = ({ id, items = [], className, style = {}, }) => {
52
+ return (_jsx("div", { id: id, className: `nav-drawer ${className || ''}`, style: style, children: Array.from(items).map((item, index) => (_jsx(NavDrawerItem, { ...item }, item.key || index))) }));
53
+ };
54
+ export default NavDrawer;
55
+ //# sourceMappingURL=NavDrawer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavDrawer.js","sourceRoot":"","sources":["../src/components/NavDrawer.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAsC,MAAM,OAAO,CAAC;AAuBlE,MAAM,aAAa,GAAiC,CAAC,EACnD,GAAG,EACH,EAAE,EACF,KAAK,EACL,WAAW,EACX,YAAY,EACZ,OAAO,GAAG,KAAK,EACf,MAAM,GAAG,KAAK,EACd,MAAM,GAAG,KAAK,EACd,QAAQ,GAAG,KAAK,EAChB,OAAO,EACP,IAAI,GACL,EAAE,EAAE;IACH,MAAM,OAAO,GAAG;QACd,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;QACtB,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;QACtB,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;KAC3B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,OAAO,OAAO,CAAC,CAAC,CAAC,CACf,cAAM,CACP,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACT,aAAa,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,aAChD,WAAW,EACX,KAAK,EACL,YAAY,KAHP,GAAG,CAIP,CACL,CAAC,CAAC,CAAC,CACF,kBAAkB,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,aAC3D,WAAW,EACX,KAAK,EACL,YAAY,KAHF,GAAG,CAIP,CACV,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,CAAC,MAAM,SAAS,GAA6B,CAAC,EAClD,EAAE,EACF,KAAK,GAAG,EAAE,EACV,SAAS,EACT,KAAK,GAAG,EAAE,GACX,EAAE,EAAE;IACH,OAAO,CACL,cAAK,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,cAAc,SAAS,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,YAClE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CACtC,KAAC,aAAa,OAA6B,IAAI,IAA3B,IAAI,CAAC,GAAG,IAAI,KAAK,CAAc,CACpD,CAAC,GACE,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -0,0 +1,70 @@
1
+ import React, { type CSSProperties } from 'react';
2
+ export interface SliderOption {
3
+ value: number;
4
+ key?: string;
5
+ }
6
+ export interface SliderProps {
7
+ id?: string;
8
+ name?: string;
9
+ min?: number;
10
+ max?: number;
11
+ step?: number;
12
+ value: number;
13
+ size?: 'xs' | 'sm' | 'md';
14
+ orientation?: 'horizontal' | 'top-bottom' | 'bottom-top';
15
+ showValueIndicator?: boolean;
16
+ options?: SliderOption[];
17
+ onChange?: (value: number) => void;
18
+ className?: string;
19
+ style?: CSSProperties;
20
+ }
21
+ /**
22
+ * Material Design 3 Slider component
23
+ *
24
+ * @param props SliderProps
25
+ * @param props.id Input id attribute
26
+ * @param props.name Input name attribute
27
+ * @param props.min Minimum value
28
+ * @param props.max Maximum value
29
+ * @param props.step Step increment
30
+ * @param props.value Current value
31
+ * @param props.size Size variant: 'xs', 'sm', or 'md'
32
+ * @param props.orientation Orientation: 'horizontal', 'top-bottom', or 'bottom-top'
33
+ * @param props.showValueIndicator Show value indicator
34
+ * @param props.options Datalist options array
35
+ * @param props.options[].value Option value
36
+ * @param props.options[].key Optional unique key for the option
37
+ * @param props.onChange Change handler function
38
+ * @param props.className Additional CSS class names
39
+ * @param props.style Custom inline styles
40
+ * @returns JSX.Element
41
+ *
42
+ * @example
43
+ * <Slider
44
+ * value={50}
45
+ * min={0}
46
+ * max={100}
47
+ * step={10}
48
+ * showValueIndicator
49
+ * options={[
50
+ * { value: 0 },
51
+ * { value: 25 },
52
+ * { value: 50 },
53
+ * { value: 75 },
54
+ * { value: 100 }
55
+ * ]}
56
+ * onChange={(value) => console.log(value)}
57
+ * style={{ width: "16em"}}
58
+ * />
59
+ *
60
+ * @example
61
+ * <Slider
62
+ * value={30}
63
+ * orientation="top-bottom"
64
+ * size="md"
65
+ * style={{ height: "16em"}}
66
+ * />
67
+ */
68
+ export declare const Slider: React.FC<SliderProps>;
69
+ export default Slider;
70
+ //# sourceMappingURL=Slider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Slider.d.ts","sourceRoot":"","sources":["../src/components/Slider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAqB,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAErE,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,YAAY,GAAG,YAAY,GAAG,YAAY,CAAC;IACzD,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAwGxC,CAAC;AAEF,eAAe,MAAM,CAAC"}
package/lib/Slider.js ADDED
@@ -0,0 +1,104 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React, { useEffect, useRef } from 'react';
3
+ /**
4
+ * Material Design 3 Slider component
5
+ *
6
+ * @param props SliderProps
7
+ * @param props.id Input id attribute
8
+ * @param props.name Input name attribute
9
+ * @param props.min Minimum value
10
+ * @param props.max Maximum value
11
+ * @param props.step Step increment
12
+ * @param props.value Current value
13
+ * @param props.size Size variant: 'xs', 'sm', or 'md'
14
+ * @param props.orientation Orientation: 'horizontal', 'top-bottom', or 'bottom-top'
15
+ * @param props.showValueIndicator Show value indicator
16
+ * @param props.options Datalist options array
17
+ * @param props.options[].value Option value
18
+ * @param props.options[].key Optional unique key for the option
19
+ * @param props.onChange Change handler function
20
+ * @param props.className Additional CSS class names
21
+ * @param props.style Custom inline styles
22
+ * @returns JSX.Element
23
+ *
24
+ * @example
25
+ * <Slider
26
+ * value={50}
27
+ * min={0}
28
+ * max={100}
29
+ * step={10}
30
+ * showValueIndicator
31
+ * options={[
32
+ * { value: 0 },
33
+ * { value: 25 },
34
+ * { value: 50 },
35
+ * { value: 75 },
36
+ * { value: 100 }
37
+ * ]}
38
+ * onChange={(value) => console.log(value)}
39
+ * style={{ width: "16em"}}
40
+ * />
41
+ *
42
+ * @example
43
+ * <Slider
44
+ * value={30}
45
+ * orientation="top-bottom"
46
+ * size="md"
47
+ * style={{ height: "16em"}}
48
+ * />
49
+ */
50
+ export const Slider = ({ id, name, min = 0, max = 100, step = 1, value, size = 'sm', orientation = 'horizontal', showValueIndicator = false, options = [], onChange, className = '', style = {}, }) => {
51
+ const sliderRef = useRef(null);
52
+ const inputRef = useRef(null);
53
+ // Update progress and datalist on value change
54
+ useEffect(() => {
55
+ if (!sliderRef.current || !inputRef.current)
56
+ return;
57
+ const valueRatio = (value - min) / (max - min);
58
+ const ratio = `${max > min ? valueRatio * 100 : 0}%`;
59
+ sliderRef.current.style.setProperty('--slider-progress', ratio);
60
+ Object.entries(style).forEach(([key, value]) => {
61
+ sliderRef.current?.style.setProperty(key, value);
62
+ });
63
+ // Update datalist options
64
+ if (options.length > 0) {
65
+ const datalistOptions = sliderRef.current.querySelectorAll('.option');
66
+ datalistOptions.forEach((option) => {
67
+ const optionValue = Number(option.getAttribute('value'));
68
+ if (optionValue < value) {
69
+ option.classList.add('lower');
70
+ }
71
+ else {
72
+ option.classList.remove('lower');
73
+ }
74
+ });
75
+ }
76
+ if (showValueIndicator) {
77
+ const indicator = sliderRef.current.querySelector('.value-indicator');
78
+ if (indicator) {
79
+ const inputRect = inputRef.current.getBoundingClientRect();
80
+ const sliderRect = sliderRef.current.getBoundingClientRect();
81
+ // Position the indicator
82
+ indicator.style.left = `${(inputRect.left - sliderRect.left) * 3 + (inputRect.width - (inputRect.left - sliderRect.left) * 3) * valueRatio}px`;
83
+ }
84
+ }
85
+ }, [value, min, max, options, style, showValueIndicator]);
86
+ const handleInput = (e) => {
87
+ const newValue = Number(e.target.value);
88
+ if (onChange) {
89
+ onChange(newValue);
90
+ }
91
+ };
92
+ const classes = [
93
+ 'slider',
94
+ size !== 'sm' ? size : '',
95
+ orientation !== 'horizontal' ? orientation : '',
96
+ className,
97
+ ]
98
+ .filter(Boolean)
99
+ .join(' ');
100
+ const datalistId = id ? `${id}-list` : undefined;
101
+ return (_jsxs("div", { ref: sliderRef, className: classes, children: [showValueIndicator && _jsx("div", { className: "value-indicator", children: value }), _jsx("input", { ref: inputRef, id: id, name: name, type: "range", min: min, max: max, step: step, value: value, onChange: handleInput, list: datalistId }), options.length > 0 && (_jsx("div", { className: "datalist", id: datalistId, children: options.map((option) => (_jsx("div", { className: "option", "data-key": option.key ?? option.value, "data-value": option.value }, option.key ?? option.value))) }))] }));
102
+ };
103
+ export default Slider;
104
+ //# sourceMappingURL=Slider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Slider.js","sourceRoot":"","sources":["../src/components/Slider.tsx"],"names":[],"mappings":"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"}
package/lib/Tabs.d.ts ADDED
@@ -0,0 +1,50 @@
1
+ import React, { type ReactNode, type CSSProperties } from 'react';
2
+ export interface TabItemProps {
3
+ key?: string | number;
4
+ id?: string;
5
+ label: string;
6
+ leadingIcon?: ReactNode;
7
+ active?: boolean;
8
+ disabled?: boolean;
9
+ onClick?: () => void;
10
+ href?: string;
11
+ }
12
+ export interface TabsProps {
13
+ id?: string;
14
+ items: Iterable<TabItemProps>;
15
+ style?: CSSProperties;
16
+ }
17
+ /**
18
+ * Material Design 3 Tabs component
19
+ *
20
+ * @param props TabsProps
21
+ * @param props.id Element id
22
+ * @param props.items Array of TabItem configurations
23
+ * @param props.items[].key Unique key for the item
24
+ * @param props.items[].id Element id for the item
25
+ * @param props.items[].label Label text
26
+ * @param props.items[].leadingIcon Leading icon element
27
+ * @param props.items[].active Active state
28
+ * @param props.items[].disabled Disabled state
29
+ * @param props.items[].onClick Click handler
30
+ * @param props.items[].href Link URL (renders as anchor tag)
31
+ * @param props.style Custom inline styles
32
+ * @returns JSX.Element
33
+ *
34
+ * @example
35
+ * <Tabs
36
+ * id="example-tabs"
37
+ * items={[
38
+ * {
39
+ * leadingIcon: {<svg>...</svg>},
40
+ * label: "Item 1",
41
+ * },
42
+ * {
43
+ * label: "Item 2",
44
+ * },
45
+ * ]}
46
+ * />
47
+ */
48
+ export declare const Tabs: React.FC<TabsProps>;
49
+ export default Tabs;
50
+ //# sourceMappingURL=Tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../src/components/Tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAElE,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC9B,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAyBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAQpC,CAAC;AAEF,eAAe,IAAI,CAAC"}
package/lib/Tabs.js ADDED
@@ -0,0 +1,42 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import React, {} from 'react';
3
+ const TabItem = ({ key, id, leadingIcon, label, active = false, onClick, href, }) => {
4
+ const classes = [active ? 'active' : ''].join(' ');
5
+ return href ? (_jsxs("a", { id: id, className: classes, href: href, children: [leadingIcon, label] }, key)) : (_jsxs("button", { id: id, className: classes, onClick: onClick, children: [leadingIcon, label] }, key));
6
+ };
7
+ /**
8
+ * Material Design 3 Tabs component
9
+ *
10
+ * @param props TabsProps
11
+ * @param props.id Element id
12
+ * @param props.items Array of TabItem configurations
13
+ * @param props.items[].key Unique key for the item
14
+ * @param props.items[].id Element id for the item
15
+ * @param props.items[].label Label text
16
+ * @param props.items[].leadingIcon Leading icon element
17
+ * @param props.items[].active Active state
18
+ * @param props.items[].disabled Disabled state
19
+ * @param props.items[].onClick Click handler
20
+ * @param props.items[].href Link URL (renders as anchor tag)
21
+ * @param props.style Custom inline styles
22
+ * @returns JSX.Element
23
+ *
24
+ * @example
25
+ * <Tabs
26
+ * id="example-tabs"
27
+ * items={[
28
+ * {
29
+ * leadingIcon: {<svg>...</svg>},
30
+ * label: "Item 1",
31
+ * },
32
+ * {
33
+ * label: "Item 2",
34
+ * },
35
+ * ]}
36
+ * />
37
+ */
38
+ export const Tabs = ({ id, items = [], style = {} }) => {
39
+ return (_jsx("div", { id: id, className: "tabs", style: style, children: Array.from(items).map((item, index) => (_jsx(TabItem, { ...item }, item.key || index))) }));
40
+ };
41
+ export default Tabs;
42
+ //# sourceMappingURL=Tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tabs.js","sourceRoot":"","sources":["../src/components/Tabs.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAsC,MAAM,OAAO,CAAC;AAmBlE,MAAM,OAAO,GAA2B,CAAC,EACvC,GAAG,EACH,EAAE,EACF,WAAW,EACX,KAAK,EACL,MAAM,GAAG,KAAK,EACd,OAAO,EACP,IAAI,GACL,EAAE,EAAE;IACH,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnD,OAAO,IAAI,CAAC,CAAC,CAAC,CACZ,aAAa,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,aAChD,WAAW,EACX,KAAK,KAFA,GAAG,CAGP,CACL,CAAC,CAAC,CAAC,CACF,kBAAkB,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,aAC3D,WAAW,EACX,KAAK,KAFK,GAAG,CAGP,CACV,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,MAAM,IAAI,GAAwB,CAAC,EAAE,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,EAAE,EAAE;IAC1E,OAAO,CACL,cAAK,EAAE,EAAE,EAAE,EAAE,SAAS,EAAC,MAAM,EAAC,KAAK,EAAE,KAAK,YACvC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CACtC,KAAC,OAAO,OAA6B,IAAI,IAA3B,IAAI,CAAC,GAAG,IAAI,KAAK,CAAc,CAC9C,CAAC,GACE,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,IAAI,CAAC"}
@@ -0,0 +1,68 @@
1
+ import React, { type ReactNode, type CSSProperties } from 'react';
2
+ /**
3
+ * TextField component props
4
+ */
5
+ export interface TextFieldProps {
6
+ id?: string;
7
+ name?: string;
8
+ variant?: 'filled' | 'outlined';
9
+ type?: 'text' | 'email' | 'number' | 'password' | 'tel' | 'url';
10
+ label: string;
11
+ placeholder?: string;
12
+ value?: string | number;
13
+ error?: boolean;
14
+ disabled?: boolean;
15
+ supportingText?: string;
16
+ leadingIcon?: ReactNode;
17
+ trailingIcon?: ReactNode;
18
+ onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;
19
+ onBlur?: (e: React.FocusEvent<HTMLInputElement>) => void;
20
+ onFocus?: (e: React.FocusEvent<HTMLInputElement>) => void;
21
+ className?: string;
22
+ style?: CSSProperties;
23
+ }
24
+ /**
25
+ * Material Design 3 TextField component
26
+ *
27
+ * @param props TextFieldProps
28
+ * @param props.id Input id attribute
29
+ * @param props.name Input name attribute
30
+ * @param props.variant Variant of the text field: 'filled' or 'outlined'
31
+ * @param props.type Input type: 'text', 'email', 'number', 'password', 'tel', or 'url'
32
+ * @param props.label Label text
33
+ * @param props.placeholder Placeholder text (should match label)
34
+ * @param props.value Current value
35
+ * @param props.error Error state
36
+ * @param props.disabled Disabled state
37
+ * @param props.supportingText Supporting text or error message
38
+ * @param props.leadingIcon Leading icon element
39
+ * @param props.trailingIcon Trailing icon element
40
+ * @param props.onChange Change handler
41
+ * @param props.onBlur Blur handler
42
+ * @param props.onFocus Focus handler
43
+ * @param props.className Additional CSS class names
44
+ * @param props.style Custom inline styles
45
+ * @returns JSX.Element
46
+ *
47
+ * @example
48
+ * <TextField
49
+ * variant="filled"
50
+ * label="Email"
51
+ * placeholder="Email"
52
+ * type="email"
53
+ * supportingText="Enter your email address"
54
+ * />
55
+ *
56
+ * @example
57
+ * <TextField
58
+ * variant="outlined"
59
+ * label="Password"
60
+ * placeholder="Password"
61
+ * type="password"
62
+ * error={true}
63
+ * supportingText="Password is required"
64
+ * />
65
+ */
66
+ export declare const TextField: React.FC<TextFieldProps>;
67
+ export default TextField;
68
+ //# sourceMappingURL=TextField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextField.d.ts","sourceRoot":"","sources":["../src/components/TextField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAElE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,KAAK,GAAG,KAAK,CAAC;IAChE,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAC5D,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACzD,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAyC9C,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React, {} from 'react';
3
+ /**
4
+ * Material Design 3 TextField component
5
+ *
6
+ * @param props TextFieldProps
7
+ * @param props.id Input id attribute
8
+ * @param props.name Input name attribute
9
+ * @param props.variant Variant of the text field: 'filled' or 'outlined'
10
+ * @param props.type Input type: 'text', 'email', 'number', 'password', 'tel', or 'url'
11
+ * @param props.label Label text
12
+ * @param props.placeholder Placeholder text (should match label)
13
+ * @param props.value Current value
14
+ * @param props.error Error state
15
+ * @param props.disabled Disabled state
16
+ * @param props.supportingText Supporting text or error message
17
+ * @param props.leadingIcon Leading icon element
18
+ * @param props.trailingIcon Trailing icon element
19
+ * @param props.onChange Change handler
20
+ * @param props.onBlur Blur handler
21
+ * @param props.onFocus Focus handler
22
+ * @param props.className Additional CSS class names
23
+ * @param props.style Custom inline styles
24
+ * @returns JSX.Element
25
+ *
26
+ * @example
27
+ * <TextField
28
+ * variant="filled"
29
+ * label="Email"
30
+ * placeholder="Email"
31
+ * type="email"
32
+ * supportingText="Enter your email address"
33
+ * />
34
+ *
35
+ * @example
36
+ * <TextField
37
+ * variant="outlined"
38
+ * label="Password"
39
+ * placeholder="Password"
40
+ * type="password"
41
+ * error={true}
42
+ * supportingText="Password is required"
43
+ * />
44
+ */
45
+ export const TextField = ({ id, name, variant = 'outlined', type = 'text', label, value, error = false, disabled = false, supportingText, leadingIcon, trailingIcon, onChange, onBlur, onFocus, className = '', style = {}, }) => {
46
+ const classes = ['textfield', variant, error ? 'error' : '', className]
47
+ .filter(Boolean)
48
+ .join(' ');
49
+ return (_jsxs("div", { className: classes, style: style, children: [leadingIcon && leadingIcon, _jsx("label", { children: label }), _jsx("input", { id: id, name: name, type: type, value: value, placeholder: label, disabled: disabled, onChange: onChange, onBlur: onBlur, onFocus: onFocus }), trailingIcon && trailingIcon, supportingText && _jsx("div", { children: supportingText })] }));
50
+ };
51
+ export default TextField;
52
+ //# sourceMappingURL=TextField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextField.js","sourceRoot":"","sources":["../src/components/TextField.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAsC,MAAM,OAAO,CAAC;AAyBlE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,MAAM,CAAC,MAAM,SAAS,GAA6B,CAAC,EAClD,EAAE,EACF,IAAI,EACJ,OAAO,GAAG,UAAU,EACpB,IAAI,GAAG,MAAM,EACb,KAAK,EACL,KAAK,EACL,KAAK,GAAG,KAAK,EACb,QAAQ,GAAG,KAAK,EAChB,cAAc,EACd,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,OAAO,EACP,SAAS,GAAG,EAAE,EACd,KAAK,GAAG,EAAE,GACX,EAAE,EAAE;IACH,MAAM,OAAO,GAAG,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC;SACpE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,OAAO,CACL,eAAK,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,aAClC,WAAW,IAAI,WAAW,EAC3B,0BAAQ,KAAK,GAAS,EACtB,gBACE,EAAE,EAAE,EAAE,EACN,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,KAAK,EAClB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,GAChB,EACD,YAAY,IAAI,YAAY,EAC5B,cAAc,IAAI,wBAAM,cAAc,GAAO,IAC1C,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -0,0 +1,62 @@
1
+ import React, { type ReactNode, type CSSProperties } from 'react';
2
+ export interface ToolbarItemProps {
3
+ key?: string | number;
4
+ id?: string;
5
+ label?: string;
6
+ icon?: ReactNode;
7
+ disabled?: boolean;
8
+ onClick?: () => void;
9
+ href?: string;
10
+ toggle?: boolean;
11
+ checked?: boolean;
12
+ primary?: boolean;
13
+ fab?: boolean;
14
+ }
15
+ export interface ToolbarProps {
16
+ id?: string;
17
+ items: Iterable<ToolbarItemProps>;
18
+ variant?: 'docked' | 'floating';
19
+ color?: 'standard' | 'vibrant';
20
+ style?: CSSProperties;
21
+ }
22
+ /**
23
+ * Material Design 3 Toolbar component
24
+ *
25
+ * @param props ToolbarProps
26
+ * @param props.id Element id
27
+ * @param props.items Array of ToolbarItem configurations
28
+ * @param props.items[].key Unique key for the item
29
+ * @param props.items[].id Element id for the item
30
+ * @param props.items[].label Label text
31
+ * @param props.items[].icon Icon element
32
+ * @param props.items[].disabled Disabled state
33
+ * @param props.items[].onClick Click handler
34
+ * @param props.items[].href Link URL (renders as anchor tag)
35
+ * @param props.items[].toggle Renders as toggle button if true
36
+ * @param props.items[].checked Toggle button checked state
37
+ * @param props.items[].primary Primary button styling if true
38
+ * @param props.items[].fab Renders as floating action button if true on floating toolbars
39
+ * @param props.variant Toolbar variant: 'docked' or 'floating'
40
+ * @param props.color Toolbar color scheme: 'standard' or 'vibrant'
41
+ * @param props.style Custom inline styles
42
+ * @returns JSX.Element
43
+ *
44
+ * @example
45
+ * <Toolbar
46
+ * id="example-toolbar"
47
+ * items={[
48
+ * {
49
+ * icon: {<svg>...</svg>},
50
+ * onClick: () => {},
51
+ * },
52
+ * { divider: true },
53
+ * {
54
+ * icon: {<svg>...</svg>},
55
+ * href: "...",
56
+ * },
57
+ * ]}
58
+ * />
59
+ */
60
+ export declare const Toolbar: React.FC<ToolbarProps>;
61
+ export default Toolbar;
62
+ //# sourceMappingURL=Toolbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toolbar.d.ts","sourceRoot":"","sources":["../src/components/Toolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAElE,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAChC,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAC/B,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAoDD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CA+B1C,CAAC;AAEF,eAAe,OAAO,CAAC"}
package/lib/Toolbar.js ADDED
@@ -0,0 +1,54 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React, {} from 'react';
3
+ const ToolbarItem = ({ key, id, label, icon, disabled = false, onClick, href, toggle = false, checked = false, primary = false, fab = false, }) => {
4
+ const classes = [disabled ? 'disabled' : '', primary ? 'primary' : ''].join(' ');
5
+ return fab ? (_jsx("button", { id: id, className: `fab sm`, disabled: disabled, onClick: onClick, children: icon }, key)) : toggle ? (_jsxs("label", { id: id, className: classes, children: [_jsx("input", { type: "checkbox", disabled: disabled, onClick: onClick, checked: checked }), icon, label] }, key)) : href ? (_jsxs("a", { id: id, className: classes, href: href, children: [icon, label] }, key)) : (_jsxs("button", { id: id, className: classes, onClick: onClick, children: [icon, label] }, key));
6
+ };
7
+ /**
8
+ * Material Design 3 Toolbar component
9
+ *
10
+ * @param props ToolbarProps
11
+ * @param props.id Element id
12
+ * @param props.items Array of ToolbarItem configurations
13
+ * @param props.items[].key Unique key for the item
14
+ * @param props.items[].id Element id for the item
15
+ * @param props.items[].label Label text
16
+ * @param props.items[].icon Icon element
17
+ * @param props.items[].disabled Disabled state
18
+ * @param props.items[].onClick Click handler
19
+ * @param props.items[].href Link URL (renders as anchor tag)
20
+ * @param props.items[].toggle Renders as toggle button if true
21
+ * @param props.items[].checked Toggle button checked state
22
+ * @param props.items[].primary Primary button styling if true
23
+ * @param props.items[].fab Renders as floating action button if true on floating toolbars
24
+ * @param props.variant Toolbar variant: 'docked' or 'floating'
25
+ * @param props.color Toolbar color scheme: 'standard' or 'vibrant'
26
+ * @param props.style Custom inline styles
27
+ * @returns JSX.Element
28
+ *
29
+ * @example
30
+ * <Toolbar
31
+ * id="example-toolbar"
32
+ * items={[
33
+ * {
34
+ * icon: {<svg>...</svg>},
35
+ * onClick: () => {},
36
+ * },
37
+ * { divider: true },
38
+ * {
39
+ * icon: {<svg>...</svg>},
40
+ * href: "...",
41
+ * },
42
+ * ]}
43
+ * />
44
+ */
45
+ export const Toolbar = ({ id, items = [], style, variant = 'docked', color = 'standard', }) => {
46
+ const classes = ['toolbar', variant, color].join(' ');
47
+ return variant === 'floating' ? (_jsxs("div", { className: "toolbar-container", style: style, children: [_jsx("div", { id: id, className: classes, children: Array.from(items)
48
+ .filter((item) => !item.fab)
49
+ .map((item, index) => (_jsx(ToolbarItem, { ...item }, item.key || index))) }), Array.from(items)
50
+ .filter((item) => item.fab)
51
+ .map((item, index) => (_jsx(ToolbarItem, { ...item }, item.key || index)))] })) : (_jsx("div", { id: id, className: classes, style: style, children: Array.from(items).map((item, index) => (_jsx(ToolbarItem, { ...item, fab: false }, item.key || index))) }));
52
+ };
53
+ export default Toolbar;
54
+ //# sourceMappingURL=Toolbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toolbar.js","sourceRoot":"","sources":["../src/components/Toolbar.tsx"],"names":[],"mappings":"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"}