@onereach/ui-components 3.0.1 → 3.0.2-beta.2475.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/bundled/v2/OrTree-ceaca23d.js +236 -0
  2. package/dist/bundled/v2/components/index.d.ts +1 -0
  3. package/dist/bundled/v2/components/index.js +1 -0
  4. package/dist/bundled/v2/components/or-tree-v3/OrTree.vue.d.ts +47 -0
  5. package/dist/bundled/v2/components/or-tree-v3/TreeNode.vue.d.ts +82 -0
  6. package/dist/bundled/v2/components/or-tree-v3/index.d.ts +2 -0
  7. package/dist/bundled/v2/components/or-tree-v3/index.js +17 -0
  8. package/dist/bundled/v2/components/or-tree-v3/styles.d.ts +1 -0
  9. package/dist/bundled/v2/components/or-tree-v3/types.d.ts +10 -0
  10. package/dist/bundled/v2/components/or-tree-v3/utils.d.ts +5 -0
  11. package/dist/bundled/v2/index.js +2 -1
  12. package/dist/bundled/v3/OrTree.vue_vue_type_script_lang-d25db1c4.js +146 -0
  13. package/dist/bundled/v3/components/index.d.ts +1 -0
  14. package/dist/bundled/v3/components/index.js +1 -0
  15. package/dist/bundled/v3/components/or-tree-v3/OrTree.vue.d.ts +47 -0
  16. package/dist/bundled/v3/components/or-tree-v3/TreeNode.vue.d.ts +82 -0
  17. package/dist/bundled/v3/components/or-tree-v3/index.d.ts +2 -0
  18. package/dist/bundled/v3/components/or-tree-v3/index.js +16 -0
  19. package/dist/bundled/v3/components/or-tree-v3/styles.d.ts +1 -0
  20. package/dist/bundled/v3/components/or-tree-v3/types.d.ts +10 -0
  21. package/dist/bundled/v3/components/or-tree-v3/utils.d.ts +5 -0
  22. package/dist/bundled/v3/index.js +137 -111
  23. package/dist/esm/v2/OrTree-8dc4a1a3.js +233 -0
  24. package/dist/esm/v2/components/index.d.ts +1 -0
  25. package/dist/esm/v2/components/index.js +1 -0
  26. package/dist/esm/v2/components/or-tree-v3/OrTree.vue.d.ts +47 -0
  27. package/dist/esm/v2/components/or-tree-v3/TreeNode.vue.d.ts +82 -0
  28. package/dist/esm/v2/components/or-tree-v3/index.d.ts +2 -0
  29. package/dist/esm/v2/components/or-tree-v3/index.js +15 -0
  30. package/dist/esm/v2/components/or-tree-v3/styles.d.ts +1 -0
  31. package/dist/esm/v2/components/or-tree-v3/types.d.ts +10 -0
  32. package/dist/esm/v2/components/or-tree-v3/utils.d.ts +5 -0
  33. package/dist/esm/v2/index.js +1 -0
  34. package/dist/esm/v3/OrTree-f4ee81ef.js +170 -0
  35. package/dist/esm/v3/components/index.d.ts +1 -0
  36. package/dist/esm/v3/components/index.js +1 -0
  37. package/dist/esm/v3/components/or-tree-v3/OrTree.vue.d.ts +47 -0
  38. package/dist/esm/v3/components/or-tree-v3/TreeNode.vue.d.ts +82 -0
  39. package/dist/esm/v3/components/or-tree-v3/index.d.ts +2 -0
  40. package/dist/esm/v3/components/or-tree-v3/index.js +14 -0
  41. package/dist/esm/v3/components/or-tree-v3/styles.d.ts +1 -0
  42. package/dist/esm/v3/components/or-tree-v3/types.d.ts +10 -0
  43. package/dist/esm/v3/components/or-tree-v3/utils.d.ts +5 -0
  44. package/dist/esm/v3/index.js +1 -0
  45. package/package.json +2 -3
  46. package/src/components/index.ts +1 -0
  47. package/src/components/or-tree-v3/OrTree.stories3.ts +104 -0
  48. package/src/components/or-tree-v3/OrTree.vue +85 -0
  49. package/src/components/or-tree-v3/TreeNode.vue +72 -0
  50. package/src/components/or-tree-v3/index.ts +2 -0
  51. package/src/components/or-tree-v3/styles.ts +13 -0
  52. package/src/components/or-tree-v3/types.ts +12 -0
  53. package/src/components/or-tree-v3/utils.ts +31 -0
@@ -0,0 +1,82 @@
1
+ import { PropType } from 'vue-demi';
2
+ import { ITreeNode } from './types';
3
+ declare const _default: import("vue").ComponentOptions<import("vue").default, import("@vue/composition-api").ShallowUnwrapRef<{
4
+ rootClasses: string[];
5
+ }> & import("@vue/composition-api").Data, {}, {
6
+ expandIcon(): "keyboard_arrow_down" | "arrow_right";
7
+ styleCSS(): {
8
+ 'padding-left': string;
9
+ };
10
+ }, {
11
+ node: {
12
+ type: PropType<ITreeNode>;
13
+ default: undefined;
14
+ };
15
+ nodeKey: {
16
+ type: StringConstructor;
17
+ default: string;
18
+ };
19
+ isExpanded: {
20
+ type: BooleanConstructor;
21
+ default: boolean;
22
+ };
23
+ isLeaf: {
24
+ type: BooleanConstructor;
25
+ default: boolean;
26
+ };
27
+ level: {
28
+ type: NumberConstructor;
29
+ default: number;
30
+ };
31
+ }, import("@vue/composition-api").ExtractPropTypes<{
32
+ node: {
33
+ type: PropType<ITreeNode>;
34
+ default: undefined;
35
+ };
36
+ nodeKey: {
37
+ type: StringConstructor;
38
+ default: string;
39
+ };
40
+ isExpanded: {
41
+ type: BooleanConstructor;
42
+ default: boolean;
43
+ };
44
+ isLeaf: {
45
+ type: BooleanConstructor;
46
+ default: boolean;
47
+ };
48
+ level: {
49
+ type: NumberConstructor;
50
+ default: number;
51
+ };
52
+ }>> & Omit<import("vue").VueConstructor<import("vue").default>, never> & (new (...args: any[]) => import("@vue/composition-api").ComponentRenderProxy<{
53
+ node: ITreeNode;
54
+ nodeKey: string;
55
+ isExpanded: boolean;
56
+ isLeaf: boolean;
57
+ level: number;
58
+ } & {} & {
59
+ [x: `on${Capitalize<string>}`]: ((...args: any[]) => any) | undefined;
60
+ }, import("@vue/composition-api").ShallowUnwrapRef<{
61
+ rootClasses: string[];
62
+ }>, import("@vue/composition-api").Data, {
63
+ expandIcon(): "keyboard_arrow_down" | "arrow_right";
64
+ styleCSS(): {
65
+ 'padding-left': string;
66
+ };
67
+ }, {}, {}, {}, string[], {
68
+ node: ITreeNode;
69
+ nodeKey: string;
70
+ isExpanded: boolean;
71
+ isLeaf: boolean;
72
+ level: number;
73
+ } & {} & {
74
+ [x: `on${Capitalize<string>}`]: ((...args: any[]) => any) | undefined;
75
+ }, {
76
+ node: ITreeNode;
77
+ nodeKey: string;
78
+ isExpanded: boolean;
79
+ isLeaf: boolean;
80
+ level: number;
81
+ }, true>);
82
+ export default _default;
@@ -0,0 +1,2 @@
1
+ export { default as OrTreeV3 } from './OrTree.vue';
2
+ export * from './types';
@@ -0,0 +1,14 @@
1
+ export { s as OrTreeV3 } from '../../OrTree-f4ee81ef.js';
2
+ import 'vue-demi';
3
+ import '../../OrIconButton-41ee266c.js';
4
+ import '../../OrIcon-62793572.js';
5
+ import 'vue';
6
+ import '../../OrTooltip-02f07fa2.js';
7
+ import '@vueuse/core';
8
+ import '../../OrPopover-52250a03.js';
9
+ import '@floating-ui/dom';
10
+ import '../../useElevation-92fce12c.js';
11
+ import '../../useResponsive-a02e95b7.js';
12
+ import '../../OrBottomSheet-0f24ecae.js';
13
+ import '../../OrOverlay-7cf03aea.js';
14
+ import '../../OrTeleport.vue3-8099178c.js';
@@ -0,0 +1 @@
1
+ export declare const TreeNodeRoot: string[];
@@ -0,0 +1,10 @@
1
+ export interface ITreeNode {
2
+ key: string;
3
+ isLeaf: boolean;
4
+ children?: ITreeNode[];
5
+ }
6
+ export interface ITreeNodeMetadata {
7
+ level: number;
8
+ isExpanded: boolean;
9
+ parentNodeKey: string;
10
+ }
@@ -0,0 +1,5 @@
1
+ import { ITreeNode, ITreeNodeMetadata } from './types';
2
+ export declare const getFlatTree: (tree: ITreeNode[]) => {
3
+ flatTree: ITreeNode[];
4
+ nodeMetadataByKey: Record<string, ITreeNodeMetadata>;
5
+ };
@@ -96,6 +96,7 @@ export { a as OrToastContainerV3, s as OrToastV3, t as TypesV3 } from './types-9
96
96
  export { p as PropsV3, a as useQueueV3, u as useToastV3 } from './useToast-0665462d.js';
97
97
  export { s as OrTooltip, a as OrTooltipContent } from './OrTooltip-8d7385bc.js';
98
98
  export { s as OrTooltipV3 } from './OrTooltip-02f07fa2.js';
99
+ export { s as OrTreeV3 } from './OrTree-f4ee81ef.js';
99
100
  export { D as DropdownClose, a as DropdownOpen } from './dropdown-open-0d314aa4.js';
100
101
  export { u as useControlAttributes, a as useIdAttribute } from './useIdAttribute-859439f0.js';
101
102
  export { u as useElevation } from './useElevation-92fce12c.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onereach/ui-components",
3
- "version": "3.0.1",
3
+ "version": "3.0.2-beta.2475.0",
4
4
  "description": "Vue components library for v2/3",
5
5
  "sideEffects": false,
6
6
  "main": "./dist/auto/index.js",
@@ -124,6 +124,5 @@
124
124
  "default": "./dist/bundled/v3/components/*/index.js"
125
125
  },
126
126
  "./package.json": "./package.json"
127
- },
128
- "gitHead": "011555419b20001e8b4691da8d27b016bb106c67"
127
+ }
129
128
  }
@@ -93,3 +93,4 @@ export * from './or-toast';
93
93
  export * from './or-toast-v3';
94
94
  export * from './or-tooltip';
95
95
  export * from './or-tooltip-v3';
96
+ export * from './or-tree-v3';
@@ -0,0 +1,104 @@
1
+ import { action } from '@storybook/addon-actions';
2
+ import { StoryFn } from '@storybook/vue3';
3
+ import OrTree from './OrTree.vue';
4
+
5
+ const TREE_DATA = [
6
+ {
7
+ key: '0-0',
8
+ children: [
9
+ {
10
+ key: '0-0-0',
11
+ children: [
12
+ {
13
+ key: '0-0-0-0',
14
+ },
15
+ {
16
+ key: '0-0-0-1',
17
+ },
18
+ {
19
+ key: '0-0-0-2',
20
+ },
21
+ ],
22
+ },
23
+ {
24
+ key: '0-0-1',
25
+ children: [
26
+ {
27
+ key: '0-0-1-0',
28
+ },
29
+ {
30
+ key: '0-0-1-1',
31
+ },
32
+ {
33
+ key: '0-0-1-2',
34
+ children: [
35
+ {
36
+ key: '0-0-1-2-0',
37
+ },
38
+ ],
39
+ },
40
+ ],
41
+ },
42
+ {
43
+ key: '0-0-2',
44
+ },
45
+ ],
46
+ },
47
+ {
48
+ key: '0-1',
49
+ children: [
50
+ {
51
+ key: '0-1-0-0',
52
+ },
53
+ {
54
+ key: '0-1-0-1',
55
+ },
56
+ {
57
+ key: '0-1-0-2',
58
+ },
59
+ ],
60
+ },
61
+ {
62
+ key: '0-2',
63
+ isLeaf: true,
64
+ },
65
+ ];
66
+
67
+ export default {
68
+ title: 'Components/Tree',
69
+ component: OrTree,
70
+ argTypes: {
71
+ },
72
+ };
73
+
74
+ const Template: StoryFn<typeof OrTree> = (args) => ({
75
+ components: {
76
+ OrTree,
77
+ },
78
+
79
+ data() {
80
+ return {
81
+ TREE_DATA,
82
+ };
83
+ },
84
+
85
+ setup() {
86
+ return {
87
+ args,
88
+ onUpdateState: action('update:state'),
89
+ };
90
+ },
91
+
92
+ template: `
93
+ <OrTree
94
+ v-bind="args"
95
+ />
96
+ `,
97
+ });
98
+
99
+ export const Default = Template.bind({});
100
+
101
+ Default.args = {
102
+ // Props
103
+ initialData: TREE_DATA,
104
+ };
@@ -0,0 +1,85 @@
1
+ <template>
2
+ <div
3
+ class="or-tree"
4
+ @drop="onDrop"
5
+ >
6
+ <tree-node
7
+ v-for="node in visibleItems"
8
+ :key="node[identifierKey]"
9
+ :node="node"
10
+ :node-key="node[identifierKey]"
11
+ :is-expanded="nodeMetadataByKey[node.key].isExpanded"
12
+ :is-leaf="!!node.isLeaf"
13
+ :level="nodeMetadataByKey[node.key].level"
14
+ @trigger-expand="onTriggerExpand"
15
+ >
16
+ <template
17
+ v-slot:default="props"
18
+ >
19
+ <slot v-bind="props" />
20
+ </template>
21
+ </tree-node>
22
+ </div>
23
+ </template>
24
+
25
+ <script lang="ts">
26
+ import { defineComponent, PropType } from 'vue-demi';
27
+ import { ITreeNode, ITreeNodeMetadata } from './types';
28
+ import { getFlatTree } from './utils';
29
+ import TreeNode from './TreeNode.vue';
30
+
31
+ export default defineComponent({
32
+ components: {
33
+ TreeNode,
34
+ },
35
+ props: {
36
+ initialData: {
37
+ type: Array as PropType<ITreeNode[]>,
38
+ default: () => ([]),
39
+ },
40
+ identifierKey: {
41
+ type: String,
42
+ default: 'key',
43
+ },
44
+ },
45
+
46
+ data() {
47
+ return {
48
+ flatTree: [] as ITreeNode[],
49
+ nodeMetadataByKey: {} as Record<string, ITreeNodeMetadata>,
50
+ };
51
+ },
52
+
53
+ computed: {
54
+ visibleItems() {
55
+ return this.flatTree.filter(treeNode => {
56
+ return this.isNodeExpanded(treeNode.key);
57
+ });
58
+ },
59
+ },
60
+
61
+ mounted() {
62
+ const {
63
+ nodeMetadataByKey, flatTree,
64
+ } = getFlatTree(this.initialData);
65
+ this.flatTree = flatTree;
66
+ this.nodeMetadataByKey = nodeMetadataByKey;
67
+ },
68
+
69
+ methods: {
70
+ onTriggerExpand(key: string) {
71
+ this.nodeMetadataByKey[key].isExpanded = !this.nodeMetadataByKey[key].isExpanded;
72
+ },
73
+
74
+ isNodeExpanded(key: string): boolean {
75
+ const { parentNodeKey, level } = this.nodeMetadataByKey[key];
76
+ const parentMetadata = this.nodeMetadataByKey[parentNodeKey];
77
+
78
+ if (level === 0) return true;
79
+ if (!parentMetadata.isExpanded) return false;
80
+
81
+ return this.isNodeExpanded(parentNodeKey);
82
+ },
83
+ },
84
+ });
85
+ </script>
@@ -0,0 +1,72 @@
1
+ <template>
2
+ <div
3
+ class="tree-node"
4
+ :class="rootClasses"
5
+ :style="styleCSS"
6
+ >
7
+ <or-icon-button
8
+ v-if="!isLeaf"
9
+ :icon="expandIcon"
10
+ @click="$emit('trigger-expand', nodeKey)"
11
+ />
12
+
13
+ <slot v-bind="$props">
14
+ {{ nodeKey }}
15
+ </slot>
16
+ </div>
17
+ </template>
18
+
19
+ <script lang="ts">
20
+ import { defineComponent, PropType } from 'vue-demi';
21
+ import { OrIconButtonV3 as OrIconButton } from '../or-icon-button-v3';
22
+ import { TreeNodeRoot } from './styles';
23
+ import { ITreeNode } from './types';
24
+
25
+ export default defineComponent({
26
+ components: {
27
+ OrIconButton,
28
+ },
29
+ props: {
30
+ node: {
31
+ type: Object as PropType<ITreeNode>,
32
+ default: undefined,
33
+ },
34
+ nodeKey: {
35
+ type: String,
36
+ default: '',
37
+ },
38
+ isExpanded: {
39
+ type: Boolean,
40
+ default: false,
41
+ },
42
+ isLeaf: {
43
+ type: Boolean,
44
+ default: false,
45
+ },
46
+ level: {
47
+ type: Number,
48
+ default: 0,
49
+ },
50
+ },
51
+ emits: ['trigger-expand'],
52
+
53
+ setup() {
54
+ return {
55
+ rootClasses: TreeNodeRoot,
56
+ };
57
+ },
58
+
59
+ computed: {
60
+ expandIcon() {
61
+ return this.isExpanded ? 'keyboard_arrow_down' : 'arrow_right';
62
+ },
63
+
64
+ styleCSS() {
65
+ return {
66
+ // 24px -- gap-sm + tooltip width
67
+ 'padding-left': (this.isLeaf && this.level === 0) ? '24px' : `${this.level * 10}px`,
68
+ };
69
+ },
70
+ },
71
+ });
72
+ </script>
@@ -0,0 +1,2 @@
1
+ export { default as OrTreeV3 } from './OrTree.vue';
2
+ export * from './types';
@@ -0,0 +1,13 @@
1
+ export const TreeNodeRoot: string[] = [
2
+ 'flex',
3
+ 'items-center',
4
+ 'gap-sm',
5
+ 'pt-6',
6
+ 'my-sm',
7
+
8
+ // Theme
9
+ 'text-on-background',
10
+ 'dark:text-on-background-dark',
11
+ 'hover:bg-primary-opacity-0-08',
12
+ 'dark:hover:bg-primary-opacity-0-08-dark',
13
+ ];
@@ -0,0 +1,12 @@
1
+ export interface ITreeNode {
2
+ key: string;
3
+ isLeaf: boolean;
4
+ children?: ITreeNode[];
5
+ }
6
+
7
+
8
+ export interface ITreeNodeMetadata {
9
+ level: number;
10
+ isExpanded: boolean;
11
+ parentNodeKey: string;
12
+ }
@@ -0,0 +1,31 @@
1
+ import { ITreeNode, ITreeNodeMetadata } from './types';
2
+
3
+ export const getFlatTree = (tree: ITreeNode[]) => {
4
+ const flatTree: ITreeNode[] = [];
5
+ const nodeMetadataByKey: Record<string, ITreeNodeMetadata> = {};
6
+
7
+ const goDeeper = (treeNode: ITreeNode, level: number, parentNodeKey: string) => {
8
+ flatTree.push(treeNode);
9
+ nodeMetadataByKey[treeNode.key] = {
10
+ level,
11
+ isExpanded: false,
12
+ parentNodeKey,
13
+ };
14
+
15
+ if (treeNode.children) {
16
+ for (const child of treeNode.children) {
17
+ goDeeper(child, level + 1, treeNode.key);
18
+ }
19
+
20
+ }
21
+ };
22
+
23
+ for (const node of tree) {
24
+ goDeeper(node, 0, '');
25
+ }
26
+
27
+ return {
28
+ flatTree,
29
+ nodeMetadataByKey,
30
+ };
31
+ };