@ankhorage/surface 4.2.1 → 4.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/features/accordion/adapters/inbound/Accordion.d.ts +5 -0
- package/dist/features/accordion/adapters/inbound/Accordion.d.ts.map +1 -0
- package/dist/features/accordion/adapters/inbound/Accordion.js +46 -0
- package/dist/features/accordion/adapters/inbound/Accordion.js.map +1 -0
- package/dist/features/accordion/adapters/inbound/AccordionContent.d.ts +5 -0
- package/dist/features/accordion/adapters/inbound/AccordionContent.d.ts.map +1 -0
- package/dist/features/accordion/adapters/inbound/AccordionContent.js +16 -0
- package/dist/features/accordion/adapters/inbound/AccordionContent.js.map +1 -0
- package/dist/features/accordion/adapters/inbound/AccordionContext.d.ts +4 -0
- package/dist/features/accordion/adapters/inbound/AccordionContext.d.ts.map +1 -0
- package/dist/features/accordion/adapters/inbound/AccordionContext.js +3 -0
- package/dist/features/accordion/adapters/inbound/AccordionContext.js.map +1 -0
- package/dist/features/accordion/adapters/inbound/AccordionItem.d.ts +5 -0
- package/dist/features/accordion/adapters/inbound/AccordionItem.d.ts.map +1 -0
- package/dist/features/accordion/adapters/inbound/AccordionItem.js +28 -0
- package/dist/features/accordion/adapters/inbound/AccordionItem.js.map +1 -0
- package/dist/features/accordion/adapters/inbound/AccordionItemContext.d.ts +4 -0
- package/dist/features/accordion/adapters/inbound/AccordionItemContext.d.ts.map +1 -0
- package/dist/features/accordion/adapters/inbound/AccordionItemContext.js +3 -0
- package/dist/features/accordion/adapters/inbound/AccordionItemContext.js.map +1 -0
- package/dist/features/accordion/adapters/inbound/AccordionTrigger.d.ts +5 -0
- package/dist/features/accordion/adapters/inbound/AccordionTrigger.d.ts.map +1 -0
- package/dist/features/accordion/adapters/inbound/AccordionTrigger.js +17 -0
- package/dist/features/accordion/adapters/inbound/AccordionTrigger.js.map +1 -0
- package/dist/features/accordion/public.d.ts +6 -0
- package/dist/features/accordion/public.d.ts.map +1 -0
- package/dist/features/accordion/public.js +5 -0
- package/dist/features/accordion/public.js.map +1 -0
- package/dist/features/accordion/utils/resolveAccordionToggle.d.ts +11 -0
- package/dist/features/accordion/utils/resolveAccordionToggle.d.ts.map +1 -0
- package/dist/features/accordion/utils/resolveAccordionToggle.js +13 -0
- package/dist/features/accordion/utils/resolveAccordionToggle.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/types/accordion.d.ts +54 -0
- package/dist/types/accordion.d.ts.map +1 -0
- package/dist/types/accordion.js +2 -0
- package/dist/types/accordion.js.map +1 -0
- package/package.json +1 -1
- package/src/features/accordion/adapters/inbound/Accordion.tsx +83 -0
- package/src/features/accordion/adapters/inbound/AccordionContent.tsx +30 -0
- package/src/features/accordion/adapters/inbound/AccordionContext.ts +5 -0
- package/src/features/accordion/adapters/inbound/AccordionItem.tsx +42 -0
- package/src/features/accordion/adapters/inbound/AccordionItemContext.ts +5 -0
- package/src/features/accordion/adapters/inbound/AccordionTrigger.tsx +34 -0
- package/src/features/accordion/public.ts +13 -0
- package/src/features/accordion/utils/resolveAccordionToggle.test.ts +57 -0
- package/src/features/accordion/utils/resolveAccordionToggle.ts +28 -0
- package/src/index.ts +15 -0
- package/src/types/accordion.ts +69 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @ankhorage/surface
|
|
2
2
|
|
|
3
|
+
## 4.3.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 00ffbe0: Add a feature-owned accordion foundation with single/multiple state, controlled and uncontrolled values, accessible trigger/content semantics, and passive interaction support.
|
|
8
|
+
|
|
3
9
|
## 4.2.1
|
|
4
10
|
|
|
5
11
|
### Patch Changes
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { AccordionProps } from '../../../../types/accordion';
|
|
3
|
+
/*** Coordinates controlled or uncontrolled accordion expansion state. */
|
|
4
|
+
export declare function Accordion(props: AccordionProps): React.JSX.Element;
|
|
5
|
+
//# sourceMappingURL=Accordion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Accordion.d.ts","sourceRoot":"","sources":["../../../../../src/features/accordion/adapters/inbound/Accordion.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAGV,cAAc,EAEf,MAAM,6BAA6B,CAAC;AAIrC,yEAAyE;AACzE,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,qBA6C9C"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View } from 'react-native';
|
|
3
|
+
import { resolveAccordionToggle } from '../../utils/resolveAccordionToggle';
|
|
4
|
+
import { AccordionContext } from './AccordionContext';
|
|
5
|
+
/*** Coordinates controlled or uncontrolled accordion expansion state. */
|
|
6
|
+
export function Accordion(props) {
|
|
7
|
+
const { children, collapsible = false, defaultValue, disabled = false, interactionPolicy = 'enabled', onValueChange: _onValueChange, type = 'single', value, ...viewProps } = props;
|
|
8
|
+
const [uncontrolledValues, setUncontrolledValues] = React.useState(() => normalizeAccordionValues(type, defaultValue));
|
|
9
|
+
const controlled = value !== undefined;
|
|
10
|
+
const openValues = controlled ? normalizeAccordionValues(type, value) : uncontrolledValues;
|
|
11
|
+
const toggleValue = React.useCallback((itemValue) => {
|
|
12
|
+
if (disabled || interactionPolicy === 'passive')
|
|
13
|
+
return;
|
|
14
|
+
const nextValues = resolveAccordionToggle({
|
|
15
|
+
collapsible,
|
|
16
|
+
mode: type,
|
|
17
|
+
openValues,
|
|
18
|
+
value: itemValue,
|
|
19
|
+
});
|
|
20
|
+
if (!controlled)
|
|
21
|
+
setUncontrolledValues(nextValues);
|
|
22
|
+
notifyValueChange(props, nextValues);
|
|
23
|
+
}, [collapsible, controlled, disabled, interactionPolicy, openValues, props, type]);
|
|
24
|
+
const contextValue = React.useMemo(() => ({ disabled, interactionPolicy, mode: type, openValues, toggleValue }), [disabled, interactionPolicy, openValues, toggleValue, type]);
|
|
25
|
+
return (<AccordionContext.Provider value={contextValue}>
|
|
26
|
+
<View {...viewProps}>{children}</View>
|
|
27
|
+
</AccordionContext.Provider>);
|
|
28
|
+
}
|
|
29
|
+
/*** Normalizes the public single/multiple value shapes for internal state. */
|
|
30
|
+
function normalizeAccordionValues(mode, value) {
|
|
31
|
+
if (mode === 'multiple') {
|
|
32
|
+
return typeof value === 'string' || value === undefined ? [] : value;
|
|
33
|
+
}
|
|
34
|
+
return typeof value === 'string' ? [value] : [];
|
|
35
|
+
}
|
|
36
|
+
/*** Emits the public value shape matching the configured accordion mode. */
|
|
37
|
+
function notifyValueChange(props, values) {
|
|
38
|
+
if (props.type === 'multiple') {
|
|
39
|
+
const multipleProps = props;
|
|
40
|
+
multipleProps.onValueChange?.(values);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const singleProps = props;
|
|
44
|
+
singleProps.onValueChange?.(values[0]);
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=Accordion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Accordion.js","sourceRoot":"","sources":["../../../../../src/features/accordion/adapters/inbound/Accordion.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport { View } from 'react-native';\n\nimport type {\n AccordionMode,\n AccordionMultipleProps,\n AccordionProps,\n AccordionSingleProps,\n} from '../../../../types/accordion';\nimport { resolveAccordionToggle } from '../../utils/resolveAccordionToggle';\nimport { AccordionContext } from './AccordionContext';\n\n/*** Coordinates controlled or uncontrolled accordion expansion state. */\nexport function Accordion(props: AccordionProps) {\n const {\n children,\n collapsible = false,\n defaultValue,\n disabled = false,\n interactionPolicy = 'enabled',\n onValueChange: _onValueChange,\n type = 'single',\n value,\n ...viewProps\n } = props;\n const [uncontrolledValues, setUncontrolledValues] = React.useState<readonly string[]>(() =>\n normalizeAccordionValues(type, defaultValue),\n );\n const controlled = value !== undefined;\n const openValues = controlled ? normalizeAccordionValues(type, value) : uncontrolledValues;\n\n const toggleValue = React.useCallback(\n (itemValue: string) => {\n if (disabled || interactionPolicy === 'passive') return;\n\n const nextValues = resolveAccordionToggle({\n collapsible,\n mode: type,\n openValues,\n value: itemValue,\n });\n\n if (!controlled) setUncontrolledValues(nextValues);\n notifyValueChange(props, nextValues);\n },\n [collapsible, controlled, disabled, interactionPolicy, openValues, props, type],\n );\n\n const contextValue = React.useMemo(\n () => ({ disabled, interactionPolicy, mode: type, openValues, toggleValue }),\n [disabled, interactionPolicy, openValues, toggleValue, type],\n );\n\n return (\n <AccordionContext.Provider value={contextValue}>\n <View {...viewProps}>{children}</View>\n </AccordionContext.Provider>\n );\n}\n\n/*** Normalizes the public single/multiple value shapes for internal state. */\nfunction normalizeAccordionValues(\n mode: AccordionMode,\n value: string | readonly string[] | undefined,\n): readonly string[] {\n if (mode === 'multiple') {\n return typeof value === 'string' || value === undefined ? [] : value;\n }\n\n return typeof value === 'string' ? [value] : [];\n}\n\n/*** Emits the public value shape matching the configured accordion mode. */\nfunction notifyValueChange(props: AccordionProps, values: readonly string[]) {\n if (props.type === 'multiple') {\n const multipleProps: AccordionMultipleProps = props;\n multipleProps.onValueChange?.(values);\n return;\n }\n\n const singleProps: AccordionSingleProps = props;\n singleProps.onValueChange?.(values[0]);\n}\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { AccordionContentProps } from '../../../../types/accordion';
|
|
3
|
+
/*** Renders an accordion item's content when expanded or force-mounted. */
|
|
4
|
+
export declare function AccordionContent({ children, forceMount, style, ...viewProps }: AccordionContentProps): React.JSX.Element | null;
|
|
5
|
+
//# sourceMappingURL=AccordionContent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionContent.d.ts","sourceRoot":"","sources":["../../../../../src/features/accordion/adapters/inbound/AccordionContent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAGzE,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,UAAkB,EAClB,KAAK,EACL,GAAG,SAAS,EACb,EAAE,qBAAqB,4BAevB"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View } from 'react-native';
|
|
3
|
+
import { AccordionItemContext } from './AccordionItemContext';
|
|
4
|
+
/*** Renders an accordion item's content when expanded or force-mounted. */
|
|
5
|
+
export function AccordionContent({ children, forceMount = false, style, ...viewProps }) {
|
|
6
|
+
const item = React.useContext(AccordionItemContext);
|
|
7
|
+
if (!item)
|
|
8
|
+
throw new Error('AccordionContent must be rendered inside AccordionItem.');
|
|
9
|
+
if (!item.open && !forceMount)
|
|
10
|
+
return null;
|
|
11
|
+
return (<View {...viewProps} accessibilityLabelledBy={item.triggerId} nativeID={item.contentId} style={[!item.open ? hiddenContentStyle : undefined, style]}>
|
|
12
|
+
{children}
|
|
13
|
+
</View>);
|
|
14
|
+
}
|
|
15
|
+
const hiddenContentStyle = { display: 'none' };
|
|
16
|
+
//# sourceMappingURL=AccordionContent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionContent.js","sourceRoot":"","sources":["../../../../../src/features/accordion/adapters/inbound/AccordionContent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAkB,MAAM,cAAc,CAAC;AAGpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,2EAA2E;AAC3E,MAAM,UAAU,gBAAgB,CAAC,EAC/B,QAAQ,EACR,UAAU,GAAG,KAAK,EAClB,KAAK,EACL,GAAG,SAAS,EACU;IACtB,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;IACpD,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IACtF,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAE3C,OAAO,CACL,CAAC,IAAI,CACH,IAAI,SAAS,CAAC,CACd,uBAAuB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CACxC,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CACzB,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAE5D;MAAA,CAAC,QAAQ,CACX;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC;AAED,MAAM,kBAAkB,GAAc,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC","sourcesContent":["import React from 'react';\nimport { View, type ViewStyle } from 'react-native';\n\nimport type { AccordionContentProps } from '../../../../types/accordion';\nimport { AccordionItemContext } from './AccordionItemContext';\n\n/*** Renders an accordion item's content when expanded or force-mounted. */\nexport function AccordionContent({\n children,\n forceMount = false,\n style,\n ...viewProps\n}: AccordionContentProps) {\n const item = React.useContext(AccordionItemContext);\n if (!item) throw new Error('AccordionContent must be rendered inside AccordionItem.');\n if (!item.open && !forceMount) return null;\n\n return (\n <View\n {...viewProps}\n accessibilityLabelledBy={item.triggerId}\n nativeID={item.contentId}\n style={[!item.open ? hiddenContentStyle : undefined, style]}\n >\n {children}\n </View>\n );\n}\n\nconst hiddenContentStyle: ViewStyle = { display: 'none' };\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionContext.d.ts","sourceRoot":"","sources":["../../../../../src/features/accordion/adapters/inbound/AccordionContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEzE,eAAO,MAAM,gBAAgB,6CAA0D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionContext.js","sourceRoot":"","sources":["../../../../../src/features/accordion/adapters/inbound/AccordionContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC,aAAa,CAA+B,IAAI,CAAC,CAAC","sourcesContent":["import React from 'react';\n\nimport type { AccordionContextValue } from '../../../../types/accordion';\n\nexport const AccordionContext = React.createContext<AccordionContextValue | null>(null);\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { AccordionItemProps } from '../../../../types/accordion';
|
|
3
|
+
/*** Provides one accordion item's value, state, and trigger/content identifiers. */
|
|
4
|
+
export declare function AccordionItem({ children, disabled, interactionPolicy, value, ...viewProps }: AccordionItemProps): React.JSX.Element;
|
|
5
|
+
//# sourceMappingURL=AccordionItem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionItem.d.ts","sourceRoot":"","sources":["../../../../../src/features/accordion/adapters/inbound/AccordionItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAItE,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,QAAgB,EAChB,iBAAiB,EACjB,KAAK,EACL,GAAG,SAAS,EACb,EAAE,kBAAkB,qBA2BpB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View } from 'react-native';
|
|
3
|
+
import { AccordionContext } from './AccordionContext';
|
|
4
|
+
import { AccordionItemContext } from './AccordionItemContext';
|
|
5
|
+
/*** Provides one accordion item's value, state, and trigger/content identifiers. */
|
|
6
|
+
export function AccordionItem({ children, disabled = false, interactionPolicy, value, ...viewProps }) {
|
|
7
|
+
const accordion = React.useContext(AccordionContext);
|
|
8
|
+
if (!accordion)
|
|
9
|
+
throw new Error('AccordionItem must be rendered inside Accordion.');
|
|
10
|
+
const reactId = React.useId();
|
|
11
|
+
const resolvedDisabled = accordion.disabled || disabled;
|
|
12
|
+
const resolvedInteractionPolicy = interactionPolicy ?? accordion.interactionPolicy;
|
|
13
|
+
const open = accordion.openValues.includes(value);
|
|
14
|
+
const toggle = React.useCallback(() => accordion.toggleValue(value), [accordion, value]);
|
|
15
|
+
const contextValue = React.useMemo(() => ({
|
|
16
|
+
contentId: `accordion-${reactId}-content`,
|
|
17
|
+
disabled: resolvedDisabled,
|
|
18
|
+
interactionPolicy: resolvedInteractionPolicy,
|
|
19
|
+
open,
|
|
20
|
+
toggle,
|
|
21
|
+
triggerId: `accordion-${reactId}-trigger`,
|
|
22
|
+
value,
|
|
23
|
+
}), [open, reactId, resolvedDisabled, resolvedInteractionPolicy, toggle, value]);
|
|
24
|
+
return (<AccordionItemContext.Provider value={contextValue}>
|
|
25
|
+
<View {...viewProps}>{children}</View>
|
|
26
|
+
</AccordionItemContext.Provider>);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=AccordionItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionItem.js","sourceRoot":"","sources":["../../../../../src/features/accordion/adapters/inbound/AccordionItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAGpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,oFAAoF;AACpF,MAAM,UAAU,aAAa,CAAC,EAC5B,QAAQ,EACR,QAAQ,GAAG,KAAK,EAChB,iBAAiB,EACjB,KAAK,EACL,GAAG,SAAS,EACO;IACnB,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;IACrD,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAEpF,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAC9B,MAAM,gBAAgB,GAAG,SAAS,CAAC,QAAQ,IAAI,QAAQ,CAAC;IACxD,MAAM,yBAAyB,GAAG,iBAAiB,IAAI,SAAS,CAAC,iBAAiB,CAAC;IACnF,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IACzF,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAChC,GAAG,EAAE,CAAC,CAAC;QACL,SAAS,EAAE,aAAa,OAAO,UAAU;QACzC,QAAQ,EAAE,gBAAgB;QAC1B,iBAAiB,EAAE,yBAAyB;QAC5C,IAAI;QACJ,MAAM;QACN,SAAS,EAAE,aAAa,OAAO,UAAU;QACzC,KAAK;KACN,CAAC,EACF,CAAC,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,EAAE,KAAK,CAAC,CAC5E,CAAC;IAEF,OAAO,CACL,CAAC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CACjD;MAAA,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,CACvC;IAAA,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CACjC,CAAC;AACJ,CAAC","sourcesContent":["import React from 'react';\nimport { View } from 'react-native';\n\nimport type { AccordionItemProps } from '../../../../types/accordion';\nimport { AccordionContext } from './AccordionContext';\nimport { AccordionItemContext } from './AccordionItemContext';\n\n/*** Provides one accordion item's value, state, and trigger/content identifiers. */\nexport function AccordionItem({\n children,\n disabled = false,\n interactionPolicy,\n value,\n ...viewProps\n}: AccordionItemProps) {\n const accordion = React.useContext(AccordionContext);\n if (!accordion) throw new Error('AccordionItem must be rendered inside Accordion.');\n\n const reactId = React.useId();\n const resolvedDisabled = accordion.disabled || disabled;\n const resolvedInteractionPolicy = interactionPolicy ?? accordion.interactionPolicy;\n const open = accordion.openValues.includes(value);\n const toggle = React.useCallback(() => accordion.toggleValue(value), [accordion, value]);\n const contextValue = React.useMemo(\n () => ({\n contentId: `accordion-${reactId}-content`,\n disabled: resolvedDisabled,\n interactionPolicy: resolvedInteractionPolicy,\n open,\n toggle,\n triggerId: `accordion-${reactId}-trigger`,\n value,\n }),\n [open, reactId, resolvedDisabled, resolvedInteractionPolicy, toggle, value],\n );\n\n return (\n <AccordionItemContext.Provider value={contextValue}>\n <View {...viewProps}>{children}</View>\n </AccordionItemContext.Provider>\n );\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionItemContext.d.ts","sourceRoot":"","sources":["../../../../../src/features/accordion/adapters/inbound/AccordionItemContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAE7E,eAAO,MAAM,oBAAoB,iDAA8D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionItemContext.js","sourceRoot":"","sources":["../../../../../src/features/accordion/adapters/inbound/AccordionItemContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC,aAAa,CAAmC,IAAI,CAAC,CAAC","sourcesContent":["import React from 'react';\n\nimport type { AccordionItemContextValue } from '../../../../types/accordion';\n\nexport const AccordionItemContext = React.createContext<AccordionItemContextValue | null>(null);\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { AccordionTriggerProps } from '../../../../types/accordion';
|
|
3
|
+
/*** Renders the accessible button that toggles its owning accordion item. */
|
|
4
|
+
export declare function AccordionTrigger({ children, disabled, interactionPolicy, ...pressableProps }: AccordionTriggerProps): React.JSX.Element;
|
|
5
|
+
//# sourceMappingURL=AccordionTrigger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionTrigger.d.ts","sourceRoot":"","sources":["../../../../../src/features/accordion/adapters/inbound/AccordionTrigger.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAGzE,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,QAAgB,EAChB,iBAAiB,EACjB,GAAG,cAAc,EAClB,EAAE,qBAAqB,qBAqBvB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Pressable, View } from 'react-native';
|
|
3
|
+
import { AccordionItemContext } from './AccordionItemContext';
|
|
4
|
+
/*** Renders the accessible button that toggles its owning accordion item. */
|
|
5
|
+
export function AccordionTrigger({ children, disabled = false, interactionPolicy, ...pressableProps }) {
|
|
6
|
+
const item = React.useContext(AccordionItemContext);
|
|
7
|
+
if (!item)
|
|
8
|
+
throw new Error('AccordionTrigger must be rendered inside AccordionItem.');
|
|
9
|
+
const resolvedDisabled = item.disabled || disabled;
|
|
10
|
+
const resolvedInteractionPolicy = interactionPolicy ?? item.interactionPolicy;
|
|
11
|
+
return (<View accessibilityRole="header">
|
|
12
|
+
<Pressable {...pressableProps} accessibilityRole="button" accessibilityState={{ disabled: resolvedDisabled, expanded: item.open }} disabled={resolvedDisabled} nativeID={item.triggerId} onPress={resolvedInteractionPolicy === 'passive' ? undefined : item.toggle}>
|
|
13
|
+
{children}
|
|
14
|
+
</Pressable>
|
|
15
|
+
</View>);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=AccordionTrigger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionTrigger.js","sourceRoot":"","sources":["../../../../../src/features/accordion/adapters/inbound/AccordionTrigger.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,6EAA6E;AAC7E,MAAM,UAAU,gBAAgB,CAAC,EAC/B,QAAQ,EACR,QAAQ,GAAG,KAAK,EAChB,iBAAiB,EACjB,GAAG,cAAc,EACK;IACtB,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;IACpD,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAEtF,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC;IACnD,MAAM,yBAAyB,GAAG,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC;IAE9E,OAAO,CACL,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAC9B;MAAA,CAAC,SAAS,CACR,IAAI,cAAc,CAAC,CACnB,iBAAiB,CAAC,QAAQ,CAC1B,kBAAkB,CAAC,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CACxE,QAAQ,CAAC,CAAC,gBAAgB,CAAC,CAC3B,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CACzB,OAAO,CAAC,CAAC,yBAAyB,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAE3E;QAAA,CAAC,QAAQ,CACX;MAAA,EAAE,SAAS,CACb;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC","sourcesContent":["import React from 'react';\nimport { Pressable, View } from 'react-native';\n\nimport type { AccordionTriggerProps } from '../../../../types/accordion';\nimport { AccordionItemContext } from './AccordionItemContext';\n\n/*** Renders the accessible button that toggles its owning accordion item. */\nexport function AccordionTrigger({\n children,\n disabled = false,\n interactionPolicy,\n ...pressableProps\n}: AccordionTriggerProps) {\n const item = React.useContext(AccordionItemContext);\n if (!item) throw new Error('AccordionTrigger must be rendered inside AccordionItem.');\n\n const resolvedDisabled = item.disabled || disabled;\n const resolvedInteractionPolicy = interactionPolicy ?? item.interactionPolicy;\n\n return (\n <View accessibilityRole=\"header\">\n <Pressable\n {...pressableProps}\n accessibilityRole=\"button\"\n accessibilityState={{ disabled: resolvedDisabled, expanded: item.open }}\n disabled={resolvedDisabled}\n nativeID={item.triggerId}\n onPress={resolvedInteractionPolicy === 'passive' ? undefined : item.toggle}\n >\n {children}\n </Pressable>\n </View>\n );\n}\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { AccordionContentProps, AccordionItemProps, AccordionMode, AccordionMultipleProps, AccordionProps, AccordionSingleProps, AccordionTriggerProps, } from '../../types/accordion';
|
|
2
|
+
export { Accordion } from './adapters/inbound/Accordion';
|
|
3
|
+
export { AccordionContent } from './adapters/inbound/AccordionContent';
|
|
4
|
+
export { AccordionItem } from './adapters/inbound/AccordionItem';
|
|
5
|
+
export { AccordionTrigger } from './adapters/inbound/AccordionTrigger';
|
|
6
|
+
//# sourceMappingURL=public.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../../src/features/accordion/public.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,EACb,sBAAsB,EACtB,cAAc,EACd,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { Accordion } from './adapters/inbound/Accordion';
|
|
2
|
+
export { AccordionContent } from './adapters/inbound/AccordionContent';
|
|
3
|
+
export { AccordionItem } from './adapters/inbound/AccordionItem';
|
|
4
|
+
export { AccordionTrigger } from './adapters/inbound/AccordionTrigger';
|
|
5
|
+
//# sourceMappingURL=public.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public.js","sourceRoot":"","sources":["../../../src/features/accordion/public.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC","sourcesContent":["export type {\n AccordionContentProps,\n AccordionItemProps,\n AccordionMode,\n AccordionMultipleProps,\n AccordionProps,\n AccordionSingleProps,\n AccordionTriggerProps,\n} from '../../types/accordion';\nexport { Accordion } from './adapters/inbound/Accordion';\nexport { AccordionContent } from './adapters/inbound/AccordionContent';\nexport { AccordionItem } from './adapters/inbound/AccordionItem';\nexport { AccordionTrigger } from './adapters/inbound/AccordionTrigger';\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AccordionMode } from '../../../types/accordion';
|
|
2
|
+
/*** Resolves the next immutable set of open accordion item values. */
|
|
3
|
+
export declare function resolveAccordionToggle({ collapsible, mode, openValues, value, }: ResolveAccordionToggleInput): readonly string[];
|
|
4
|
+
interface ResolveAccordionToggleInput {
|
|
5
|
+
collapsible: boolean;
|
|
6
|
+
mode: AccordionMode;
|
|
7
|
+
openValues: readonly string[];
|
|
8
|
+
value: string;
|
|
9
|
+
}
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=resolveAccordionToggle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveAccordionToggle.d.ts","sourceRoot":"","sources":["../../../../src/features/accordion/utils/resolveAccordionToggle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,sEAAsE;AACtE,wBAAgB,sBAAsB,CAAC,EACrC,WAAW,EACX,IAAI,EACJ,UAAU,EACV,KAAK,GACN,EAAE,2BAA2B,GAAG,SAAS,MAAM,EAAE,CAYjD;AAED,UAAU,2BAA2B;IACnC,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;CACf"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/*** Resolves the next immutable set of open accordion item values. */
|
|
2
|
+
export function resolveAccordionToggle({ collapsible, mode, openValues, value, }) {
|
|
3
|
+
if (mode === 'multiple') {
|
|
4
|
+
return openValues.includes(value)
|
|
5
|
+
? openValues.filter((openValue) => openValue !== value)
|
|
6
|
+
: [...openValues, value];
|
|
7
|
+
}
|
|
8
|
+
if (openValues.includes(value)) {
|
|
9
|
+
return collapsible ? [] : openValues;
|
|
10
|
+
}
|
|
11
|
+
return [value];
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=resolveAccordionToggle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveAccordionToggle.js","sourceRoot":"","sources":["../../../../src/features/accordion/utils/resolveAccordionToggle.ts"],"names":[],"mappings":"AAEA,sEAAsE;AACtE,MAAM,UAAU,sBAAsB,CAAC,EACrC,WAAW,EACX,IAAI,EACJ,UAAU,EACV,KAAK,GACuB;IAC5B,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,OAAO,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC/B,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,KAAK,CAAC;YACvD,CAAC,CAAC,CAAC,GAAG,UAAU,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;IACvC,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC","sourcesContent":["import type { AccordionMode } from '../../../types/accordion';\n\n/*** Resolves the next immutable set of open accordion item values. */\nexport function resolveAccordionToggle({\n collapsible,\n mode,\n openValues,\n value,\n}: ResolveAccordionToggleInput): readonly string[] {\n if (mode === 'multiple') {\n return openValues.includes(value)\n ? openValues.filter((openValue) => openValue !== value)\n : [...openValues, value];\n }\n\n if (openValues.includes(value)) {\n return collapsible ? [] : openValues;\n }\n\n return [value];\n}\n\ninterface ResolveAccordionToggleInput {\n collapsible: boolean;\n mode: AccordionMode;\n openValues: readonly string[];\n value: string;\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -25,6 +25,8 @@ export { FontProvider, useFontContext } from './context/FontContext';
|
|
|
25
25
|
export type { I18nInstance, TranslationRuntime, Translator } from './context/TranslationContext';
|
|
26
26
|
export { TranslationProvider, useTranslationContext } from './context/TranslationContext';
|
|
27
27
|
export * from './core/responsive';
|
|
28
|
+
export type { AccordionContentProps, AccordionItemProps, AccordionMode, AccordionMultipleProps, AccordionProps, AccordionSingleProps, AccordionTriggerProps, } from './features/accordion/public';
|
|
29
|
+
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, } from './features/accordion/public';
|
|
28
30
|
export type { BadgeProps } from './features/badge/public';
|
|
29
31
|
export { Badge } from './features/badge/public';
|
|
30
32
|
export type { ButtonIconSpec, ButtonProps, IconButtonProps } from './features/button/public';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -12,6 +12,7 @@ export { Tooltip } from './components/tooltip';
|
|
|
12
12
|
export { FontProvider, useFontContext } from './context/FontContext';
|
|
13
13
|
export { TranslationProvider, useTranslationContext } from './context/TranslationContext';
|
|
14
14
|
export * from './core/responsive';
|
|
15
|
+
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, } from './features/accordion/public';
|
|
15
16
|
export { Badge } from './features/badge/public';
|
|
16
17
|
export { Button, IconButton } from './features/button/public';
|
|
17
18
|
export { Card } from './features/card/public';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEjE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEpE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAErE,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC1F,cAAc,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEjE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEpE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAErE,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC1F,cAAc,mBAAmB,CAAC;AAUlC,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAE9C,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAE3D,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAS9D,OAAO,EAAE,IAAI,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAExE,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAKhD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAQhF,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAEhF,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEpD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAE7D,cAAc,UAAU,CAAC;AAEzB,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAOtD,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC","sourcesContent":["export type { FieldProps } from './components/field';\nexport { Field } from './components/field';\nexport type { HelperTextProps } from './components/helper-text';\nexport { HelperText } from './components/helper-text';\nexport type { LabelProps } from './components/label';\nexport { Label } from './components/label';\nexport type { ListItemProps } from './components/list-item';\nexport { ListItem } from './components/list-item';\nexport type { MenuAction, MenuActionIntent, MenuItem, MenuProps } from './components/menu';\nexport { Menu } from './components/menu';\nexport type { ModalProps } from './components/modal';\nexport { Modal } from './components/modal';\nexport type { SwitchProps } from './components/switch';\nexport { Switch } from './components/switch';\nexport type { TabListProps, TabPanelProps, TabProps, TabsProps } from './components/tabs';\nexport { Tab, TabList, TabPanel, Tabs } from './components/tabs';\nexport type { TextareaProps } from './components/textarea';\nexport { Textarea } from './components/textarea';\nexport type { ToastOptions, ToastProps, ToastStatus } from './components/toast';\nexport { Toast, ToastProvider, useToast } from './components/toast';\nexport type { TooltipProps } from './components/tooltip';\nexport { Tooltip } from './components/tooltip';\nexport type { FontRuntime } from './context/FontContext';\nexport { FontProvider, useFontContext } from './context/FontContext';\nexport type { I18nInstance, TranslationRuntime, Translator } from './context/TranslationContext';\nexport { TranslationProvider, useTranslationContext } from './context/TranslationContext';\nexport * from './core/responsive';\nexport type {\n AccordionContentProps,\n AccordionItemProps,\n AccordionMode,\n AccordionMultipleProps,\n AccordionProps,\n AccordionSingleProps,\n AccordionTriggerProps,\n} from './features/accordion/public';\nexport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from './features/accordion/public';\nexport type { BadgeProps } from './features/badge/public';\nexport { Badge } from './features/badge/public';\nexport type { ButtonIconSpec, ButtonProps, IconButtonProps } from './features/button/public';\nexport { Button, IconButton } from './features/button/public';\nexport type { CardProps } from './features/card/public';\nexport { Card } from './features/card/public';\nexport type { CheckboxProps } from './features/form/checkbox/public';\nexport { Checkbox } from './features/form/checkbox/public';\nexport type { RadioProps } from './features/form/radio/public';\nexport { Radio } from './features/form/radio/public';\nexport type { TextInputProps } from './features/form/text-input/public';\nexport { TextInput } from './features/form/text-input/public';\nexport type {\n FontIconSource,\n IconProps,\n IconProvider,\n IconSource,\n IconVariant,\n SvgIconSource,\n} from './features/icon/public';\nexport { Icon, SUPPORTED_ICON_PROVIDERS } from './features/icon/public';\nexport type { ImageFit, ImageProps, SurfaceImageSource } from './features/image/public';\nexport { Image } from './features/image/public';\nexport type {\n KeyboardAvoidingViewBehavior,\n KeyboardAvoidingViewProps,\n} from './features/keyboard-avoiding-view/public';\nexport { KeyboardAvoidingView } from './features/keyboard-avoiding-view/public';\nexport type {\n BoxProps,\n ContainerProps,\n DividerProps,\n GridProps,\n StackProps,\n} from './features/layout/public';\nexport { Box, Container, Divider, Grid, Stack } from './features/layout/public';\nexport type { SurfaceProps, SurfaceVariant } from './features/surface/public';\nexport { Surface } from './features/surface/public';\nexport type { HeadingLevel, HeadingProps, TextProps } from './features/typography/public';\nexport { Heading, Text } from './features/typography/public';\nexport type { InteractionPolicy, InteractionPolicyProps } from './interactionPolicy';\nexport * from './layout';\nexport type { ButtonBaseProps } from './primitives/button-base';\nexport { ButtonBase } from './primitives/button-base';\nexport type {\n SurfaceColor,\n SurfaceEmphasis,\n SurfacePaletteColor,\n SurfaceStatusColor,\n} from './surfaceColor';\nexport {\n SURFACE_COLORS,\n SURFACE_EMPHASES,\n SURFACE_PALETTE_COLORS,\n SURFACE_STATUS_COLORS,\n} from './surfaceColor';\nexport * from './theme';\nexport { isDeepEqual } from './utils/deepEqual';\nexport { deepMerge } from './utils/deepMerge';\n"]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type React from 'react';
|
|
2
|
+
import type { PressableProps, ViewProps } from 'react-native';
|
|
3
|
+
import type { InteractionPolicy, InteractionPolicyProps } from '../interactionPolicy';
|
|
4
|
+
export type AccordionMode = 'single' | 'multiple';
|
|
5
|
+
interface AccordionBaseProps extends Omit<ViewProps, 'children'>, InteractionPolicyProps {
|
|
6
|
+
children?: React.ReactNode;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface AccordionSingleProps extends AccordionBaseProps {
|
|
10
|
+
type?: 'single';
|
|
11
|
+
value?: string;
|
|
12
|
+
defaultValue?: string;
|
|
13
|
+
onValueChange?: (value: string | undefined) => void;
|
|
14
|
+
collapsible?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface AccordionMultipleProps extends AccordionBaseProps {
|
|
17
|
+
type: 'multiple';
|
|
18
|
+
value?: readonly string[];
|
|
19
|
+
defaultValue?: readonly string[];
|
|
20
|
+
onValueChange?: (value: readonly string[]) => void;
|
|
21
|
+
collapsible?: never;
|
|
22
|
+
}
|
|
23
|
+
export type AccordionProps = AccordionSingleProps | AccordionMultipleProps;
|
|
24
|
+
export interface AccordionItemProps extends Omit<ViewProps, 'children'>, InteractionPolicyProps {
|
|
25
|
+
value: string;
|
|
26
|
+
children?: React.ReactNode;
|
|
27
|
+
disabled?: boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface AccordionTriggerProps extends Omit<PressableProps, 'accessibilityRole' | 'accessibilityState' | 'children' | 'disabled' | 'onPress'>, InteractionPolicyProps {
|
|
30
|
+
children?: PressableProps['children'];
|
|
31
|
+
disabled?: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface AccordionContentProps extends Omit<ViewProps, 'children'> {
|
|
34
|
+
children?: React.ReactNode;
|
|
35
|
+
forceMount?: boolean;
|
|
36
|
+
}
|
|
37
|
+
export interface AccordionContextValue {
|
|
38
|
+
disabled: boolean;
|
|
39
|
+
interactionPolicy: InteractionPolicy;
|
|
40
|
+
mode: AccordionMode;
|
|
41
|
+
openValues: readonly string[];
|
|
42
|
+
toggleValue: (value: string) => void;
|
|
43
|
+
}
|
|
44
|
+
export interface AccordionItemContextValue {
|
|
45
|
+
contentId: string;
|
|
46
|
+
disabled: boolean;
|
|
47
|
+
interactionPolicy: InteractionPolicy;
|
|
48
|
+
open: boolean;
|
|
49
|
+
toggle: () => void;
|
|
50
|
+
triggerId: string;
|
|
51
|
+
value: string;
|
|
52
|
+
}
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=accordion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accordion.d.ts","sourceRoot":"","sources":["../../src/types/accordion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEtF,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,UAAU,CAAC;AAElD,UAAU,kBAAmB,SAAQ,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,sBAAsB;IACtF,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,oBAAqB,SAAQ,kBAAkB;IAC9D,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACpD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,sBAAuB,SAAQ,kBAAkB;IAChE,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,CAAC;IACnD,WAAW,CAAC,EAAE,KAAK,CAAC;CACrB;AAED,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG,sBAAsB,CAAC;AAE3E,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,sBAAsB;IAC7F,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,qBACf,SACE,IAAI,CACF,cAAc,EACd,mBAAmB,GAAG,oBAAoB,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CACjF,EACD,sBAAsB;IACxB,QAAQ,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;IACxE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accordion.js","sourceRoot":"","sources":["../../src/types/accordion.ts"],"names":[],"mappings":"","sourcesContent":["import type React from 'react';\nimport type { PressableProps, ViewProps } from 'react-native';\n\nimport type { InteractionPolicy, InteractionPolicyProps } from '../interactionPolicy';\n\nexport type AccordionMode = 'single' | 'multiple';\n\ninterface AccordionBaseProps extends Omit<ViewProps, 'children'>, InteractionPolicyProps {\n children?: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface AccordionSingleProps extends AccordionBaseProps {\n type?: 'single';\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string | undefined) => void;\n collapsible?: boolean;\n}\n\nexport interface AccordionMultipleProps extends AccordionBaseProps {\n type: 'multiple';\n value?: readonly string[];\n defaultValue?: readonly string[];\n onValueChange?: (value: readonly string[]) => void;\n collapsible?: never;\n}\n\nexport type AccordionProps = AccordionSingleProps | AccordionMultipleProps;\n\nexport interface AccordionItemProps extends Omit<ViewProps, 'children'>, InteractionPolicyProps {\n value: string;\n children?: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface AccordionTriggerProps\n extends\n Omit<\n PressableProps,\n 'accessibilityRole' | 'accessibilityState' | 'children' | 'disabled' | 'onPress'\n >,\n InteractionPolicyProps {\n children?: PressableProps['children'];\n disabled?: boolean;\n}\n\nexport interface AccordionContentProps extends Omit<ViewProps, 'children'> {\n children?: React.ReactNode;\n forceMount?: boolean;\n}\n\nexport interface AccordionContextValue {\n disabled: boolean;\n interactionPolicy: InteractionPolicy;\n mode: AccordionMode;\n openValues: readonly string[];\n toggleValue: (value: string) => void;\n}\n\nexport interface AccordionItemContextValue {\n contentId: string;\n disabled: boolean;\n interactionPolicy: InteractionPolicy;\n open: boolean;\n toggle: () => void;\n triggerId: string;\n value: string;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View } from 'react-native';
|
|
3
|
+
|
|
4
|
+
import type {
|
|
5
|
+
AccordionMode,
|
|
6
|
+
AccordionMultipleProps,
|
|
7
|
+
AccordionProps,
|
|
8
|
+
AccordionSingleProps,
|
|
9
|
+
} from '../../../../types/accordion';
|
|
10
|
+
import { resolveAccordionToggle } from '../../utils/resolveAccordionToggle';
|
|
11
|
+
import { AccordionContext } from './AccordionContext';
|
|
12
|
+
|
|
13
|
+
/*** Coordinates controlled or uncontrolled accordion expansion state. */
|
|
14
|
+
export function Accordion(props: AccordionProps) {
|
|
15
|
+
const {
|
|
16
|
+
children,
|
|
17
|
+
collapsible = false,
|
|
18
|
+
defaultValue,
|
|
19
|
+
disabled = false,
|
|
20
|
+
interactionPolicy = 'enabled',
|
|
21
|
+
onValueChange: _onValueChange,
|
|
22
|
+
type = 'single',
|
|
23
|
+
value,
|
|
24
|
+
...viewProps
|
|
25
|
+
} = props;
|
|
26
|
+
const [uncontrolledValues, setUncontrolledValues] = React.useState<readonly string[]>(() =>
|
|
27
|
+
normalizeAccordionValues(type, defaultValue),
|
|
28
|
+
);
|
|
29
|
+
const controlled = value !== undefined;
|
|
30
|
+
const openValues = controlled ? normalizeAccordionValues(type, value) : uncontrolledValues;
|
|
31
|
+
|
|
32
|
+
const toggleValue = React.useCallback(
|
|
33
|
+
(itemValue: string) => {
|
|
34
|
+
if (disabled || interactionPolicy === 'passive') return;
|
|
35
|
+
|
|
36
|
+
const nextValues = resolveAccordionToggle({
|
|
37
|
+
collapsible,
|
|
38
|
+
mode: type,
|
|
39
|
+
openValues,
|
|
40
|
+
value: itemValue,
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
if (!controlled) setUncontrolledValues(nextValues);
|
|
44
|
+
notifyValueChange(props, nextValues);
|
|
45
|
+
},
|
|
46
|
+
[collapsible, controlled, disabled, interactionPolicy, openValues, props, type],
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
const contextValue = React.useMemo(
|
|
50
|
+
() => ({ disabled, interactionPolicy, mode: type, openValues, toggleValue }),
|
|
51
|
+
[disabled, interactionPolicy, openValues, toggleValue, type],
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
return (
|
|
55
|
+
<AccordionContext.Provider value={contextValue}>
|
|
56
|
+
<View {...viewProps}>{children}</View>
|
|
57
|
+
</AccordionContext.Provider>
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/*** Normalizes the public single/multiple value shapes for internal state. */
|
|
62
|
+
function normalizeAccordionValues(
|
|
63
|
+
mode: AccordionMode,
|
|
64
|
+
value: string | readonly string[] | undefined,
|
|
65
|
+
): readonly string[] {
|
|
66
|
+
if (mode === 'multiple') {
|
|
67
|
+
return typeof value === 'string' || value === undefined ? [] : value;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return typeof value === 'string' ? [value] : [];
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/*** Emits the public value shape matching the configured accordion mode. */
|
|
74
|
+
function notifyValueChange(props: AccordionProps, values: readonly string[]) {
|
|
75
|
+
if (props.type === 'multiple') {
|
|
76
|
+
const multipleProps: AccordionMultipleProps = props;
|
|
77
|
+
multipleProps.onValueChange?.(values);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const singleProps: AccordionSingleProps = props;
|
|
82
|
+
singleProps.onValueChange?.(values[0]);
|
|
83
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View, type ViewStyle } from 'react-native';
|
|
3
|
+
|
|
4
|
+
import type { AccordionContentProps } from '../../../../types/accordion';
|
|
5
|
+
import { AccordionItemContext } from './AccordionItemContext';
|
|
6
|
+
|
|
7
|
+
/*** Renders an accordion item's content when expanded or force-mounted. */
|
|
8
|
+
export function AccordionContent({
|
|
9
|
+
children,
|
|
10
|
+
forceMount = false,
|
|
11
|
+
style,
|
|
12
|
+
...viewProps
|
|
13
|
+
}: AccordionContentProps) {
|
|
14
|
+
const item = React.useContext(AccordionItemContext);
|
|
15
|
+
if (!item) throw new Error('AccordionContent must be rendered inside AccordionItem.');
|
|
16
|
+
if (!item.open && !forceMount) return null;
|
|
17
|
+
|
|
18
|
+
return (
|
|
19
|
+
<View
|
|
20
|
+
{...viewProps}
|
|
21
|
+
accessibilityLabelledBy={item.triggerId}
|
|
22
|
+
nativeID={item.contentId}
|
|
23
|
+
style={[!item.open ? hiddenContentStyle : undefined, style]}
|
|
24
|
+
>
|
|
25
|
+
{children}
|
|
26
|
+
</View>
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const hiddenContentStyle: ViewStyle = { display: 'none' };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View } from 'react-native';
|
|
3
|
+
|
|
4
|
+
import type { AccordionItemProps } from '../../../../types/accordion';
|
|
5
|
+
import { AccordionContext } from './AccordionContext';
|
|
6
|
+
import { AccordionItemContext } from './AccordionItemContext';
|
|
7
|
+
|
|
8
|
+
/*** Provides one accordion item's value, state, and trigger/content identifiers. */
|
|
9
|
+
export function AccordionItem({
|
|
10
|
+
children,
|
|
11
|
+
disabled = false,
|
|
12
|
+
interactionPolicy,
|
|
13
|
+
value,
|
|
14
|
+
...viewProps
|
|
15
|
+
}: AccordionItemProps) {
|
|
16
|
+
const accordion = React.useContext(AccordionContext);
|
|
17
|
+
if (!accordion) throw new Error('AccordionItem must be rendered inside Accordion.');
|
|
18
|
+
|
|
19
|
+
const reactId = React.useId();
|
|
20
|
+
const resolvedDisabled = accordion.disabled || disabled;
|
|
21
|
+
const resolvedInteractionPolicy = interactionPolicy ?? accordion.interactionPolicy;
|
|
22
|
+
const open = accordion.openValues.includes(value);
|
|
23
|
+
const toggle = React.useCallback(() => accordion.toggleValue(value), [accordion, value]);
|
|
24
|
+
const contextValue = React.useMemo(
|
|
25
|
+
() => ({
|
|
26
|
+
contentId: `accordion-${reactId}-content`,
|
|
27
|
+
disabled: resolvedDisabled,
|
|
28
|
+
interactionPolicy: resolvedInteractionPolicy,
|
|
29
|
+
open,
|
|
30
|
+
toggle,
|
|
31
|
+
triggerId: `accordion-${reactId}-trigger`,
|
|
32
|
+
value,
|
|
33
|
+
}),
|
|
34
|
+
[open, reactId, resolvedDisabled, resolvedInteractionPolicy, toggle, value],
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
return (
|
|
38
|
+
<AccordionItemContext.Provider value={contextValue}>
|
|
39
|
+
<View {...viewProps}>{children}</View>
|
|
40
|
+
</AccordionItemContext.Provider>
|
|
41
|
+
);
|
|
42
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Pressable, View } from 'react-native';
|
|
3
|
+
|
|
4
|
+
import type { AccordionTriggerProps } from '../../../../types/accordion';
|
|
5
|
+
import { AccordionItemContext } from './AccordionItemContext';
|
|
6
|
+
|
|
7
|
+
/*** Renders the accessible button that toggles its owning accordion item. */
|
|
8
|
+
export function AccordionTrigger({
|
|
9
|
+
children,
|
|
10
|
+
disabled = false,
|
|
11
|
+
interactionPolicy,
|
|
12
|
+
...pressableProps
|
|
13
|
+
}: AccordionTriggerProps) {
|
|
14
|
+
const item = React.useContext(AccordionItemContext);
|
|
15
|
+
if (!item) throw new Error('AccordionTrigger must be rendered inside AccordionItem.');
|
|
16
|
+
|
|
17
|
+
const resolvedDisabled = item.disabled || disabled;
|
|
18
|
+
const resolvedInteractionPolicy = interactionPolicy ?? item.interactionPolicy;
|
|
19
|
+
|
|
20
|
+
return (
|
|
21
|
+
<View accessibilityRole="header">
|
|
22
|
+
<Pressable
|
|
23
|
+
{...pressableProps}
|
|
24
|
+
accessibilityRole="button"
|
|
25
|
+
accessibilityState={{ disabled: resolvedDisabled, expanded: item.open }}
|
|
26
|
+
disabled={resolvedDisabled}
|
|
27
|
+
nativeID={item.triggerId}
|
|
28
|
+
onPress={resolvedInteractionPolicy === 'passive' ? undefined : item.toggle}
|
|
29
|
+
>
|
|
30
|
+
{children}
|
|
31
|
+
</Pressable>
|
|
32
|
+
</View>
|
|
33
|
+
);
|
|
34
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type {
|
|
2
|
+
AccordionContentProps,
|
|
3
|
+
AccordionItemProps,
|
|
4
|
+
AccordionMode,
|
|
5
|
+
AccordionMultipleProps,
|
|
6
|
+
AccordionProps,
|
|
7
|
+
AccordionSingleProps,
|
|
8
|
+
AccordionTriggerProps,
|
|
9
|
+
} from '../../types/accordion';
|
|
10
|
+
export { Accordion } from './adapters/inbound/Accordion';
|
|
11
|
+
export { AccordionContent } from './adapters/inbound/AccordionContent';
|
|
12
|
+
export { AccordionItem } from './adapters/inbound/AccordionItem';
|
|
13
|
+
export { AccordionTrigger } from './adapters/inbound/AccordionTrigger';
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { describe, expect, test } from 'bun:test';
|
|
2
|
+
|
|
3
|
+
import { resolveAccordionToggle } from './resolveAccordionToggle';
|
|
4
|
+
|
|
5
|
+
describe('resolveAccordionToggle', () => {
|
|
6
|
+
test('opens one value in single mode', () => {
|
|
7
|
+
expect(
|
|
8
|
+
resolveAccordionToggle({
|
|
9
|
+
collapsible: false,
|
|
10
|
+
mode: 'single',
|
|
11
|
+
openValues: ['general'],
|
|
12
|
+
value: 'appearance',
|
|
13
|
+
}),
|
|
14
|
+
).toEqual(['appearance']);
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
test('keeps the active value open when single mode is not collapsible', () => {
|
|
18
|
+
const openValues = ['general'] as const;
|
|
19
|
+
expect(
|
|
20
|
+
resolveAccordionToggle({
|
|
21
|
+
collapsible: false,
|
|
22
|
+
mode: 'single',
|
|
23
|
+
openValues,
|
|
24
|
+
value: 'general',
|
|
25
|
+
}),
|
|
26
|
+
).toBe(openValues);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
test('closes the active value when single mode is collapsible', () => {
|
|
30
|
+
expect(
|
|
31
|
+
resolveAccordionToggle({
|
|
32
|
+
collapsible: true,
|
|
33
|
+
mode: 'single',
|
|
34
|
+
openValues: ['general'],
|
|
35
|
+
value: 'general',
|
|
36
|
+
}),
|
|
37
|
+
).toEqual([]);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
test('adds and removes values independently in multiple mode', () => {
|
|
41
|
+
const opened = resolveAccordionToggle({
|
|
42
|
+
collapsible: false,
|
|
43
|
+
mode: 'multiple',
|
|
44
|
+
openValues: ['general'],
|
|
45
|
+
value: 'appearance',
|
|
46
|
+
});
|
|
47
|
+
expect(opened).toEqual(['general', 'appearance']);
|
|
48
|
+
expect(
|
|
49
|
+
resolveAccordionToggle({
|
|
50
|
+
collapsible: false,
|
|
51
|
+
mode: 'multiple',
|
|
52
|
+
openValues: opened,
|
|
53
|
+
value: 'general',
|
|
54
|
+
}),
|
|
55
|
+
).toEqual(['appearance']);
|
|
56
|
+
});
|
|
57
|
+
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { AccordionMode } from '../../../types/accordion';
|
|
2
|
+
|
|
3
|
+
/*** Resolves the next immutable set of open accordion item values. */
|
|
4
|
+
export function resolveAccordionToggle({
|
|
5
|
+
collapsible,
|
|
6
|
+
mode,
|
|
7
|
+
openValues,
|
|
8
|
+
value,
|
|
9
|
+
}: ResolveAccordionToggleInput): readonly string[] {
|
|
10
|
+
if (mode === 'multiple') {
|
|
11
|
+
return openValues.includes(value)
|
|
12
|
+
? openValues.filter((openValue) => openValue !== value)
|
|
13
|
+
: [...openValues, value];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
if (openValues.includes(value)) {
|
|
17
|
+
return collapsible ? [] : openValues;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return [value];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
interface ResolveAccordionToggleInput {
|
|
24
|
+
collapsible: boolean;
|
|
25
|
+
mode: AccordionMode;
|
|
26
|
+
openValues: readonly string[];
|
|
27
|
+
value: string;
|
|
28
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -25,6 +25,21 @@ export { FontProvider, useFontContext } from './context/FontContext';
|
|
|
25
25
|
export type { I18nInstance, TranslationRuntime, Translator } from './context/TranslationContext';
|
|
26
26
|
export { TranslationProvider, useTranslationContext } from './context/TranslationContext';
|
|
27
27
|
export * from './core/responsive';
|
|
28
|
+
export type {
|
|
29
|
+
AccordionContentProps,
|
|
30
|
+
AccordionItemProps,
|
|
31
|
+
AccordionMode,
|
|
32
|
+
AccordionMultipleProps,
|
|
33
|
+
AccordionProps,
|
|
34
|
+
AccordionSingleProps,
|
|
35
|
+
AccordionTriggerProps,
|
|
36
|
+
} from './features/accordion/public';
|
|
37
|
+
export {
|
|
38
|
+
Accordion,
|
|
39
|
+
AccordionContent,
|
|
40
|
+
AccordionItem,
|
|
41
|
+
AccordionTrigger,
|
|
42
|
+
} from './features/accordion/public';
|
|
28
43
|
export type { BadgeProps } from './features/badge/public';
|
|
29
44
|
export { Badge } from './features/badge/public';
|
|
30
45
|
export type { ButtonIconSpec, ButtonProps, IconButtonProps } from './features/button/public';
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type React from 'react';
|
|
2
|
+
import type { PressableProps, ViewProps } from 'react-native';
|
|
3
|
+
|
|
4
|
+
import type { InteractionPolicy, InteractionPolicyProps } from '../interactionPolicy';
|
|
5
|
+
|
|
6
|
+
export type AccordionMode = 'single' | 'multiple';
|
|
7
|
+
|
|
8
|
+
interface AccordionBaseProps extends Omit<ViewProps, 'children'>, InteractionPolicyProps {
|
|
9
|
+
children?: React.ReactNode;
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface AccordionSingleProps extends AccordionBaseProps {
|
|
14
|
+
type?: 'single';
|
|
15
|
+
value?: string;
|
|
16
|
+
defaultValue?: string;
|
|
17
|
+
onValueChange?: (value: string | undefined) => void;
|
|
18
|
+
collapsible?: boolean;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface AccordionMultipleProps extends AccordionBaseProps {
|
|
22
|
+
type: 'multiple';
|
|
23
|
+
value?: readonly string[];
|
|
24
|
+
defaultValue?: readonly string[];
|
|
25
|
+
onValueChange?: (value: readonly string[]) => void;
|
|
26
|
+
collapsible?: never;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export type AccordionProps = AccordionSingleProps | AccordionMultipleProps;
|
|
30
|
+
|
|
31
|
+
export interface AccordionItemProps extends Omit<ViewProps, 'children'>, InteractionPolicyProps {
|
|
32
|
+
value: string;
|
|
33
|
+
children?: React.ReactNode;
|
|
34
|
+
disabled?: boolean;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface AccordionTriggerProps
|
|
38
|
+
extends
|
|
39
|
+
Omit<
|
|
40
|
+
PressableProps,
|
|
41
|
+
'accessibilityRole' | 'accessibilityState' | 'children' | 'disabled' | 'onPress'
|
|
42
|
+
>,
|
|
43
|
+
InteractionPolicyProps {
|
|
44
|
+
children?: PressableProps['children'];
|
|
45
|
+
disabled?: boolean;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface AccordionContentProps extends Omit<ViewProps, 'children'> {
|
|
49
|
+
children?: React.ReactNode;
|
|
50
|
+
forceMount?: boolean;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export interface AccordionContextValue {
|
|
54
|
+
disabled: boolean;
|
|
55
|
+
interactionPolicy: InteractionPolicy;
|
|
56
|
+
mode: AccordionMode;
|
|
57
|
+
openValues: readonly string[];
|
|
58
|
+
toggleValue: (value: string) => void;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export interface AccordionItemContextValue {
|
|
62
|
+
contentId: string;
|
|
63
|
+
disabled: boolean;
|
|
64
|
+
interactionPolicy: InteractionPolicy;
|
|
65
|
+
open: boolean;
|
|
66
|
+
toggle: () => void;
|
|
67
|
+
triggerId: string;
|
|
68
|
+
value: string;
|
|
69
|
+
}
|