@onereach/ui-components 2.62.3-beta.1903.0 → 2.62.3-beta.1904.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 (244) hide show
  1. package/dist/v2/OrCardCollection-89a315ed.js +227 -0
  2. package/dist/v2/{OrConfirm-d561bf82.js → OrConfirm-3896bd11.js} +1 -1
  3. package/dist/v2/{OrInlineInput-e754cb9f.js → OrInlineInput-c1d6fb73.js} +5 -5
  4. package/dist/v2/{OrInlineTextarea-7dc58bb1.js → OrInlineTextarea-7ec4c40d.js} +5 -5
  5. package/dist/v2/{OrInput-0dcfba2a.js → OrInput-0508c3fb.js} +5 -5
  6. package/dist/v2/{OrSearch-45ea8c33.js → OrSearch-feca9f48.js} +1 -1
  7. package/dist/v2/{OrSelect-b44cac14.js → OrSelect-bb539517.js} +34 -14
  8. package/dist/v2/OrSortHeader-a6004b24.js +133 -0
  9. package/dist/v2/{OrTextarea-8773d494.js → OrTextarea-cc70afc9.js} +5 -5
  10. package/dist/v2/components/index.d.ts +2 -0
  11. package/dist/v2/components/or-card-collection-v3/OrCardCollection.stories3.d.ts +17 -0
  12. package/dist/v2/components/or-card-collection-v3/OrCardCollection.vue.d.ts +98 -0
  13. package/dist/v2/components/or-card-collection-v3/index.d.ts +3 -0
  14. package/dist/v2/components/or-card-collection-v3/props.d.ts +4 -0
  15. package/dist/v2/components/or-card-collection-v3/styles.d.ts +6 -0
  16. package/dist/v2/components/or-card-collection-v3/types.d.ts +7 -0
  17. package/dist/v2/components/or-select-v3/OrSelect.vue.d.ts +2 -2
  18. package/dist/v2/components/or-sort-header-v3/OrSortHeader.stories3.d.ts +12 -0
  19. package/dist/v2/components/or-sort-header-v3/OrSortHeader.vue.d.ts +57 -0
  20. package/dist/v2/components/or-sort-header-v3/index.d.ts +2 -0
  21. package/dist/v2/components/or-sort-header-v3/styles.d.ts +1 -0
  22. package/dist/v2/components/or-sort-header-v3/types.d.ts +4 -0
  23. package/dist/v2/index.d.ts +0 -1
  24. package/dist/v2/index.js +9 -8
  25. package/dist/v2/index11.js +20 -1
  26. package/dist/v2/index12.js +3 -12
  27. package/dist/v2/index13.js +3 -2
  28. package/dist/v2/index14.js +11 -5
  29. package/dist/v2/index15.js +5 -14
  30. package/dist/v2/index16.js +4 -19
  31. package/dist/v2/index17.js +28 -4
  32. package/dist/v2/index18.js +3 -7
  33. package/dist/v2/index19.js +5 -23
  34. package/dist/v2/index2.js +9 -8
  35. package/dist/v2/index20.js +25 -21
  36. package/dist/v2/index21.js +21 -18
  37. package/dist/v2/index22.js +20 -2
  38. package/dist/v2/index23.js +2 -4
  39. package/dist/v2/index24.js +2 -1
  40. package/dist/v2/index25.js +1 -2
  41. package/dist/v2/index26.js +2 -2
  42. package/dist/v2/index27.js +4 -7
  43. package/dist/v2/index28.js +6 -2
  44. package/dist/v2/index29.js +3 -3
  45. package/dist/v2/index30.js +3 -10
  46. package/dist/v2/index31.js +9 -12
  47. package/dist/v2/index32.js +11 -1
  48. package/dist/v2/index33.js +1 -1
  49. package/dist/v2/index34.js +1 -16
  50. package/dist/v2/index35.js +17 -17
  51. package/dist/v2/index36.js +17 -17
  52. package/dist/v2/index37.js +16 -1
  53. package/dist/v2/index38.js +1 -17
  54. package/dist/v2/index39.js +18 -22
  55. package/dist/v2/index40.js +22 -2
  56. package/dist/v2/index41.js +3 -3
  57. package/dist/v2/index42.js +1 -1
  58. package/dist/v2/index43.js +3 -20
  59. package/dist/v2/index44.js +1 -7
  60. package/dist/v2/index45.js +24 -1
  61. package/dist/v2/index46.js +3 -3
  62. package/dist/v2/index47.js +1 -2
  63. package/dist/v2/index48.js +2 -9
  64. package/dist/v2/index49.js +10 -17
  65. package/dist/v2/index50.js +17 -13
  66. package/dist/v2/index51.js +13 -14
  67. package/dist/v2/index52.js +14 -13
  68. package/dist/v2/index53.js +12 -15
  69. package/dist/v2/index54.js +16 -1
  70. package/dist/v2/index55.js +2 -6
  71. package/dist/v2/index56.js +1 -5
  72. package/dist/v2/index57.js +10 -3
  73. package/dist/v2/index58.js +2 -4
  74. package/dist/v2/index59.js +5 -3
  75. package/dist/v2/index60.js +2 -1
  76. package/dist/v2/index61.js +2 -5
  77. package/dist/v2/index62.js +3 -18
  78. package/dist/v2/index63.js +18 -15
  79. package/dist/v2/index64.js +15 -24
  80. package/dist/v2/index65.js +25 -4
  81. package/dist/v2/index66.js +2 -1
  82. package/dist/v2/index67.js +3 -4
  83. package/dist/v2/index68.js +3 -4
  84. package/dist/v2/index69.js +3 -10
  85. package/dist/v2/index70.js +3 -6
  86. package/dist/v2/index71.js +4 -4
  87. package/dist/v2/index72.js +15 -6
  88. package/dist/v2/index73.js +2 -2
  89. package/dist/v2/index74.js +6 -3
  90. package/dist/v2/index75.js +4 -3
  91. package/dist/v2/index76.js +1 -2
  92. package/dist/v2/index77.js +2 -14
  93. package/dist/v2/index78.js +2 -10
  94. package/dist/v2/index79.js +5 -4
  95. package/dist/v2/index80.js +12 -2
  96. package/dist/v2/index81.js +14 -2
  97. package/dist/v2/index82.js +2 -3
  98. package/dist/v2/index83.js +2 -8
  99. package/dist/v2/index84.js +2 -20
  100. package/dist/v2/index85.js +8 -18
  101. package/dist/v2/index86.js +21 -1
  102. package/dist/v2/index87.js +17 -16
  103. package/dist/v2/index88.js +1 -1
  104. package/dist/v2/index89.js +17 -9
  105. package/dist/v2/index90.js +2 -12
  106. package/dist/v2/index91.js +10 -1
  107. package/dist/v2/index92.js +12 -6
  108. package/dist/v2/index93.js +5 -1
  109. package/dist/v2/index94.js +3 -0
  110. package/dist/v3/OrCardCollection-85a00f6c.js +198 -0
  111. package/dist/v3/{OrConfirm-a9d3f157.js → OrConfirm-9990d64a.js} +1 -1
  112. package/dist/v3/{OrInlineInput-8f473205.js → OrInlineInput-bc5fa87a.js} +5 -3
  113. package/dist/v3/{OrInlineTextarea-86f4506d.js → OrInlineTextarea-c433b451.js} +5 -3
  114. package/dist/v3/{OrInput-f51916d4.js → OrInput-2b05a69c.js} +5 -3
  115. package/dist/v3/{OrSearch-e27cadbf.js → OrSearch-1272c3df.js} +1 -1
  116. package/dist/v3/{OrSelect-9d821ef2.js → OrSelect-529b4567.js} +35 -13
  117. package/dist/v3/OrSortHeader-5eba50cd.js +104 -0
  118. package/dist/v3/{OrTextarea-09aa33dc.js → OrTextarea-98895b2a.js} +6 -4
  119. package/dist/v3/components/index.d.ts +2 -0
  120. package/dist/v3/components/or-card-collection-v3/OrCardCollection.stories3.d.ts +17 -0
  121. package/dist/v3/components/or-card-collection-v3/OrCardCollection.vue.d.ts +98 -0
  122. package/dist/v3/components/or-card-collection-v3/index.d.ts +3 -0
  123. package/dist/v3/components/or-card-collection-v3/props.d.ts +4 -0
  124. package/dist/v3/components/or-card-collection-v3/styles.d.ts +6 -0
  125. package/dist/v3/components/or-card-collection-v3/types.d.ts +7 -0
  126. package/dist/v3/components/or-select-v3/OrSelect.vue.d.ts +2 -2
  127. package/dist/v3/components/or-sort-header-v3/OrSortHeader.stories3.d.ts +12 -0
  128. package/dist/v3/components/or-sort-header-v3/OrSortHeader.vue.d.ts +57 -0
  129. package/dist/v3/components/or-sort-header-v3/index.d.ts +2 -0
  130. package/dist/v3/components/or-sort-header-v3/styles.d.ts +1 -0
  131. package/dist/v3/components/or-sort-header-v3/types.d.ts +4 -0
  132. package/dist/v3/index.d.ts +0 -1
  133. package/dist/v3/index.js +9 -8
  134. package/dist/v3/index11.js +19 -1
  135. package/dist/v3/index12.js +3 -11
  136. package/dist/v3/index13.js +3 -2
  137. package/dist/v3/index14.js +9 -4
  138. package/dist/v3/index15.js +4 -11
  139. package/dist/v3/index16.js +3 -17
  140. package/dist/v3/index17.js +25 -4
  141. package/dist/v3/index18.js +3 -6
  142. package/dist/v3/index19.js +5 -20
  143. package/dist/v3/index2.js +9 -8
  144. package/dist/v3/index20.js +21 -20
  145. package/dist/v3/index21.js +20 -15
  146. package/dist/v3/index22.js +16 -1
  147. package/dist/v3/index23.js +2 -4
  148. package/dist/v3/index24.js +2 -1
  149. package/dist/v3/index25.js +1 -2
  150. package/dist/v3/index26.js +2 -2
  151. package/dist/v3/index27.js +4 -6
  152. package/dist/v3/index28.js +5 -2
  153. package/dist/v3/index29.js +3 -3
  154. package/dist/v3/index30.js +3 -9
  155. package/dist/v3/index31.js +8 -11
  156. package/dist/v3/index32.js +10 -1
  157. package/dist/v3/index33.js +1 -1
  158. package/dist/v3/index34.js +1 -15
  159. package/dist/v3/index35.js +16 -14
  160. package/dist/v3/index36.js +14 -16
  161. package/dist/v3/index37.js +16 -2
  162. package/dist/v3/index38.js +2 -17
  163. package/dist/v3/index39.js +17 -17
  164. package/dist/v3/index40.js +16 -1
  165. package/dist/v3/index41.js +3 -3
  166. package/dist/v3/index42.js +1 -1
  167. package/dist/v3/index43.js +3 -16
  168. package/dist/v3/index44.js +1 -7
  169. package/dist/v3/index45.js +20 -1
  170. package/dist/v3/index46.js +3 -3
  171. package/dist/v3/index47.js +1 -2
  172. package/dist/v3/index48.js +2 -8
  173. package/dist/v3/index49.js +9 -14
  174. package/dist/v3/index50.js +14 -12
  175. package/dist/v3/index51.js +12 -11
  176. package/dist/v3/index52.js +11 -12
  177. package/dist/v3/index53.js +11 -11
  178. package/dist/v3/index54.js +12 -1
  179. package/dist/v3/index55.js +2 -5
  180. package/dist/v3/index56.js +1 -5
  181. package/dist/v3/index57.js +9 -3
  182. package/dist/v3/index58.js +2 -4
  183. package/dist/v3/index59.js +5 -3
  184. package/dist/v3/index60.js +2 -1
  185. package/dist/v3/index61.js +1 -4
  186. package/dist/v3/index62.js +3 -17
  187. package/dist/v3/index63.js +17 -14
  188. package/dist/v3/index64.js +13 -22
  189. package/dist/v3/index65.js +23 -3
  190. package/dist/v3/index66.js +2 -1
  191. package/dist/v3/index67.js +3 -4
  192. package/dist/v3/index68.js +3 -4
  193. package/dist/v3/index69.js +3 -9
  194. package/dist/v3/index70.js +3 -4
  195. package/dist/v3/index71.js +4 -4
  196. package/dist/v3/index72.js +11 -5
  197. package/dist/v3/index73.js +2 -2
  198. package/dist/v3/index74.js +5 -2
  199. package/dist/v3/index75.js +4 -3
  200. package/dist/v3/index76.js +1 -2
  201. package/dist/v3/index77.js +2 -13
  202. package/dist/v3/index78.js +2 -9
  203. package/dist/v3/index79.js +5 -4
  204. package/dist/v3/index80.js +11 -1
  205. package/dist/v3/index81.js +13 -1
  206. package/dist/v3/index82.js +1 -3
  207. package/dist/v3/index83.js +1 -8
  208. package/dist/v3/index84.js +2 -17
  209. package/dist/v3/index85.js +7 -14
  210. package/dist/v3/index86.js +18 -1
  211. package/dist/v3/index87.js +14 -15
  212. package/dist/v3/index88.js +1 -1
  213. package/dist/v3/index89.js +15 -6
  214. package/dist/v3/index90.js +2 -11
  215. package/dist/v3/index91.js +8 -1
  216. package/dist/v3/index92.js +11 -6
  217. package/dist/v3/index93.js +5 -1
  218. package/dist/v3/index94.js +3 -0
  219. package/package.json +1 -1
  220. package/src/components/index.ts +2 -0
  221. package/src/components/or-card-collection-v3/OrCardCollection.docs.mdx +3 -0
  222. package/src/components/or-card-collection-v3/OrCardCollection.stories3.ts +162 -0
  223. package/src/components/or-card-collection-v3/OrCardCollection.vue +210 -0
  224. package/src/components/or-card-collection-v3/index.ts +3 -0
  225. package/src/components/or-card-collection-v3/props.ts +4 -0
  226. package/src/components/or-card-collection-v3/styles.ts +53 -0
  227. package/src/components/or-card-collection-v3/types.ts +8 -0
  228. package/src/components/or-inline-input-v3/OrInlineInput.vue +12 -10
  229. package/src/components/or-inline-textarea-v3/OrInlineTextarea.vue +12 -10
  230. package/src/components/or-input-v3/OrInput.vue +12 -10
  231. package/src/components/or-select-v3/OrSelect.vue +11 -12
  232. package/src/components/or-sort-header-v3/OrSortHeader.docs.mdx +3 -0
  233. package/src/components/or-sort-header-v3/OrSortHeader.stories3.ts +132 -0
  234. package/src/components/or-sort-header-v3/OrSortHeader.vue +111 -0
  235. package/src/components/or-sort-header-v3/index.ts +2 -0
  236. package/src/components/or-sort-header-v3/styles.ts +23 -0
  237. package/src/components/or-sort-header-v3/types.ts +4 -0
  238. package/src/components/or-textarea-v3/OrTextarea.vue +12 -10
  239. package/src/index.ts +0 -1
  240. package/dist/v2/directives/index.d.ts +0 -2
  241. package/dist/v2/dropdown-open-0d314aa4.js +0 -28
  242. package/dist/v3/directives/index.d.ts +0 -2
  243. package/dist/v3/dropdown-open-0d314aa4.js +0 -28
  244. package/src/directives/index.ts +0 -2
@@ -0,0 +1,210 @@
1
+ <template>
2
+ <div
3
+ ref="root"
4
+ v-bind="$attrs"
5
+ :class="rootStyles"
6
+ >
7
+ <div :class="toolbarStyles">
8
+ <div :class="toolbarPanelStyles">
9
+ <template v-if="sortHeaders">
10
+ <OrSortHeader
11
+ v-for="header in sortHeaders"
12
+ :key="header.value"
13
+ v-model="proxySort"
14
+ :input-value="header.value"
15
+ >
16
+ {{ header.label }}
17
+ </OrSortHeader>
18
+ </template>
19
+ </div>
20
+
21
+ <div :class="toolbarPanelStyles">
22
+ <OrInput
23
+ v-model="proxySearch"
24
+ :type="'search'"
25
+ :placeholder="'Search'"
26
+ :size="'s'"
27
+ />
28
+
29
+ <OrIconButton
30
+ :icon="'grid_view'"
31
+ @click="switchToGridView()"
32
+ />
33
+
34
+ <OrIconButton
35
+ :icon="'view_list'"
36
+ @click="switchToListView()"
37
+ />
38
+
39
+ <slot name="addon" />
40
+ </div>
41
+ </div>
42
+
43
+ <div :class="contentStyles">
44
+ <template v-if="proxyView === 'grid'">
45
+ <OrCard
46
+ v-for="item in items"
47
+ :key="item.id"
48
+ >
49
+ <slot
50
+ name="gridItem"
51
+ v-bind="item"
52
+ />
53
+ </OrCard>
54
+ </template>
55
+
56
+ <template v-if="proxyView === 'list'">
57
+ <OrCard
58
+ v-for="item in items"
59
+ :key="item.id"
60
+ >
61
+ <slot
62
+ name="listItem"
63
+ v-bind="item"
64
+ />
65
+ </OrCard>
66
+ </template>
67
+ </div>
68
+ </div>
69
+ </template>
70
+
71
+ <script lang="ts">
72
+ import { computed, defineComponent, PropType, ref, watch } from 'vue-demi';
73
+ import { useClassAttribute } from '../../hooks';
74
+ import { OrCardV3 as OrCard } from '../or-card-v3';
75
+ import { OrIconButtonV3 as OrIconButton } from '../or-icon-button-v3';
76
+ import { OrInputV3 as OrInput } from '../or-input-v3';
77
+ import { OrSortHeaderV3 as OrSortHeader, SortHeaderModel } from '../or-sort-header-v3';
78
+ import { CardCollectionView } from './props';
79
+ import { CardCollectionContent, CardCollectionContentViews, CardCollectionRoot, CardCollectionToolbar, CardCollectionToolbarPanel } from './styles';
80
+ import { CardCollectionItem, CardCollectionSortHeader } from './types';
81
+
82
+ export default defineComponent({
83
+ name: 'OrCardCollection',
84
+
85
+ components: {
86
+ OrCard,
87
+ OrIconButton,
88
+ OrInput,
89
+ OrSortHeader,
90
+ },
91
+
92
+ inheritAttrs: false,
93
+
94
+ props: {
95
+ items: {
96
+ type: Array as PropType<CardCollectionItem[]>,
97
+ default: [] as CardCollectionItem[],
98
+ },
99
+
100
+ view: {
101
+ type: String as PropType<CardCollectionView>,
102
+ default: CardCollectionView.Grid,
103
+ },
104
+
105
+ sort: {
106
+ type: Object as PropType<SortHeaderModel>,
107
+ default: undefined,
108
+ },
109
+
110
+ sortHeaders: {
111
+ type: Array as PropType<CardCollectionSortHeader[]>,
112
+ default: undefined,
113
+ },
114
+
115
+ search: {
116
+ type: String,
117
+ default: undefined,
118
+ },
119
+ },
120
+
121
+ emits: [
122
+ 'viewChange',
123
+ 'sortChange',
124
+ 'searchChange',
125
+ ],
126
+
127
+ expose: [
128
+ 'root',
129
+ ],
130
+
131
+ setup(props, context) {
132
+ // Refs
133
+ const root = ref<HTMLElement>();
134
+
135
+ // Styles
136
+ const classAttribute = useClassAttribute();
137
+
138
+ const rootStyles = computed(() => [
139
+ 'or-card-collection',
140
+ ...CardCollectionRoot,
141
+ classAttribute.value,
142
+ ]);
143
+
144
+ const toolbarStyles = computed(() => [
145
+ ...CardCollectionToolbar,
146
+ ]);
147
+
148
+ const toolbarPanelStyles = computed(() => [
149
+ ...CardCollectionToolbarPanel,
150
+ ]);
151
+
152
+ const contentStyles = computed(() => [
153
+ ...CardCollectionContent,
154
+ ...CardCollectionContentViews[proxyView.value],
155
+ ]);
156
+
157
+ // State
158
+ const proxyView = ref(props.view);
159
+ const proxySort = ref(props.sort);
160
+ const proxySearch = ref(props.search);
161
+
162
+ // Methods
163
+ function switchToGridView(): void {
164
+ proxyView.value = CardCollectionView.Grid;
165
+ }
166
+
167
+ function switchToListView(): void {
168
+ proxyView.value = CardCollectionView.List;
169
+ }
170
+
171
+ // Effects
172
+ watch(() => props.view, (value) => {
173
+ proxyView.value = value;
174
+ });
175
+
176
+ watch(proxyView, (value) => {
177
+ context.emit('viewChange', value);
178
+ });
179
+
180
+ watch(() => props.sort, (value) => {
181
+ proxySort.value = value;
182
+ });
183
+
184
+ watch(proxySort, (value) => {
185
+ context.emit('sortChange', value);
186
+ });
187
+
188
+ watch(() => props.search, (value) => {
189
+ proxySearch.value = value;
190
+ });
191
+
192
+ watch(proxySearch, (value) => {
193
+ context.emit('searchChange', value);
194
+ });
195
+
196
+ return {
197
+ root,
198
+ rootStyles,
199
+ toolbarStyles,
200
+ toolbarPanelStyles,
201
+ contentStyles,
202
+ proxyView,
203
+ proxySort,
204
+ proxySearch,
205
+ switchToGridView,
206
+ switchToListView,
207
+ };
208
+ },
209
+ });
210
+ </script>
@@ -0,0 +1,3 @@
1
+ export { default as OrCardCollectionV3 } from './OrCardCollection.vue';
2
+ export * from './props';
3
+ export * from './types';
@@ -0,0 +1,4 @@
1
+ export enum CardCollectionView {
2
+ Grid = 'grid',
3
+ List = 'list',
4
+ }
@@ -0,0 +1,53 @@
1
+ import { CardCollectionView } from './props';
2
+
3
+ export const CardCollectionRoot: string[] = [
4
+ // Layout
5
+ 'flex flex-col',
6
+
7
+ // Spacing
8
+ 'gap-md',
9
+ ];
10
+
11
+ export const CardCollectionToolbar: string[] = [
12
+ // Layout
13
+ 'flex',
14
+ 'justify-between',
15
+ 'items-center',
16
+
17
+ // Typography
18
+ 'typography-body-2-regular',
19
+
20
+ // Theme
21
+ 'theme-foreground-default',
22
+ 'dark:theme-foreground-default-dark',
23
+ ];
24
+
25
+ export const CardCollectionToolbarPanel: string[] = [
26
+ // Layout
27
+ 'flex',
28
+ 'justify-normal',
29
+ 'items-center',
30
+
31
+ // Spacing
32
+ 'gap-sm',
33
+ ];
34
+
35
+ export const CardCollectionContent: string[] = [
36
+ // Layout
37
+ 'grid',
38
+
39
+ // Spacing
40
+ 'gap-sm md:gap-md',
41
+ ];
42
+
43
+ export const CardCollectionContentViews: Record<CardCollectionView, string[]> = {
44
+ 'grid': [
45
+ // Layout
46
+ 'sm:grid-cols-1',
47
+ 'md:grid-cols-2',
48
+ 'lg:grid-cols-4',
49
+ 'xl:grid-cols-6',
50
+ ],
51
+
52
+ 'list': [],
53
+ };
@@ -0,0 +1,8 @@
1
+ export interface CardCollectionItem {
2
+ id: string;
3
+ }
4
+
5
+ export interface CardCollectionSortHeader {
6
+ value: string;
7
+ label: string;
8
+ }
@@ -41,16 +41,18 @@
41
41
  </div>
42
42
 
43
43
  <template v-if="!invalid">
44
- <OrHint>
45
- {{ hint }}
46
-
47
- <template
48
- v-if="maxLength"
49
- v-slot:addon
50
- >
51
- {{ currentLength }} / {{ maxLength }}
52
- </template>
53
- </OrHint>
44
+ <template v-if="hint || maxLength">
45
+ <OrHint>
46
+ {{ hint }}
47
+
48
+ <template
49
+ v-if="maxLength"
50
+ v-slot:addon
51
+ >
52
+ {{ currentLength }} / {{ maxLength }}
53
+ </template>
54
+ </OrHint>
55
+ </template>
54
56
  </template>
55
57
 
56
58
  <template v-else>
@@ -40,16 +40,18 @@
40
40
  </div>
41
41
 
42
42
  <template v-if="!invalid">
43
- <OrHint>
44
- {{ hint }}
45
-
46
- <template
47
- v-if="maxLength"
48
- v-slot:addon
49
- >
50
- {{ currentLength }} / {{ maxLength }}
51
- </template>
52
- </OrHint>
43
+ <template v-if="hint || maxLength">
44
+ <OrHint>
45
+ {{ hint }}
46
+
47
+ <template
48
+ v-if="maxLength"
49
+ v-slot:addon
50
+ >
51
+ {{ currentLength }} / {{ maxLength }}
52
+ </template>
53
+ </OrHint>
54
+ </template>
53
55
  </template>
54
56
 
55
57
  <template v-else>
@@ -70,16 +70,18 @@
70
70
  </OrInputBox>
71
71
 
72
72
  <template v-if="!invalid">
73
- <OrHint :disabled="disabled">
74
- {{ hint }}
75
-
76
- <template
77
- v-if="maxLength"
78
- v-slot:addon
79
- >
80
- {{ currentLength }} / {{ maxLength }}
81
- </template>
82
- </OrHint>
73
+ <template v-if="hint || maxLength">
74
+ <OrHint :disabled="disabled">
75
+ {{ hint }}
76
+
77
+ <template
78
+ v-if="maxLength"
79
+ v-slot:addon
80
+ >
81
+ {{ currentLength }} / {{ maxLength }}
82
+ </template>
83
+ </OrHint>
84
+ </template>
83
85
  </template>
84
86
 
85
87
  <template v-else>
@@ -21,7 +21,7 @@
21
21
 
22
22
  <OrInputBox
23
23
  ref="inputBox"
24
- v-dropdown-open="toggle"
24
+ v-dropdown-open="open"
25
25
  v-dropdown-close="close"
26
26
  :class="[popoverState === 'open' && 'rounded-b-0']"
27
27
  :size="size"
@@ -193,9 +193,11 @@
193
193
  </OrInputBox>
194
194
 
195
195
  <template v-if="!invalid">
196
- <OrHint :disabled="disabled">
197
- {{ hint }}
198
- </OrHint>
196
+ <template v-if="hint">
197
+ <OrHint :disabled="disabled">
198
+ {{ hint }}
199
+ </OrHint>
200
+ </template>
199
201
  </template>
200
202
 
201
203
  <template v-else>
@@ -208,7 +210,8 @@
208
210
 
209
211
  <script lang="ts">
210
212
  import { computed, defineComponent, getCurrentInstance, onMounted, PropType, ref, watch } from 'vue-demi';
211
- import { DropdownClose, DropdownOpen } from '../../directives';
213
+ import { DropdownClose } from '../../directives/dropdown-close';
214
+ import { DropdownOpen } from '../../directives/dropdown-open';
212
215
  import { useClassAttribute, useOverflow } from '../../hooks';
213
216
  import { OrCheckboxV3 as OrCheckbox } from '../or-checkbox-v3';
214
217
  import { OrErrorV3 as OrError } from '../or-error-v3';
@@ -464,16 +467,12 @@ export default defineComponent({
464
467
  });
465
468
 
466
469
  // Methods
467
- function toggle(): void {
470
+ function open(): void {
468
471
  if (!readonly.value && !props.disabled) {
469
472
  const popoverInstance = popover.value;
470
473
 
471
474
  if (popoverInstance) {
472
- if (popoverState.value === 'open') {
473
- (popoverInstance.close as () => void)();
474
- } else {
475
- (popoverInstance.open as () => void)();
476
- }
475
+ (popoverInstance.open as () => void)();
477
476
  }
478
477
  }
479
478
  }
@@ -518,7 +517,7 @@ export default defineComponent({
518
517
  internalSearchOptions,
519
518
  resolvedSearchOptions,
520
519
  groupedOptions,
521
- toggle,
520
+ open,
522
521
  close,
523
522
  deselect,
524
523
  innerItems,
@@ -0,0 +1,3 @@
1
+ import { DocsPage } from '@storybook/addon-docs';
2
+
3
+ <DocsPage />
@@ -0,0 +1,132 @@
1
+ import { action } from '@storybook/addon-actions';
2
+ import { Meta, StoryFn } from '@storybook/vue3';
3
+ import { ref, watch } from 'vue-demi';
4
+ import OrSortHeaderDocs from './OrSortHeader.docs.mdx';
5
+ import OrSortHeader from './OrSortHeader.vue';
6
+ import { SortHeaderModel } from './types';
7
+
8
+ export default {
9
+ title: 'Components/Sort Header',
10
+ component: OrSortHeader,
11
+
12
+ argTypes: {
13
+ // Slots
14
+ default: {
15
+ type: {
16
+ name: 'string',
17
+ required: true,
18
+ },
19
+
20
+ control: { type: 'text' },
21
+ },
22
+
23
+ // Props
24
+ modelValue: {
25
+ control: { type: 'object' },
26
+ },
27
+
28
+ value: { // TODO: Remove Vue 2 fallback
29
+ control: { type: 'object' },
30
+ },
31
+
32
+ inputValue: { // TODO: Rename to `value` after complete migration to Vue 3
33
+ control: { type: 'text' },
34
+ },
35
+
36
+ // Events
37
+ 'update:modelValue': {
38
+ table: { disable: true },
39
+ },
40
+
41
+ input: {
42
+ table: { disable: true },
43
+ },
44
+
45
+ focus: {
46
+ table: { disable: true },
47
+ },
48
+
49
+ blur: {
50
+ table: { disable: true },
51
+ },
52
+ },
53
+
54
+ parameters: {
55
+ layout: 'centered',
56
+
57
+ docs: {
58
+ page: OrSortHeaderDocs,
59
+ },
60
+ },
61
+
62
+ decorators: [
63
+ () => ({
64
+ template: `
65
+ <div class="flex flex-row gap-sm">
66
+ <story />
67
+ </div>
68
+ `,
69
+ }),
70
+ ],
71
+ } as Meta<typeof OrSortHeader>;
72
+
73
+ const Template: StoryFn<typeof OrSortHeader> = (args) => ({
74
+ components: {
75
+ OrSortHeader,
76
+ },
77
+
78
+ setup() {
79
+ // State
80
+ const model = ref<SortHeaderModel>();
81
+
82
+ // Effects
83
+ watch(model, (value) => {
84
+ console.debug(value);
85
+ });
86
+
87
+ return {
88
+ args,
89
+ model,
90
+ onUpdateModelValue: action('update:modelValue'),
91
+ onInput: action('input'),
92
+ onFocus: action('focus'),
93
+ onBlur: action('blur'),
94
+ };
95
+ },
96
+
97
+ template: `
98
+ <div class="contents">
99
+ <OrSortHeader
100
+ v-model="model"
101
+ v-bind="args"
102
+ @update:modelValue="onUpdateModelValue"
103
+ @input="onInput"
104
+ @focus="onFocus"
105
+ @blur="onBlur"
106
+ >
107
+ ${args.default}
108
+ </OrSortHeader>
109
+
110
+ <OrSortHeader
111
+ v-model="model"
112
+ input-value="column-2"
113
+ @update:modelValue="onUpdateModelValue"
114
+ @input="onInput"
115
+ @focus="onFocus"
116
+ @blur="onBlur"
117
+ >
118
+ Column 2
119
+ </OrSortHeader>
120
+ </div>
121
+ `,
122
+ });
123
+
124
+ export const Default = Template.bind({});
125
+
126
+ Default.args = {
127
+ // Slots
128
+ default: 'Column 1',
129
+
130
+ // Props
131
+ inputValue: 'column-1',
132
+ };
@@ -0,0 +1,111 @@
1
+ <template>
2
+ <div
3
+ ref="root"
4
+ v-bind="$attrs"
5
+ :class="rootStyles"
6
+ :activated="activated ? '' : null"
7
+ @click.stop="toggleDirection()"
8
+ >
9
+ <slot />
10
+
11
+ <template v-if="activated">
12
+ <OrIcon
13
+ :class="{ 'rotate-180': proxyModelValue.direction === 'asc' }"
14
+ :icon="'arrow_downward'"
15
+ />
16
+ </template>
17
+ </div>
18
+ </template>
19
+
20
+ <script lang="ts">
21
+ import { computed, defineComponent, PropType, ref } from 'vue-demi';
22
+ import { useClassAttribute } from '../../hooks';
23
+ import { OrIconV3 as OrIcon } from '../or-icon-v3';
24
+ import { SortHeaderRoot } from './styles';
25
+ import { SortHeaderModel } from './types';
26
+
27
+ export default defineComponent({
28
+ name: 'OrSortHeader',
29
+
30
+ components: {
31
+ OrIcon,
32
+ },
33
+
34
+ inheritAttrs: false,
35
+
36
+ props: {
37
+ modelValue: {
38
+ type: Object as PropType<SortHeaderModel>,
39
+ default: undefined,
40
+ },
41
+
42
+ value: { // TODO: Remove Vue 2 fallback
43
+ type: Object as PropType<SortHeaderModel>,
44
+ default: undefined,
45
+ },
46
+
47
+ inputValue: { // TODO: Rename to `value` after complete migration to Vue 3
48
+ type: String,
49
+ required: true,
50
+ },
51
+ },
52
+
53
+ emits: [
54
+ 'update:modelValue',
55
+
56
+ 'input',
57
+ 'focus',
58
+ 'blur',
59
+ ],
60
+
61
+ expose: [
62
+ 'root',
63
+ ],
64
+
65
+ setup(props, context) {
66
+ // Refs
67
+ const root = ref<HTMLElement>();
68
+
69
+ // Styles
70
+ const classAttribute = useClassAttribute();
71
+
72
+ const rootStyles = computed(() => [
73
+ 'or-sort-header',
74
+ ...SortHeaderRoot,
75
+ classAttribute.value,
76
+ ]);
77
+
78
+ // State
79
+ const proxyModelValue = computed({
80
+ get: () => {
81
+ return props.modelValue ?? props.value; // TODO: Remove Vue 2 fallback
82
+ },
83
+
84
+ set: (value) => {
85
+ context.emit('input', value);
86
+ context.emit('update:modelValue', value);
87
+ },
88
+ });
89
+
90
+ const activated = computed(() => {
91
+ return proxyModelValue.value?.column === props.inputValue;
92
+ });
93
+
94
+ // Methods
95
+ function toggleDirection(): void {
96
+ proxyModelValue.value = {
97
+ column: props.inputValue,
98
+ direction: proxyModelValue.value?.direction === 'asc' ? 'desc' : 'asc',
99
+ };
100
+ }
101
+
102
+ return {
103
+ root,
104
+ rootStyles,
105
+ proxyModelValue,
106
+ activated,
107
+ toggleDirection,
108
+ };
109
+ },
110
+ });
111
+ </script>
@@ -0,0 +1,2 @@
1
+ export { default as OrSortHeaderV3 } from './OrSortHeader.vue';
2
+ export * from './types';