diff --git a/docs/app/components/content/examples/input-menu/InputMenuCountriesExample.vue b/docs/app/components/content/examples/input-menu/InputMenuCountriesExample.vue new file mode 100644 index 00000000..24bb14be --- /dev/null +++ b/docs/app/components/content/examples/input-menu/InputMenuCountriesExample.vue @@ -0,0 +1,40 @@ + + + diff --git a/docs/app/components/content/examples/select-menu/SelectMenuCountriesExample.vue b/docs/app/components/content/examples/select-menu/SelectMenuCountriesExample.vue new file mode 100644 index 00000000..23f88b06 --- /dev/null +++ b/docs/app/components/content/examples/select-menu/SelectMenuCountriesExample.vue @@ -0,0 +1,40 @@ + + + diff --git a/docs/content/3.components/input-menu.md b/docs/content/3.components/input-menu.md index e0aef114..588ff098 100644 --- a/docs/content/3.components/input-menu.md +++ b/docs/content/3.components/input-menu.md @@ -703,6 +703,17 @@ name: 'input-menu-filter-fields-example' --- :: +### As a country picker + +This example demonstrates using the InputMenu as a country picker with lazy loading - countries are only fetched when the menu is opened. + +::component-example +--- +collapse: true +name: 'input-menu-countries-example' +--- +:: + ## API ### Props diff --git a/docs/content/3.components/select-menu.md b/docs/content/3.components/select-menu.md index 5d53dc4a..d052d229 100644 --- a/docs/content/3.components/select-menu.md +++ b/docs/content/3.components/select-menu.md @@ -740,6 +740,17 @@ name: 'select-menu-filter-fields-example' --- :: +### As a country picker + +This example demonstrates using the SelectMenu as a country picker with lazy loading - countries are only fetched when the menu is opened. + +::component-example +--- +collapse: true +name: 'select-menu-countries-example' +--- +:: + ## API ### Props diff --git a/docs/nuxt.config.ts b/docs/nuxt.config.ts index 3f37f6c8..fa9b54fc 100644 --- a/docs/nuxt.config.ts +++ b/docs/nuxt.config.ts @@ -70,7 +70,8 @@ export default defineNuxtConfig({ nitro: { prerender: { routes: [ - '/getting-started' + '/getting-started', + '/api/countries.json' // '/api/releases.json', // '/api/pulls.json' ], diff --git a/docs/server/api/countries.json.get.ts b/docs/server/api/countries.json.get.ts new file mode 100644 index 00000000..9127a410 --- /dev/null +++ b/docs/server/api/countries.json.get.ts @@ -0,0 +1,202 @@ +type Country = { + name: string + code: string + emoji: string +} + +const countries: Country[] = [ + { name: 'Afghanistan', code: 'AF', emoji: '🇦🇫' }, + { name: 'Albania', code: 'AL', emoji: '🇦🇱' }, + { name: 'Algeria', code: 'DZ', emoji: '🇩🇿' }, + { name: 'Andorra', code: 'AD', emoji: '🇦🇩' }, + { name: 'Angola', code: 'AO', emoji: '🇦🇴' }, + { name: 'Antigua and Barbuda', code: 'AG', emoji: '🇦🇬' }, + { name: 'Argentina', code: 'AR', emoji: '🇦🇷' }, + { name: 'Armenia', code: 'AM', emoji: '🇦🇲' }, + { name: 'Australia', code: 'AU', emoji: '🇦🇺' }, + { name: 'Austria', code: 'AT', emoji: '🇦🇹' }, + { name: 'Azerbaijan', code: 'AZ', emoji: '🇦🇿' }, + { name: 'Bahamas', code: 'BS', emoji: '🇧🇸' }, + { name: 'Bahrain', code: 'BH', emoji: '🇧🇭' }, + { name: 'Bangladesh', code: 'BD', emoji: '🇧🇩' }, + { name: 'Barbados', code: 'BB', emoji: '🇧🇧' }, + { name: 'Belarus', code: 'BY', emoji: '🇧🇾' }, + { name: 'Belgium', code: 'BE', emoji: '🇧🇪' }, + { name: 'Belize', code: 'BZ', emoji: '🇧🇿' }, + { name: 'Benin', code: 'BJ', emoji: '🇧🇯' }, + { name: 'Bhutan', code: 'BT', emoji: '🇧🇹' }, + { name: 'Bolivia', code: 'BO', emoji: '🇧🇴' }, + { name: 'Bosnia and Herzegovina', code: 'BA', emoji: '🇧🇦' }, + { name: 'Botswana', code: 'BW', emoji: '🇧🇼' }, + { name: 'Brazil', code: 'BR', emoji: '🇧🇷' }, + { name: 'Brunei', code: 'BN', emoji: '🇧🇳' }, + { name: 'Bulgaria', code: 'BG', emoji: '🇧🇬' }, + { name: 'Burkina Faso', code: 'BF', emoji: '🇧🇫' }, + { name: 'Burundi', code: 'BI', emoji: '🇧🇮' }, + { name: 'Cambodia', code: 'KH', emoji: '🇰🇭' }, + { name: 'Cameroon', code: 'CM', emoji: '🇨🇲' }, + { name: 'Canada', code: 'CA', emoji: '🇨🇦' }, + { name: 'Cape Verde', code: 'CV', emoji: '🇨🇻' }, + { name: 'Central African Republic', code: 'CF', emoji: '🇨🇫' }, + { name: 'Chad', code: 'TD', emoji: '🇹🇩' }, + { name: 'Chile', code: 'CL', emoji: '🇨🇱' }, + { name: 'China', code: 'CN', emoji: '🇨🇳' }, + { name: 'Colombia', code: 'CO', emoji: '🇨🇴' }, + { name: 'Comoros', code: 'KM', emoji: '🇰🇲' }, + { name: 'Congo', code: 'CG', emoji: '🇨🇬' }, + { name: 'Costa Rica', code: 'CR', emoji: '🇨🇷' }, + { name: 'Croatia', code: 'HR', emoji: '🇭🇷' }, + { name: 'Cuba', code: 'CU', emoji: '🇨🇺' }, + { name: 'Cyprus', code: 'CY', emoji: '🇨🇾' }, + { name: 'Czech Republic', code: 'CZ', emoji: '🇨🇿' }, + { name: 'Denmark', code: 'DK', emoji: '🇩🇰' }, + { name: 'Djibouti', code: 'DJ', emoji: '🇩🇯' }, + { name: 'Dominica', code: 'DM', emoji: '🇩🇲' }, + { name: 'Dominican Republic', code: 'DO', emoji: '🇩🇴' }, + { name: 'East Timor', code: 'TL', emoji: '🇹🇱' }, + { name: 'Ecuador', code: 'EC', emoji: '🇪🇨' }, + { name: 'Egypt', code: 'EG', emoji: '🇪🇬' }, + { name: 'El Salvador', code: 'SV', emoji: '🇸🇻' }, + { name: 'Equatorial Guinea', code: 'GQ', emoji: '🇬🇶' }, + { name: 'Eritrea', code: 'ER', emoji: '🇪🇷' }, + { name: 'Estonia', code: 'EE', emoji: '🇪🇪' }, + { name: 'Ethiopia', code: 'ET', emoji: '🇪🇹' }, + { name: 'Fiji', code: 'FJ', emoji: '🇫🇯' }, + { name: 'Finland', code: 'FI', emoji: '🇫🇮' }, + { name: 'France', code: 'FR', emoji: '🇫🇷' }, + { name: 'Gabon', code: 'GA', emoji: '🇬🇦' }, + { name: 'Gambia', code: 'GM', emoji: '🇬🇲' }, + { name: 'Georgia', code: 'GE', emoji: '🇬🇪' }, + { name: 'Germany', code: 'DE', emoji: '🇩🇪' }, + { name: 'Ghana', code: 'GH', emoji: '🇬🇭' }, + { name: 'Greece', code: 'GR', emoji: '🇬🇷' }, + { name: 'Grenada', code: 'GD', emoji: '🇬🇩' }, + { name: 'Guatemala', code: 'GT', emoji: '🇬🇹' }, + { name: 'Guinea', code: 'GN', emoji: '🇬🇳' }, + { name: 'Guinea-Bissau', code: 'GW', emoji: '🇬🇼' }, + { name: 'Guyana', code: 'GY', emoji: '🇬🇾' }, + { name: 'Haiti', code: 'HT', emoji: '🇭🇹' }, + { name: 'Honduras', code: 'HN', emoji: '🇭🇳' }, + { name: 'Hungary', code: 'HU', emoji: '🇭🇺' }, + { name: 'Iceland', code: 'IS', emoji: '🇮🇸' }, + { name: 'India', code: 'IN', emoji: '🇮🇳' }, + { name: 'Indonesia', code: 'ID', emoji: '🇮🇩' }, + { name: 'Iran', code: 'IR', emoji: '🇮🇷' }, + { name: 'Iraq', code: 'IQ', emoji: '🇮🇶' }, + { name: 'Ireland', code: 'IE', emoji: '🇮🇪' }, + { name: 'Israel', code: 'IL', emoji: '🇮🇱' }, + { name: 'Italy', code: 'IT', emoji: '🇮🇹' }, + { name: 'Jamaica', code: 'JM', emoji: '🇯🇲' }, + { name: 'Japan', code: 'JP', emoji: '🇯🇵' }, + { name: 'Jordan', code: 'JO', emoji: '🇯🇴' }, + { name: 'Kazakhstan', code: 'KZ', emoji: '🇰🇿' }, + { name: 'Kenya', code: 'KE', emoji: '🇰🇪' }, + { name: 'Kiribati', code: 'KI', emoji: '🇰🇷' }, + { name: 'Kuwait', code: 'KW', emoji: '🇰🇼' }, + { name: 'Kyrgyzstan', code: 'KG', emoji: '🇰🇬' }, + { name: 'Laos', code: 'LA', emoji: '🇱🇦' }, + { name: 'Latvia', code: 'LV', emoji: '🇱🇻' }, + { name: 'Lebanon', code: 'LB', emoji: '🇱🇧' }, + { name: 'Lesotho', code: 'LS', emoji: '🇱🇸' }, + { name: 'Liberia', code: 'LR', emoji: '🇱🇷' }, + { name: 'Libya', code: 'LY', emoji: '🇱🇾' }, + { name: 'Liechtenstein', code: 'LI', emoji: '🇱🇮' }, + { name: 'Lithuania', code: 'LT', emoji: '🇱🇹' }, + { name: 'Luxembourg', code: 'LU', emoji: '🇱🇺' }, + { name: 'Madagascar', code: 'MG', emoji: '🇲🇬' }, + { name: 'Malawi', code: 'MW', emoji: '🇲🇼' }, + { name: 'Malaysia', code: 'MY', emoji: '🇲🇾' }, + { name: 'Maldives', code: 'MV', emoji: '🇲🇻' }, + { name: 'Mali', code: 'ML', emoji: '🇲🇱' }, + { name: 'Malta', code: 'MT', emoji: '🇲🇹' }, + { name: 'Marshall Islands', code: 'MH', emoji: '🇲🇭' }, + { name: 'Mauritania', code: 'MR', emoji: '🇲🇦' }, + { name: 'Mauritius', code: 'MU', emoji: '🇲🇺' }, + { name: 'Mexico', code: 'MX', emoji: '🇲🇽' }, + { name: 'Micronesia', code: 'FM', emoji: '🇫🇲' }, + { name: 'Moldova', code: 'MD', emoji: '🇲🇩' }, + { name: 'Monaco', code: 'MC', emoji: '🇲🇨' }, + { name: 'Mongolia', code: 'MN', emoji: '🇲🇳' }, + { name: 'Montenegro', code: 'ME', emoji: '🇲🇪' }, + { name: 'Morocco', code: 'MA', emoji: '🇲🇦' }, + { name: 'Mozambique', code: 'MZ', emoji: '🇲🇿' }, + { name: 'Myanmar', code: 'MM', emoji: '🇲🇲' }, + { name: 'Namibia', code: 'NA', emoji: '🇳🇦' }, + { name: 'Nauru', code: 'NR', emoji: '🇳🇷' }, + { name: 'Nepal', code: 'NP', emoji: '🇳🇵' }, + { name: 'Netherlands', code: 'NL', emoji: '🇳🇱' }, + { name: 'New Zealand', code: 'NZ', emoji: '🇳🇿' }, + { name: 'Nicaragua', code: 'NI', emoji: '🇳🇮' }, + { name: 'Niger', code: 'NE', emoji: '🇳🇪' }, + { name: 'Nigeria', code: 'NG', emoji: '🇳🇬' }, + { name: 'North Macedonia', code: 'MK', emoji: '🇲🇰' }, + { name: 'Norway', code: 'NO', emoji: '🇳🇴' }, + { name: 'Oman', code: 'OM', emoji: '🇴🇲' }, + { name: 'Pakistan', code: 'PK', emoji: '🇵🇰' }, + { name: 'Palau', code: 'PW', emoji: '🇵🇼' }, + { name: 'Palestine', code: 'PS', emoji: '🇵🇸' }, + { name: 'Panama', code: 'PA', emoji: '🇵🇦' }, + { name: 'Papua New Guinea', code: 'PG', emoji: '🇵🇬' }, + { name: 'Paraguay', code: 'PY', emoji: '🇵🇾' }, + { name: 'Peru', code: 'PE', emoji: '🇵🇪' }, + { name: 'Philippines', code: 'PH', emoji: '🇵🇭' }, + { name: 'Poland', code: 'PL', emoji: '🇵🇱' }, + { name: 'Portugal', code: 'PT', emoji: '🇵🇹' }, + { name: 'Qatar', code: 'QA', emoji: '🇶🇦' }, + { name: 'Romania', code: 'RO', emoji: '🇷🇴' }, + { name: 'Russia', code: 'RU', emoji: '🇷🇺' }, + { name: 'Rwanda', code: 'RW', emoji: '🇷🇼' }, + { name: 'Saint Kitts and Nevis', code: 'KN', emoji: '🇰🇳' }, + { name: 'Saint Lucia', code: 'LC', emoji: '🇱🇨' }, + { name: 'Saint Vincent and the Grenadines', code: 'VC', emoji: '🇻🇨' }, + { name: 'Samoa', code: 'WS', emoji: '🇼🇸' }, + { name: 'San Marino', code: 'SM', emoji: '🇸🇲' }, + { name: 'Sao Tome and Principe', code: 'ST', emoji: '🇸🇹' }, + { name: 'Saudi Arabia', code: 'SA', emoji: '🇸🇦' }, + { name: 'Senegal', code: 'SN', emoji: '🇸🇳' }, + { name: 'Serbia', code: 'RS', emoji: '🇷🇸' }, + { name: 'Seychelles', code: 'SC', emoji: '🇸🇨' }, + { name: 'Sierra Leone', code: 'SL', emoji: '🇸🇱' }, + { name: 'Singapore', code: 'SG', emoji: '🇸🇬' }, + { name: 'Slovakia', code: 'SK', emoji: '🇸🇰' }, + { name: 'Slovenia', code: 'SI', emoji: '🇸🇮' }, + { name: 'Solomon Islands', code: 'SB', emoji: '🇸🇧' }, + { name: 'Somalia', code: 'SO', emoji: '🇸🇴' }, + { name: 'South Africa', code: 'ZA', emoji: '🇿🇦' }, + { name: 'South Korea', code: 'KR', emoji: '🇰🇷' }, + { name: 'South Sudan', code: 'SS', emoji: '🇸🇸' }, + { name: 'Spain', code: 'ES', emoji: '🇪🇸' }, + { name: 'Sri Lanka', code: 'LK', emoji: '🇱🇰' }, + { name: 'Sudan', code: 'SD', emoji: '🇸🇩' }, + { name: 'Suriname', code: 'SR', emoji: '🇸🇷' }, + { name: 'Sweden', code: 'SE', emoji: '🇸🇪' }, + { name: 'Switzerland', code: 'CH', emoji: '🇨🇭' }, + { name: 'Syria', code: 'SY', emoji: '🇸🇾' }, + { name: 'Taiwan', code: 'TW', emoji: '🇹🇼' }, + { name: 'Tajikistan', code: 'TJ', emoji: '🇹🇯' }, + { name: 'Tanzania', code: 'TZ', emoji: '🇹🇿' }, + { name: 'Thailand', code: 'TH', emoji: '🇹🇭' }, + { name: 'Togo', code: 'TG', emoji: '🇹🇬' }, + { name: 'Tonga', code: 'TO', emoji: '🇹🇴' }, + { name: 'Trinidad and Tobago', code: 'TT', emoji: '🇹🇹' }, + { name: 'Tunisia', code: 'TN', emoji: '🇹🇳' }, + { name: 'Turkey', code: 'TR', emoji: '🇹🇷' }, + { name: 'Turkmenistan', code: 'TM', emoji: '🇹🇲' }, + { name: 'Tuvalu', code: 'TV', emoji: '🇹🇻' }, + { name: 'Uganda', code: 'UG', emoji: '🇺🇬' }, + { name: 'Ukraine', code: 'UA', emoji: '🇺🇦' }, + { name: 'United Arab Emirates', code: 'AE', emoji: '🇦🇪' }, + { name: 'United Kingdom', code: 'GB', emoji: '🇬🇧' }, + { name: 'United States', code: 'US', emoji: '🇺🇸' }, + { name: 'Uruguay', code: 'UY', emoji: '🇺🇾' }, + { name: 'Uzbekistan', code: 'UZ', emoji: '🇺🇿' }, + { name: 'Vanuatu', code: 'VU', emoji: '🇻🇺' }, + { name: 'Vatican City', code: 'VA', emoji: '🇻🇦' }, + { name: 'Venezuela', code: 'VE', emoji: '🇻🇪' }, + { name: 'Vietnam', code: 'VN', emoji: '🇻🇳' }, + { name: 'Yemen', code: 'YE', emoji: '🇾🇪' }, + { name: 'Zambia', code: 'ZM', emoji: '🇿🇲' }, + { name: 'Zimbabwe', code: 'ZW', emoji: '🇿🇼' } +] + +export default eventHandler(async () => countries)