2023-03-01 12:02:31 +00:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* Tree is used to display hierarchical data.
|
|
|
|
*
|
|
|
|
* [Live Demo](https://www.primevue.org/tree/)
|
|
|
|
*
|
|
|
|
* @module tree
|
|
|
|
*
|
|
|
|
*/
|
2023-03-07 13:40:44 +00:00
|
|
|
import { VNode } from 'vue';
|
2023-07-06 11:17:08 +00:00
|
|
|
import { ComponentHooks } from '../basecomponent';
|
2023-08-17 23:51:01 +00:00
|
|
|
import { ClassComponent, GlobalComponentConstructor, PTOptions } from '../ts-helpers';
|
2022-09-06 12:03:37 +00:00
|
|
|
|
2023-07-11 22:42:43 +00:00
|
|
|
export declare type TreePassThroughOptionType = TreePassThroughAttributes | ((options: TreePassThroughMethodOptions) => TreePassThroughAttributes | string) | string | null | undefined;
|
2023-05-07 19:21:37 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Custom passthrough(pt) option method.
|
|
|
|
*/
|
|
|
|
export interface TreePassThroughMethodOptions {
|
2023-09-05 06:50:04 +00:00
|
|
|
/**
|
|
|
|
* Defines instance.
|
|
|
|
*/
|
2023-07-06 12:01:33 +00:00
|
|
|
instance: any;
|
2023-09-05 06:50:04 +00:00
|
|
|
/**
|
|
|
|
* Defines valid properties.
|
|
|
|
*/
|
2023-05-07 19:21:37 +00:00
|
|
|
props: TreeProps;
|
2023-09-05 06:50:04 +00:00
|
|
|
/**
|
|
|
|
* Defines current inline state.
|
|
|
|
*/
|
2023-05-07 19:21:37 +00:00
|
|
|
state: TreeState;
|
2023-09-05 06:50:04 +00:00
|
|
|
/**
|
|
|
|
* Defines current options.
|
|
|
|
*/
|
2023-05-07 19:25:05 +00:00
|
|
|
context: TreeContext;
|
2023-05-07 19:21:37 +00:00
|
|
|
}
|
|
|
|
|
2023-03-01 12:02:31 +00:00
|
|
|
/**
|
|
|
|
* Custom TreeNode metadata.
|
|
|
|
*/
|
2022-09-06 12:03:37 +00:00
|
|
|
export interface TreeNode {
|
|
|
|
/**
|
|
|
|
* Mandatory unique key of the node.
|
|
|
|
*/
|
|
|
|
key?: string;
|
|
|
|
/**
|
|
|
|
* Label of the node.
|
|
|
|
*/
|
|
|
|
label?: string;
|
|
|
|
/**
|
|
|
|
* Data represented by the node.
|
|
|
|
*/
|
|
|
|
data?: any;
|
|
|
|
/**
|
|
|
|
* Type of the node to match a template.
|
|
|
|
*/
|
|
|
|
type?: string;
|
|
|
|
/**
|
|
|
|
* Icon of the node to display next to content.
|
|
|
|
*/
|
|
|
|
icon?: string;
|
|
|
|
/**
|
|
|
|
* An array of treenodes as children.
|
|
|
|
*/
|
|
|
|
children?: TreeNode[];
|
|
|
|
/**
|
|
|
|
* Inline style of the node.
|
|
|
|
*/
|
|
|
|
style?: any;
|
|
|
|
/**
|
|
|
|
* Style class of the node.
|
|
|
|
*/
|
|
|
|
styleClass?: string;
|
|
|
|
/**
|
|
|
|
* Whether the node is selectable when selection mode is enabled.
|
2023-03-10 14:00:58 +00:00
|
|
|
* @defaultValue false
|
2022-09-06 12:03:37 +00:00
|
|
|
*/
|
|
|
|
selectable?: boolean;
|
|
|
|
/**
|
|
|
|
* Specifies if the node has children. Used in lazy loading.
|
2023-03-10 14:00:58 +00:00
|
|
|
* @defaultValue false
|
2022-09-06 12:03:37 +00:00
|
|
|
*/
|
|
|
|
leaf?: boolean;
|
|
|
|
/**
|
|
|
|
* Optional
|
|
|
|
*/
|
|
|
|
[key: string]: any;
|
2022-12-08 11:04:25 +00:00
|
|
|
/**
|
|
|
|
* Icon to use in expanded state.
|
|
|
|
*/
|
|
|
|
expandedIcon?: string;
|
|
|
|
/**
|
|
|
|
* Icon to use in collapsed state.
|
|
|
|
*/
|
|
|
|
collapsedIcon?: string;
|
2022-09-06 12:03:37 +00:00
|
|
|
}
|
|
|
|
|
2023-03-01 12:02:31 +00:00
|
|
|
/**
|
|
|
|
* Custom expanded keys metadata.
|
|
|
|
*/
|
2022-09-06 12:03:37 +00:00
|
|
|
export interface TreeExpandedKeys {
|
|
|
|
/**
|
|
|
|
* Optional
|
|
|
|
*/
|
|
|
|
[key: string]: any;
|
|
|
|
}
|
|
|
|
|
2023-03-01 12:02:31 +00:00
|
|
|
/**
|
|
|
|
* Custom selection keys metadata.
|
|
|
|
*/
|
2022-09-06 12:03:37 +00:00
|
|
|
export interface TreeSelectionKeys {
|
|
|
|
/**
|
|
|
|
* Optional
|
|
|
|
*/
|
|
|
|
[key: string]: any;
|
|
|
|
}
|
|
|
|
|
2023-05-07 19:21:37 +00:00
|
|
|
/**
|
|
|
|
* Custom passthrough(pt) options.
|
|
|
|
* @see {@link TreeProps.pt}
|
|
|
|
*/
|
|
|
|
export interface TreePassThroughOptions {
|
|
|
|
/**
|
2023-08-01 14:01:12 +00:00
|
|
|
* Used to pass attributes to the root's DOM element.
|
2023-05-07 19:21:37 +00:00
|
|
|
*/
|
|
|
|
root?: TreePassThroughOptionType;
|
|
|
|
/**
|
2023-08-01 14:01:12 +00:00
|
|
|
* Used to pass attributes to the filter container's DOM element.
|
2023-05-07 19:21:37 +00:00
|
|
|
*/
|
|
|
|
filterContainer?: TreePassThroughOptionType;
|
|
|
|
/**
|
2023-08-01 14:01:12 +00:00
|
|
|
* Used to pass attributes to the input's DOM element.
|
2023-05-07 19:21:37 +00:00
|
|
|
*/
|
|
|
|
input?: TreePassThroughOptionType;
|
|
|
|
/**
|
2023-08-01 14:01:12 +00:00
|
|
|
* Used to pass attributes to the search icon's DOM element.
|
2023-05-07 19:21:37 +00:00
|
|
|
*/
|
|
|
|
searchIcon?: TreePassThroughOptionType;
|
|
|
|
/**
|
2023-08-01 14:01:12 +00:00
|
|
|
* Used to pass attributes to the wrapper's DOM element.
|
2023-05-07 19:21:37 +00:00
|
|
|
*/
|
|
|
|
wrapper?: TreePassThroughOptionType;
|
|
|
|
/**
|
2023-08-01 14:01:12 +00:00
|
|
|
* Used to pass attributes to the container's DOM element.
|
2023-05-07 19:21:37 +00:00
|
|
|
*/
|
|
|
|
container?: TreePassThroughOptionType;
|
|
|
|
/**
|
2023-08-01 14:01:12 +00:00
|
|
|
* Used to pass attributes to the node's DOM element.
|
2023-05-07 19:21:37 +00:00
|
|
|
*/
|
|
|
|
node?: TreePassThroughOptionType;
|
|
|
|
/**
|
2023-08-01 14:01:12 +00:00
|
|
|
* Used to pass attributes to the content's DOM element.
|
2023-05-07 19:21:37 +00:00
|
|
|
*/
|
|
|
|
content?: TreePassThroughOptionType;
|
|
|
|
/**
|
2023-08-01 14:01:12 +00:00
|
|
|
* Used to pass attributes to the toggler's DOM element.
|
2023-05-07 19:21:37 +00:00
|
|
|
*/
|
|
|
|
toggler?: TreePassThroughOptionType;
|
|
|
|
/**
|
2023-08-01 14:01:12 +00:00
|
|
|
* Used to pass attributes to the toggler icon's DOM element.
|
2023-05-07 19:21:37 +00:00
|
|
|
*/
|
|
|
|
togglerIcon?: TreePassThroughOptionType;
|
|
|
|
/**
|
2023-08-01 14:01:12 +00:00
|
|
|
* Used to pass attributes to the checkbox container's DOM element.
|
2023-05-07 19:21:37 +00:00
|
|
|
*/
|
|
|
|
checkboxContainer?: TreePassThroughOptionType;
|
|
|
|
/**
|
2023-08-01 14:01:12 +00:00
|
|
|
* Used to pass attributes to the checkbox's DOM element.
|
2023-05-07 19:21:37 +00:00
|
|
|
*/
|
|
|
|
checkbox?: TreePassThroughOptionType;
|
|
|
|
/**
|
2023-08-01 14:01:12 +00:00
|
|
|
* Used to pass attributes to the checkbox icon's DOM element.
|
2023-05-07 19:21:37 +00:00
|
|
|
*/
|
|
|
|
checkboxIcon?: TreePassThroughOptionType;
|
|
|
|
/**
|
2023-08-01 14:01:12 +00:00
|
|
|
* Used to pass attributes to the node icon's DOM element.
|
2023-05-07 19:21:37 +00:00
|
|
|
*/
|
|
|
|
nodeIcon?: TreePassThroughOptionType;
|
|
|
|
/**
|
2023-08-01 14:01:12 +00:00
|
|
|
* Used to pass attributes to the label's DOM element.
|
2023-05-07 19:21:37 +00:00
|
|
|
*/
|
|
|
|
label?: TreePassThroughOptionType;
|
|
|
|
/**
|
2023-08-01 14:01:12 +00:00
|
|
|
* Used to pass attributes to the subgroup's DOM element.
|
2023-05-07 19:21:37 +00:00
|
|
|
*/
|
|
|
|
subgroup?: TreePassThroughOptionType;
|
2023-06-13 14:24:45 +00:00
|
|
|
/**
|
2023-08-01 14:01:12 +00:00
|
|
|
* Used to pass attributes to the loading overlay's DOM element.
|
2023-06-13 14:24:45 +00:00
|
|
|
*/
|
|
|
|
loadingOverlay?: TreePassThroughOptionType;
|
|
|
|
/**
|
2023-08-01 14:01:12 +00:00
|
|
|
* Used to pass attributes to the loading icon's DOM element.
|
2023-06-13 14:24:45 +00:00
|
|
|
*/
|
|
|
|
loadingIcon?: TreePassThroughOptionType;
|
2023-07-06 11:09:01 +00:00
|
|
|
/**
|
2023-08-01 14:01:12 +00:00
|
|
|
* Used to manage all lifecycle hooks
|
2023-07-06 11:09:01 +00:00
|
|
|
* @see {@link BaseComponent.ComponentHooks}
|
|
|
|
*/
|
|
|
|
hooks?: ComponentHooks;
|
2023-05-07 19:21:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Custom passthrough attributes for each DOM elements
|
|
|
|
*/
|
|
|
|
export interface TreePassThroughAttributes {
|
|
|
|
[key: string]: any;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Defines current inline state in Tree component.
|
|
|
|
*/
|
|
|
|
export interface TreeState {
|
|
|
|
/**
|
|
|
|
* Current expanded keys state.
|
|
|
|
*/
|
|
|
|
d_expandedKeys: TreeExpandedKeys;
|
|
|
|
/**
|
|
|
|
* Current filter value state as a string.
|
|
|
|
*/
|
|
|
|
filterValue: string;
|
|
|
|
}
|
|
|
|
|
2023-05-07 19:25:05 +00:00
|
|
|
/**
|
|
|
|
* Defines current options in Tree component.
|
|
|
|
*/
|
|
|
|
export interface TreeContext {
|
2023-07-19 12:57:15 +00:00
|
|
|
/**
|
|
|
|
* Index of the node.
|
|
|
|
*/
|
|
|
|
index: number;
|
2023-05-07 19:25:05 +00:00
|
|
|
/**
|
|
|
|
* Current expanded state of the node as a boolean.
|
|
|
|
* @defaultValue false
|
|
|
|
*/
|
|
|
|
expanded: boolean;
|
|
|
|
/**
|
|
|
|
* Current selected state of the node as a boolean.
|
|
|
|
* @defaultValue false
|
|
|
|
*/
|
|
|
|
selected: boolean;
|
|
|
|
/**
|
|
|
|
* Current checked state of the node as a boolean.
|
|
|
|
* @defaultValue false
|
|
|
|
*/
|
|
|
|
checked: boolean;
|
2023-07-19 12:57:15 +00:00
|
|
|
/**
|
|
|
|
* Current leaf state of the node as a boolean.
|
|
|
|
* @defaultValue false
|
|
|
|
*/
|
|
|
|
leaf: boolean;
|
2023-05-07 19:25:05 +00:00
|
|
|
}
|
|
|
|
|
2023-03-01 12:02:31 +00:00
|
|
|
/**
|
|
|
|
* Defines valid properties in Tree component.
|
|
|
|
*/
|
2022-09-06 12:03:37 +00:00
|
|
|
export interface TreeProps {
|
|
|
|
/**
|
|
|
|
* An array of treenodes.
|
|
|
|
*/
|
|
|
|
value?: TreeNode[] | undefined;
|
|
|
|
/**
|
|
|
|
* A map of keys to represent the expansion state in controlled mode.
|
|
|
|
*/
|
|
|
|
expandedKeys?: TreeExpandedKeys;
|
|
|
|
/**
|
|
|
|
* A map of keys to control the selection state.
|
|
|
|
*/
|
|
|
|
selectionKeys?: TreeSelectionKeys;
|
|
|
|
/**
|
|
|
|
* Defines the selection mode.
|
|
|
|
*/
|
2023-03-01 12:02:31 +00:00
|
|
|
selectionMode?: 'single' | 'multiple' | 'checkbox' | undefined;
|
2022-09-06 12:03:37 +00:00
|
|
|
/**
|
|
|
|
* Defines how multiple items can be selected, when true metaKey needs to be pressed to select or unselect an item and when set to false selection of each item can be toggled individually.
|
|
|
|
* On touch enabled devices, metaKeySelection is turned off automatically.
|
2023-03-01 12:02:31 +00:00
|
|
|
* @defaultValue true
|
2022-09-06 12:03:37 +00:00
|
|
|
*/
|
|
|
|
metaKeySelection?: boolean | undefined;
|
|
|
|
/**
|
|
|
|
* Whether to display loading indicator.
|
2023-03-01 12:02:31 +00:00
|
|
|
* @defaultValue false
|
2022-09-06 12:03:37 +00:00
|
|
|
*/
|
|
|
|
loading?: boolean | undefined;
|
|
|
|
/**
|
|
|
|
* Icon to display when tree is loading.
|
2023-04-18 10:51:10 +00:00
|
|
|
* @deprecated since v3.27.0. Use 'loadingicon' slot.
|
2022-09-06 12:03:37 +00:00
|
|
|
*/
|
|
|
|
loadingIcon?: string | undefined;
|
|
|
|
/**
|
|
|
|
* When specified, displays an input field to filter the items.
|
2023-03-10 14:00:58 +00:00
|
|
|
* @defaultValue false
|
2022-09-06 12:03:37 +00:00
|
|
|
*/
|
|
|
|
filter?: boolean | undefined;
|
|
|
|
/**
|
|
|
|
* When filtering is enabled, filterBy decides which field or fields (comma separated) to search against.
|
2023-03-08 10:51:52 +00:00
|
|
|
* @defaultValue label
|
2022-09-06 12:03:37 +00:00
|
|
|
*/
|
|
|
|
filterBy?: string | undefined;
|
|
|
|
/**
|
|
|
|
* Mode for filtering.
|
2023-03-08 10:51:52 +00:00
|
|
|
* @defaultValue lenient
|
2022-09-06 12:03:37 +00:00
|
|
|
*/
|
2023-03-01 12:02:31 +00:00
|
|
|
filterMode?: 'lenient' | 'strict' | undefined;
|
2022-09-06 12:03:37 +00:00
|
|
|
/**
|
|
|
|
* Placeholder text to show when filter input is empty.
|
|
|
|
*/
|
|
|
|
filterPlaceholder?: string | undefined;
|
|
|
|
/**
|
|
|
|
* Locale to use in filtering. The default locale is the host environment's current locale.
|
|
|
|
*/
|
|
|
|
filterLocale?: string | undefined;
|
|
|
|
/**
|
|
|
|
* Height of the scroll viewport in fixed units or the 'flex' keyword for a dynamic size.
|
|
|
|
*/
|
2023-03-01 12:02:31 +00:00
|
|
|
scrollHeight?: 'flex' | string | undefined;
|
2022-12-08 11:04:25 +00:00
|
|
|
/**
|
|
|
|
* Defines a string value that labels an interactive element.
|
|
|
|
*/
|
|
|
|
'aria-label'?: string | undefined;
|
|
|
|
/**
|
|
|
|
* Identifier of the underlying menu element.
|
|
|
|
*/
|
|
|
|
'aria-labelledby'?: string | undefined;
|
2023-05-07 19:21:37 +00:00
|
|
|
/**
|
2023-08-01 14:01:12 +00:00
|
|
|
* Used to pass attributes to DOM elements inside the component.
|
2023-05-07 19:21:37 +00:00
|
|
|
* @type {TreePassThroughOptions}
|
|
|
|
*/
|
2023-08-17 23:51:01 +00:00
|
|
|
pt?: PTOptions<TreePassThroughOptions>;
|
2023-05-26 11:22:08 +00:00
|
|
|
/**
|
|
|
|
* When enabled, it removes component related styles in the core.
|
|
|
|
* @defaultValue false
|
|
|
|
*/
|
|
|
|
unstyled?: boolean;
|
2022-09-06 12:03:37 +00:00
|
|
|
}
|
|
|
|
|
2023-03-01 12:02:31 +00:00
|
|
|
/**
|
|
|
|
* Defines valid slots in Tree component.
|
|
|
|
*/
|
2022-09-06 12:03:37 +00:00
|
|
|
export interface TreeSlots {
|
|
|
|
/**
|
2023-04-07 06:49:49 +00:00
|
|
|
* Custom loading icon template.
|
2023-08-17 07:16:25 +00:00
|
|
|
* @param {Object} scope - loadingicon slot's params.
|
2023-04-07 06:49:49 +00:00
|
|
|
*/
|
2023-05-26 11:22:08 +00:00
|
|
|
loadingicon(scope: {
|
|
|
|
/**
|
|
|
|
* Style class of the icon.
|
|
|
|
*/
|
|
|
|
class: string;
|
|
|
|
}): VNode[];
|
2023-04-07 06:49:49 +00:00
|
|
|
/**
|
|
|
|
* Custom search icon template.
|
2023-08-17 07:16:25 +00:00
|
|
|
* @param {Object} scope - searchicon slot's params.
|
2023-04-07 06:49:49 +00:00
|
|
|
*/
|
2023-05-26 11:22:08 +00:00
|
|
|
searchicon(scope: {
|
|
|
|
/**
|
|
|
|
* Style class of the icon.
|
|
|
|
*/
|
|
|
|
class: string;
|
|
|
|
}): VNode[];
|
2023-04-07 06:49:49 +00:00
|
|
|
/**
|
|
|
|
* Custom toggler icon template.
|
2023-08-17 07:16:25 +00:00
|
|
|
* @param {Object} scope - togglericon slot's params.
|
2023-03-01 12:02:31 +00:00
|
|
|
*/
|
2023-04-07 06:49:49 +00:00
|
|
|
togglericon(scope: {
|
2023-03-07 13:40:44 +00:00
|
|
|
/**
|
|
|
|
* Tree node instance
|
|
|
|
*/
|
|
|
|
node: TreeNode;
|
2023-04-07 06:49:49 +00:00
|
|
|
/**
|
|
|
|
* Expanded state of the node
|
|
|
|
*/
|
|
|
|
expanded: boolean;
|
|
|
|
}): VNode[];
|
|
|
|
/**
|
|
|
|
* Custom checkbox icon
|
2023-08-17 07:16:25 +00:00
|
|
|
* @param {Object} scope - checkboxicon slot's params.
|
2023-04-07 06:49:49 +00:00
|
|
|
*/
|
|
|
|
checkboxicon(scope: {
|
|
|
|
/**
|
|
|
|
* Check state of the node
|
|
|
|
*/
|
|
|
|
checked: boolean;
|
|
|
|
/**
|
|
|
|
* Partial check state of the node
|
|
|
|
*/
|
|
|
|
partialChecked: boolean;
|
|
|
|
}): VNode[];
|
|
|
|
/**
|
|
|
|
* Optional slots.
|
|
|
|
* @todo
|
|
|
|
*/
|
|
|
|
|
|
|
|
[key: string]: (node: any) => VNode[];
|
2022-09-06 12:03:37 +00:00
|
|
|
}
|
|
|
|
|
2023-03-01 12:02:31 +00:00
|
|
|
/**
|
|
|
|
* Defines valid slots in Tree component.
|
|
|
|
*/
|
|
|
|
export interface TreeEmits {
|
2022-09-06 12:03:37 +00:00
|
|
|
/**
|
|
|
|
* Emitted when the expanded keys change.
|
|
|
|
* @param {TreeNode} value - New expanded keys.
|
|
|
|
*/
|
2023-03-01 12:02:31 +00:00
|
|
|
'update:expandedKeys'(value: TreeExpandedKeys): void;
|
2022-09-06 12:03:37 +00:00
|
|
|
/**
|
2022-09-14 11:26:01 +00:00
|
|
|
* Emitted when the selection keys change.
|
|
|
|
* @param {TreeSelectionKeys} value - New selection keys.
|
|
|
|
*/
|
2023-03-01 12:02:31 +00:00
|
|
|
'update:selectionKeys'(event: TreeSelectionKeys): void;
|
2022-09-06 12:03:37 +00:00
|
|
|
/**
|
|
|
|
* Callback to invoke when a node is selected.
|
|
|
|
* @param {TreeNode} node - Node instance.
|
|
|
|
*/
|
2023-03-01 12:02:31 +00:00
|
|
|
'node-select'(node: TreeNode): void;
|
2022-09-06 12:03:37 +00:00
|
|
|
/**
|
|
|
|
* Callback to invoke when a node is unselected.
|
|
|
|
* @param {TreeNode} node - Node instance.
|
|
|
|
*/
|
2023-03-01 12:02:31 +00:00
|
|
|
'node-unselect'(node: TreeNode): void;
|
2022-09-06 12:03:37 +00:00
|
|
|
/**
|
|
|
|
* Callback to invoke when a node is expanded.
|
|
|
|
* @param {TreeNode} node - Node instance.
|
|
|
|
*/
|
2023-03-01 12:02:31 +00:00
|
|
|
'node-expand'(node: TreeNode): void;
|
2022-09-06 12:03:37 +00:00
|
|
|
/**
|
|
|
|
* Callback to invoke when a node is collapsed.
|
|
|
|
* @param {TreeNode} node - Node instance.
|
|
|
|
*/
|
2023-03-01 12:02:31 +00:00
|
|
|
'node-collapse'(node: TreeNode): void;
|
|
|
|
}
|
2022-09-06 12:03:37 +00:00
|
|
|
|
2023-03-01 12:02:31 +00:00
|
|
|
/**
|
|
|
|
* **PrimeVue - Tree**
|
|
|
|
*
|
|
|
|
* _Tree is used to display hierarchical data._
|
|
|
|
*
|
|
|
|
* [Live Demo](https://www.primevue.org/tree/)
|
|
|
|
* --- ---
|
|
|
|
* ![PrimeVue](https://primefaces.org/cdn/primevue/images/logo-100.png)
|
|
|
|
*
|
|
|
|
* @group Component
|
|
|
|
*/
|
2022-09-14 11:26:01 +00:00
|
|
|
declare class Tree extends ClassComponent<TreeProps, TreeSlots, TreeEmits> {}
|
2022-09-06 12:03:37 +00:00
|
|
|
|
|
|
|
declare module '@vue/runtime-core' {
|
|
|
|
interface GlobalComponents {
|
2022-09-14 11:26:01 +00:00
|
|
|
Tree: GlobalComponentConstructor<Tree>;
|
2022-09-06 12:03:37 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export default Tree;
|