@oruga-ui/theme-oruga 0.0.1

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 (116) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +115 -0
  3. package/dist/oruga-full.css +3778 -0
  4. package/dist/oruga-full.min.css +1 -0
  5. package/dist/oruga.css +2209 -0
  6. package/dist/oruga.min.css +1 -0
  7. package/dist/scss/components/_autocomplete.scss +130 -0
  8. package/dist/scss/components/_button.scss +242 -0
  9. package/dist/scss/components/_carousel.scss +256 -0
  10. package/dist/scss/components/_checkbox.scss +183 -0
  11. package/dist/scss/components/_collapse.scss +12 -0
  12. package/dist/scss/components/_datepicker.scss +592 -0
  13. package/dist/scss/components/_datetimepicker.scss +10 -0
  14. package/dist/scss/components/_dropdown.scss +241 -0
  15. package/dist/scss/components/_field.scss +154 -0
  16. package/dist/scss/components/_icon.scss +53 -0
  17. package/dist/scss/components/_input.scss +153 -0
  18. package/dist/scss/components/_inputitems.scss +175 -0
  19. package/dist/scss/components/_loading.scss +45 -0
  20. package/dist/scss/components/_menu.scss +124 -0
  21. package/dist/scss/components/_modal.scss +103 -0
  22. package/dist/scss/components/_notification.scss +212 -0
  23. package/dist/scss/components/_pagination.scss +256 -0
  24. package/dist/scss/components/_radio.scss +121 -0
  25. package/dist/scss/components/_select.scss +168 -0
  26. package/dist/scss/components/_sidebar.scss +112 -0
  27. package/dist/scss/components/_skeleton.scss +93 -0
  28. package/dist/scss/components/_slider.scss +241 -0
  29. package/dist/scss/components/_steps.scss +599 -0
  30. package/dist/scss/components/_switch.scss +171 -0
  31. package/dist/scss/components/_table.scss +481 -0
  32. package/dist/scss/components/_tabs.scss +385 -0
  33. package/dist/scss/components/_timepicker.scss +116 -0
  34. package/dist/scss/components/_tooltip.scss +345 -0
  35. package/dist/scss/components/_upload.scss +74 -0
  36. package/dist/scss/oruga-common.scss +37 -0
  37. package/dist/scss/oruga-full.scss +9 -0
  38. package/dist/scss/oruga.scss +197 -0
  39. package/dist/scss/utils/_animations.scss +231 -0
  40. package/dist/scss/utils/_base.scss +31 -0
  41. package/dist/scss/utils/_helpers.scss +211 -0
  42. package/dist/scss/utils/_root.scss +28 -0
  43. package/dist/scss/utils/_variables.scss +105 -0
  44. package/dist/theme.js +8 -0
  45. package/package.json +72 -0
  46. package/src/App.vue +104 -0
  47. package/src/assets/scss/components/_autocomplete.scss +130 -0
  48. package/src/assets/scss/components/_button.scss +242 -0
  49. package/src/assets/scss/components/_carousel.scss +256 -0
  50. package/src/assets/scss/components/_checkbox.scss +183 -0
  51. package/src/assets/scss/components/_collapse.scss +12 -0
  52. package/src/assets/scss/components/_datepicker.scss +592 -0
  53. package/src/assets/scss/components/_datetimepicker.scss +10 -0
  54. package/src/assets/scss/components/_dropdown.scss +241 -0
  55. package/src/assets/scss/components/_field.scss +154 -0
  56. package/src/assets/scss/components/_icon.scss +53 -0
  57. package/src/assets/scss/components/_input.scss +153 -0
  58. package/src/assets/scss/components/_inputitems.scss +175 -0
  59. package/src/assets/scss/components/_loading.scss +45 -0
  60. package/src/assets/scss/components/_menu.scss +124 -0
  61. package/src/assets/scss/components/_modal.scss +103 -0
  62. package/src/assets/scss/components/_notification.scss +212 -0
  63. package/src/assets/scss/components/_pagination.scss +256 -0
  64. package/src/assets/scss/components/_radio.scss +121 -0
  65. package/src/assets/scss/components/_select.scss +168 -0
  66. package/src/assets/scss/components/_sidebar.scss +112 -0
  67. package/src/assets/scss/components/_skeleton.scss +93 -0
  68. package/src/assets/scss/components/_slider.scss +241 -0
  69. package/src/assets/scss/components/_steps.scss +599 -0
  70. package/src/assets/scss/components/_switch.scss +171 -0
  71. package/src/assets/scss/components/_table.scss +481 -0
  72. package/src/assets/scss/components/_tabs.scss +385 -0
  73. package/src/assets/scss/components/_timepicker.scss +116 -0
  74. package/src/assets/scss/components/_tooltip.scss +345 -0
  75. package/src/assets/scss/components/_upload.scss +74 -0
  76. package/src/assets/scss/oruga-common.scss +37 -0
  77. package/src/assets/scss/oruga-full.scss +9 -0
  78. package/src/assets/scss/oruga.scss +197 -0
  79. package/src/assets/scss/utils/_animations.scss +231 -0
  80. package/src/assets/scss/utils/_base.scss +31 -0
  81. package/src/assets/scss/utils/_helpers.scss +211 -0
  82. package/src/assets/scss/utils/_root.scss +28 -0
  83. package/src/assets/scss/utils/_variables.scss +105 -0
  84. package/src/components/Autocomplete.vue +606 -0
  85. package/src/components/Button.vue +80 -0
  86. package/src/components/Carousel.vue +296 -0
  87. package/src/components/Checkbox.vue +134 -0
  88. package/src/components/Collapse.vue +132 -0
  89. package/src/components/Datepicker.vue +285 -0
  90. package/src/components/Datetimepicker.vue +127 -0
  91. package/src/components/Dropdown.vue +284 -0
  92. package/src/components/Field.vue +243 -0
  93. package/src/components/Icon.vue +66 -0
  94. package/src/components/Input.vue +121 -0
  95. package/src/components/Loading.vue +71 -0
  96. package/src/components/Modal.vue +171 -0
  97. package/src/components/Notification.vue +136 -0
  98. package/src/components/Pagination.vue +97 -0
  99. package/src/components/Radio.vue +95 -0
  100. package/src/components/Select.vue +155 -0
  101. package/src/components/Sidebar.vue +56 -0
  102. package/src/components/Skeleton.vue +57 -0
  103. package/src/components/Slider.vue +226 -0
  104. package/src/components/Steps.vue +234 -0
  105. package/src/components/Switch.vue +134 -0
  106. package/src/components/Table.vue +285 -0
  107. package/src/components/Tabs.vue +208 -0
  108. package/src/components/Taginput.vue +507 -0
  109. package/src/components/Timepicker.vue +124 -0
  110. package/src/components/Tooltip.vue +149 -0
  111. package/src/components/Upload.vue +66 -0
  112. package/src/main.ts +29 -0
  113. package/src/plugins/theme.ts +1 -0
  114. package/src/router/index.ts +39 -0
  115. package/src/views/Home.vue +24 -0
  116. package/types/index.d.ts +1 -0
@@ -0,0 +1,285 @@
1
+ <script setup lang="ts">
2
+ import { computed, onMounted, ref } from "vue";
3
+
4
+ const today = new Date();
5
+ const thisMonth = today.getMonth();
6
+ const thisYear = today.getFullYear();
7
+ const events = [
8
+ new Date(thisYear, thisMonth, 2),
9
+ new Date(thisYear, thisMonth, 6),
10
+ {
11
+ date: new Date(thisYear, thisMonth, 6),
12
+ type: "info",
13
+ },
14
+ {
15
+ date: new Date(thisYear, thisMonth, 8),
16
+ type: "danger",
17
+ },
18
+ {
19
+ date: new Date(thisYear, thisMonth, 10),
20
+ type: "success",
21
+ },
22
+ {
23
+ date: new Date(thisYear, thisMonth, 10),
24
+ type: "link",
25
+ },
26
+ new Date(thisYear, thisMonth, 12),
27
+ {
28
+ date: new Date(thisYear, thisMonth, 12),
29
+ type: "warning",
30
+ },
31
+ {
32
+ date: new Date(thisYear, thisMonth, 16),
33
+ type: "danger",
34
+ },
35
+ new Date(thisYear, thisMonth, 20),
36
+ {
37
+ date: new Date(thisYear, thisMonth, 29),
38
+ type: "success",
39
+ },
40
+ {
41
+ date: new Date(thisYear, thisMonth, 29),
42
+ type: "warning",
43
+ },
44
+ {
45
+ date: new Date(thisYear, thisMonth, 29),
46
+ type: "info",
47
+ },
48
+ ];
49
+
50
+ const months = [
51
+ { name: "January", value: 0 },
52
+ { name: "February", value: 1 },
53
+ { name: "March", value: 2 },
54
+ { name: "April", value: 3 },
55
+ { name: "May", value: 4 },
56
+ { name: "June", value: 5 },
57
+ { name: "July", value: 6 },
58
+ { name: "August", value: 7 },
59
+ { name: "September", value: 8 },
60
+ { name: "October", value: 9 },
61
+ { name: "November", value: 10 },
62
+ { name: "December", value: 11 },
63
+ ];
64
+
65
+ const showWeekNumber = ref(false);
66
+ const locale = ref(); // Browser locale
67
+
68
+ const bars = ref(false);
69
+ const indicators = computed((): string => (bars.value ? "bars" : "dots"));
70
+
71
+ const selected = ref(new Date());
72
+ const selectedString = computed(() =>
73
+ selected.value ? selected.value.toDateString() : "",
74
+ );
75
+
76
+ const date = ref<Date | null>(new Date());
77
+ const multiple = ref([]);
78
+ const range = ref([]);
79
+
80
+ const minDate = new Date(
81
+ today.getFullYear(),
82
+ today.getMonth(),
83
+ today.getDate() - 7,
84
+ );
85
+ const maxDate = new Date(
86
+ today.getFullYear(),
87
+ today.getMonth(),
88
+ today.getDate() + 7,
89
+ );
90
+
91
+ const month = ref();
92
+
93
+ function selectMonth(option: { name: string; value: number }) {
94
+ if (!option || !date.value) return;
95
+
96
+ date.value.setMonth(option.value);
97
+ }
98
+
99
+ onMounted(() => {
100
+ month.value = months.filter(
101
+ (item) => item.value == date.value?.getMonth(),
102
+ )[0].name;
103
+ });
104
+ const datepicker = ref<any>(null);
105
+ </script>
106
+
107
+ <template>
108
+ <section>
109
+ <h2>Datepicker Demo</h2>
110
+ <hr />
111
+ </section>
112
+
113
+ <section>
114
+ <h3>Base</h3>
115
+
116
+ <o-field grouped>
117
+ <o-field>
118
+ <o-select v-model="locale" placeholder="Locale">
119
+ <option :value="undefined"></option>
120
+ <option value="de-DE">de-DE</option>
121
+ <option value="en-CA">en-CA</option>
122
+ <option value="en-GB">en-GB</option>
123
+ <option value="en-US">en-US</option>
124
+ <option value="es-ES">es-ES</option>
125
+ <option value="es-MX">es-MX</option>
126
+ <option value="fr-CA">fr-CA</option>
127
+ <option value="fr-FR">fr-FR</option>
128
+ <option value="it-IT">it-IT</option>
129
+ <option value="ja-JP">ja-JP</option>
130
+ <option value="pt-BR">pt-BR</option>
131
+ <option value="ru-RU">ru-RU</option>
132
+ </o-select>
133
+ </o-field>
134
+ <o-field>
135
+ <o-switch v-model="showWeekNumber">Show week number</o-switch>
136
+ </o-field>
137
+ </o-field>
138
+
139
+ <o-field label="Select a date">
140
+ <o-datepicker
141
+ v-model="selected"
142
+ :show-week-number="showWeekNumber"
143
+ :locale="locale"
144
+ placeholder="Click to select..."
145
+ icon="calendar"
146
+ :events="events"
147
+ :indicators="indicators"
148
+ trap-focus>
149
+ </o-datepicker>
150
+ </o-field>
151
+ <p><b>Selected:</b> {{ selected }}</p>
152
+ </section>
153
+
154
+ <section>
155
+ <h3>Min/Max date</h3>
156
+
157
+ <o-field label="Select a date">
158
+ <o-datepicker
159
+ placeholder="Click to select..."
160
+ icon="calendar"
161
+ :min-date="minDate"
162
+ :max-date="maxDate" />
163
+ </o-field>
164
+ </section>
165
+
166
+ <section>
167
+ <h3>Range</h3>
168
+
169
+ <o-field label="Select a date">
170
+ <o-datepicker
171
+ v-model="range"
172
+ :show-week-number="showWeekNumber"
173
+ :locale="locale"
174
+ placeholder="Click to select..."
175
+ icon="calendar"
176
+ trap-focus
177
+ range>
178
+ </o-datepicker>
179
+ </o-field>
180
+ <p><b>Selected:</b> {{ range }}</p>
181
+ </section>
182
+
183
+ <section>
184
+ <h3>Multiple</h3>
185
+
186
+ <o-field label="Select a date">
187
+ <o-datepicker
188
+ v-model="multiple"
189
+ multiple
190
+ placeholder="Click to select..." />
191
+ </o-field>
192
+ <p><b>Selected:</b> {{ multiple }}</p>
193
+ </section>
194
+
195
+ <section>
196
+ <h3>Trigger</h3>
197
+
198
+ <o-field label="Select a date" grouped>
199
+ <o-datepicker v-model="selected">
200
+ <template #trigger>
201
+ <o-button icon-left="calendar" type="primary" />
202
+ </template>
203
+ </o-datepicker>
204
+ <o-input v-model="selectedString" readonly expanded />
205
+ </o-field>
206
+ </section>
207
+
208
+ <section>
209
+ <h3>Programmatically</h3>
210
+
211
+ <o-field>
212
+ <o-datepicker ref="datepicker" expanded placeholder="Select a date" />
213
+
214
+ <o-button
215
+ icon-left="calendar"
216
+ type="primary"
217
+ @click="datepicker?.toggle()" />
218
+ </o-field>
219
+ </section>
220
+
221
+ <section>
222
+ <h3>Slots</h3>
223
+
224
+ <o-field label="Select a date">
225
+ <o-datepicker
226
+ v-model="date"
227
+ :first-day-of-week="1"
228
+ placeholder="Click to select...">
229
+ <template #header>
230
+ <o-field>
231
+ <o-autocomplete
232
+ v-model="month"
233
+ root-class="flex-grow-1"
234
+ open-on-focus
235
+ readonly
236
+ :data="months"
237
+ field="name"
238
+ expanded
239
+ @select="selectMonth" />
240
+ <o-button disabled>{{ date?.getFullYear() }}</o-button>
241
+ </o-field>
242
+ </template>
243
+ <template #footer>
244
+ <div class="d-flex justify-content-end mt-2">
245
+ <o-button variant="primary" @click="date = new Date()">
246
+ <o-icon icon="calendar"></o-icon>
247
+ <span>Today</span>
248
+ </o-button>
249
+
250
+ <o-button variant="danger" @click="date = null">
251
+ <o-icon icon="times"></o-icon>
252
+ <span>Clear</span>
253
+ </o-button>
254
+ </div>
255
+ </template>
256
+ </o-datepicker>
257
+ </o-field>
258
+ </section>
259
+
260
+ <section>
261
+ <h3>Events</h3>
262
+
263
+ <o-field>
264
+ <o-switch v-model="bars">Bars</o-switch>
265
+ </o-field>
266
+
267
+ <o-datepicker
268
+ v-model="date"
269
+ inline
270
+ :events="events"
271
+ :indicators="indicators" />
272
+ </section>
273
+
274
+ <section>
275
+ <h3>Month picker</h3>
276
+
277
+ <o-field label="Select a month">
278
+ <o-datepicker
279
+ placeholder="Click to select..."
280
+ icon="calendar"
281
+ type="month">
282
+ </o-datepicker>
283
+ </o-field>
284
+ </section>
285
+ </template>
@@ -0,0 +1,127 @@
1
+ <script setup lang="ts">
2
+ import { ref } from "vue";
3
+
4
+ const showWeekNumber = ref(false);
5
+ const enableSeconds = ref(false);
6
+ const hourFormat = ref(); // Browser locale
7
+ const locale = ref(); // Browser locale
8
+
9
+ const datetime = ref<Date | null>(new Date());
10
+
11
+ const minDatetime = ref(null);
12
+ const maxDatetime = ref(null);
13
+ </script>
14
+
15
+ <template>
16
+ <section>
17
+ <h2>Datetimepicker Demo</h2>
18
+ <hr />
19
+ </section>
20
+
21
+ <section>
22
+ <h2>Base</h2>
23
+
24
+ <o-field grouped>
25
+ <o-field>
26
+ <o-switch v-model="showWeekNumber">Show week number</o-switch>
27
+ </o-field>
28
+ <o-field>
29
+ <o-switch v-model="enableSeconds">Enable seconds</o-switch>
30
+ </o-field>
31
+ <o-field label="Locale">
32
+ <o-select v-model="locale">
33
+ <option :value="undefined"></option>
34
+ <option value="de-DE">de-DE</option>
35
+ <option value="en-CA">en-CA</option>
36
+ <option value="en-GB">en-GB</option>
37
+ <option value="en-US">en-US</option>
38
+ <option value="es-ES">es-ES</option>
39
+ <option value="es-MX">es-MX</option>
40
+ <option value="fr-CA">fr-CA</option>
41
+ <option value="fr-FR">fr-FR</option>
42
+ <option value="it-IT">it-IT</option>
43
+ <option value="ja-JP">ja-JP</option>
44
+ <option value="pt-BR">pt-BR</option>
45
+ <option value="ru-RU">ru-RU</option>
46
+ <option value="zn-CN">zn-CN</option>
47
+ </o-select>
48
+ </o-field>
49
+ <o-field label="Hour format">
50
+ <o-select v-model="hourFormat">
51
+ <option :value="undefined"></option>
52
+ <option value="12">12</option>
53
+ <option value="24">24</option>
54
+ </o-select>
55
+ </o-field>
56
+ </o-field>
57
+
58
+ <o-field label="Select datetime">
59
+ <o-datetimepicker
60
+ rounded
61
+ placeholder="Click to select..."
62
+ icon="calendar"
63
+ :locale="locale"
64
+ :datepicker="{ showWeekNumber }"
65
+ :timepicker="{ enableSeconds, hourFormat }" />
66
+ </o-field>
67
+ </section>
68
+
69
+ <section>
70
+ <h3>Inline</h3>
71
+
72
+ <o-datetimepicker v-model="datetime" inline />
73
+ </section>
74
+
75
+ <section>
76
+ <h3>Footer</h3>
77
+
78
+ <o-field label="Select datetime">
79
+ <o-datetimepicker v-model="datetime" placeholder="Click to select...">
80
+ <template #footer>
81
+ <div class="d-flex justify-content-center mt-3">
82
+ <o-button variant="primary" @click="datetime = new Date()">
83
+ <o-icon icon="calendar"></o-icon>
84
+ <span>Today</span>
85
+ </o-button>
86
+ <o-button variant="danger" @click="datetime = null">
87
+ <o-icon icon="times"></o-icon>
88
+ <span>Clear</span>
89
+ </o-button>
90
+ </div>
91
+ </template>
92
+ </o-datetimepicker>
93
+ </o-field>
94
+ </section>
95
+
96
+ <section>
97
+ <h3>Min/Max Datetime</h3>
98
+
99
+ <o-field grouped>
100
+ <o-field label="Min Datetime">
101
+ <o-datetimepicker
102
+ v-model="minDatetime"
103
+ rounded
104
+ placeholder="Click to select..."
105
+ icon="calendar"
106
+ editable />
107
+ </o-field>
108
+ <o-field label="Max Datetime">
109
+ <o-datetimepicker
110
+ v-model="maxDatetime"
111
+ rounded
112
+ placeholder="Click to select..."
113
+ icon="calendar"
114
+ editable />
115
+ </o-field>
116
+ </o-field>
117
+
118
+ <o-field label="Select datetime">
119
+ <o-datetimepicker
120
+ rounded
121
+ placeholder="Click to select..."
122
+ icon="calendar"
123
+ :min-datetime="minDatetime"
124
+ :max-datetime="maxDatetime" />
125
+ </o-field>
126
+ </section>
127
+ </template>
@@ -0,0 +1,284 @@
1
+ <script setup lang="ts">
2
+ import { ref } from "vue";
3
+
4
+ const isScrollable = ref(true);
5
+ const maxHeight = ref(200);
6
+ const currentMenu = ref({ icon: "users", text: "People" });
7
+ const menus = ref([
8
+ { icon: "users", text: "People" },
9
+ { icon: "box", text: "Orders" },
10
+ { icon: "credit-card", text: "Payments" },
11
+ { icon: "dolly", text: "Logistics" },
12
+ { icon: "business-time", text: "Jobs" },
13
+ { icon: "shopping-cart", text: "Cart" },
14
+ { icon: "cog", text: "Configuration" },
15
+ ]);
16
+ const selectedOptions = ref([]);
17
+ </script>
18
+
19
+ <template>
20
+ <section>
21
+ <h2>Dropdown Demo</h2>
22
+ <hr />
23
+ </section>
24
+
25
+ <section>
26
+ <h3>Base</h3>
27
+
28
+ <div class="dropdown-example">
29
+ <o-dropdown aria-role="list">
30
+ <template #trigger>
31
+ <o-button
32
+ variant="primary"
33
+ class="dropdown-toggle"
34
+ label="Click me!" />
35
+ </template>
36
+
37
+ <o-dropdown-item aria-role="listitem">Action</o-dropdown-item>
38
+ <o-dropdown-item aria-role="listitem">Another action</o-dropdown-item>
39
+ <o-dropdown-item aria-role="listitem">Something else</o-dropdown-item>
40
+ </o-dropdown>
41
+ </div>
42
+
43
+ <div class="dropdown-example">
44
+ <o-dropdown :triggers="['hover']" aria-role="list">
45
+ <template #trigger>
46
+ <o-button variant="info" class="dropdown-toggle" label="Hover me!" />
47
+ </template>
48
+
49
+ <o-dropdown-item aria-role="listitem">Action</o-dropdown-item>
50
+ <o-dropdown-item aria-role="listitem">Another action</o-dropdown-item>
51
+ <o-dropdown-item aria-role="listitem">Something else</o-dropdown-item>
52
+ </o-dropdown>
53
+ </div>
54
+
55
+ <div class="dropdown-example">
56
+ <o-dropdown disabled aria-role="list">
57
+ <template #trigger>
58
+ <o-button class="dropdown-toggle" label="Disabled" disabled />
59
+ </template>
60
+
61
+ <o-dropdown-item aria-role="listitem">Action</o-dropdown-item>
62
+ <o-dropdown-item aria-role="listitem">Another action</o-dropdown-item>
63
+ <o-dropdown-item aria-role="listitem">Something else</o-dropdown-item>
64
+ </o-dropdown>
65
+ </div>
66
+
67
+ <div class="dropdown-example">
68
+ <o-dropdown aria-role="list">
69
+ <template #trigger="{ active }">
70
+ <span role="button">
71
+ Custom
72
+ <o-icon
73
+ variant="success"
74
+ :icon="active ? 'caret-up' : 'caret-down'" />
75
+ </span>
76
+ </template>
77
+
78
+ <o-dropdown-item aria-role="listitem">Action</o-dropdown-item>
79
+ <o-dropdown-item aria-role="listitem">Another action</o-dropdown-item>
80
+ <o-dropdown-item aria-role="listitem">Something else</o-dropdown-item>
81
+ </o-dropdown>
82
+ </div>
83
+
84
+ <div class="dropdown-example">
85
+ <o-dropdown :triggers="['contextmenu']" aria-role="list">
86
+ <template #trigger>
87
+ <o-button label="Right click" />
88
+ </template>
89
+
90
+ <o-dropdown-item aria-role="listitem">Action</o-dropdown-item>
91
+ <o-dropdown-item aria-role="listitem">Another action</o-dropdown-item>
92
+ <o-dropdown-item aria-role="listitem">Something else</o-dropdown-item>
93
+ </o-dropdown>
94
+ </div>
95
+ </section>
96
+
97
+ <section>
98
+ <h3>Inline</h3>
99
+
100
+ <div class="dropdown-example">
101
+ <o-dropdown inline aria-role="list">
102
+ <template #trigger>
103
+ <o-button label="Inline" />
104
+ </template>
105
+
106
+ <o-dropdown-item aria-role="listitem" value="1">
107
+ Action
108
+ </o-dropdown-item>
109
+ <o-dropdown-item aria-role="listitem" value="2">
110
+ Another action
111
+ </o-dropdown-item>
112
+ <o-dropdown-item aria-role="listitem" value="3">
113
+ Something else
114
+ </o-dropdown-item>
115
+ </o-dropdown>
116
+ </div>
117
+ </section>
118
+
119
+ <section>
120
+ <h3>Scrollable</h3>
121
+
122
+ <div>
123
+ <o-field>
124
+ <o-switch v-model="isScrollable">Scrollable</o-switch>
125
+ </o-field>
126
+ </div>
127
+
128
+ <o-dropdown
129
+ v-model="currentMenu"
130
+ :scrollable="isScrollable"
131
+ :max-height="maxHeight"
132
+ aria-role="list">
133
+ <template #trigger>
134
+ <o-button variant="primary" type="button" class="dropdown-toggle">
135
+ <o-icon :icon="currentMenu.icon" />
136
+ <span>{{ currentMenu.text }}</span>
137
+ </o-button>
138
+ </template>
139
+
140
+ <o-dropdown-item
141
+ v-for="(menu, index) in menus"
142
+ :key="index"
143
+ :value="menu"
144
+ aria-role="listitem">
145
+ <div class="media">
146
+ <o-icon class="media-left" :icon="menu.icon" />
147
+ <div class="media-content">
148
+ <span>{{ menu.text }}</span>
149
+ </div>
150
+ </div>
151
+ </o-dropdown-item>
152
+ </o-dropdown>
153
+ </section>
154
+
155
+ <section>
156
+ <h3>Multiple</h3>
157
+
158
+ <p><b>selected</b>: {{ selectedOptions }}</p>
159
+ <o-dropdown v-model="selectedOptions" multiple aria-role="list">
160
+ <template #trigger>
161
+ <o-button variant="primary" type="button" class="dropdown-toggle">
162
+ <span>Selected ({{ selectedOptions.length }})</span>
163
+ </o-button>
164
+ </template>
165
+
166
+ <o-dropdown-item value="option1" aria-role="listitem">
167
+ option 1
168
+ </o-dropdown-item>
169
+
170
+ <o-dropdown-item value="option2" aria-role="listitem">
171
+ Option 2
172
+ </o-dropdown-item>
173
+
174
+ <o-dropdown-item value="option3" aria-role="listitem">
175
+ Option 3
176
+ </o-dropdown-item>
177
+ </o-dropdown>
178
+ </section>
179
+
180
+ <section>
181
+ <h3>Positioning & Expanded</h3>
182
+
183
+ <div class="dropdown-example expanded">
184
+ <o-dropdown position="top-right" aria-role="list" expanded>
185
+ <template #trigger>
186
+ <o-button
187
+ class="dropdown-toggle"
188
+ variant="primary"
189
+ label="Position top right"
190
+ expanded />
191
+ </template>
192
+
193
+ <o-dropdown-item aria-role="listitem">Action</o-dropdown-item>
194
+ <o-dropdown-item aria-role="listitem">Another action</o-dropdown-item>
195
+ <o-dropdown-item aria-role="listitem">Something else</o-dropdown-item>
196
+ </o-dropdown>
197
+ </div>
198
+
199
+ <div class="dropdown-example expanded">
200
+ <o-dropdown position="top-left" aria-role="list" expanded>
201
+ <template #trigger>
202
+ <o-button
203
+ class="dropdown-toggle"
204
+ variant="primary"
205
+ label="Position top left"
206
+ expanded />
207
+ </template>
208
+
209
+ <o-dropdown-item aria-role="listitem">Action</o-dropdown-item>
210
+ <o-dropdown-item aria-role="listitem">Another action</o-dropdown-item>
211
+ <o-dropdown-item aria-role="listitem">Something else</o-dropdown-item>
212
+ </o-dropdown>
213
+ </div>
214
+
215
+ <div class="dropdown-example expanded">
216
+ <o-dropdown position="bottom-left" aria-role="list" expanded>
217
+ <template #trigger>
218
+ <o-button
219
+ class="dropdown-toggle"
220
+ variant="primary"
221
+ label="Position bottom left"
222
+ expanded />
223
+ </template>
224
+
225
+ <o-dropdown-item aria-role="listitem">Action</o-dropdown-item>
226
+ <o-dropdown-item aria-role="listitem">Another action</o-dropdown-item>
227
+ <o-dropdown-item aria-role="listitem">Something else</o-dropdown-item>
228
+ </o-dropdown>
229
+ </div>
230
+
231
+ <div class="dropdown-example expanded">
232
+ <o-dropdown position="bottom-right" aria-role="list" expanded>
233
+ <template #trigger>
234
+ <o-button
235
+ class="dropdown-toggle"
236
+ variant="primary"
237
+ label="Position bottom right"
238
+ expanded />
239
+ </template>
240
+
241
+ <o-dropdown-item aria-role="listitem">Action</o-dropdown-item>
242
+ <o-dropdown-item aria-role="listitem">Another action</o-dropdown-item>
243
+ <o-dropdown-item aria-role="listitem">Something else</o-dropdown-item>
244
+ </o-dropdown>
245
+ </div>
246
+ </section>
247
+ </template>
248
+
249
+ <style scoped lang="scss">
250
+ .dropdown-example {
251
+ display: inline-flex;
252
+ position: relative;
253
+ vertical-align: top;
254
+
255
+ &.expanded {
256
+ display: block;
257
+ }
258
+
259
+ &:not(:last-child) {
260
+ margin-right: 0.5rem;
261
+ margin-bottom: 0.5rem;
262
+ }
263
+ }
264
+
265
+ .media {
266
+ align-items: flex-start;
267
+ display: flex;
268
+ text-align: left;
269
+ .media-content {
270
+ flex-basis: auto;
271
+ flex-grow: 1;
272
+ flex-shrink: 1;
273
+ text-align: left;
274
+ overflow-y: hidden;
275
+ overflow-x: auto;
276
+ }
277
+ .media-left {
278
+ margin-right: 1rem;
279
+ flex-basis: auto;
280
+ flex-grow: 0;
281
+ flex-shrink: 0;
282
+ }
283
+ }
284
+ </style>