├── .env.example ├── .gitignore ├── .htaccess ├── Makefile ├── README.md ├── app.vue ├── assets └── css │ └── main.css ├── components ├── animate │ └── AnimateCircle.vue ├── footer │ └── FooterGuests.vue ├── headers │ └── PageHeader.vue ├── layouts │ ├── ArticleTemplate.vue │ ├── FullWidthElement.vue │ └── UniqueResource.vue ├── loaders │ ├── FullScreenSpinner.vue │ └── SmallUniversalSpinner.vue ├── logos │ └── ApplicationLogo.vue ├── modals │ └── CookieConsentModal.vue ├── navbars │ └── GuestsNavbar.vue ├── pagination │ ├── RenderlessPagination.vue │ └── TailwindPagination.vue ├── sections │ ├── SectionTitle.vue │ └── WidgetSectionBorder.vue ├── sidebars │ └── SlideOverPrimaryMenu.vue ├── sliders │ └── ThumbnailSmallImageSlider.vue └── users │ └── UserTag.vue ├── composables ├── helpers │ ├── isObject.js │ └── usePromise.js └── vueFetch.js ├── ecosystem.config.cjs ├── error.vue ├── helpers ├── delay.js ├── extract-text-content-html.js └── get-cookie.js ├── layouts ├── GuestsLayout.vue ├── Items.vue ├── MainLayout.vue └── items │ ├── ItemDisplaySelection.vue │ └── ItemsFilterSelection.vue ├── new_release ├── RELEASE_NOTES.md └── release_version.sh ├── nuxt.config.ts ├── package-lock.json ├── package.json ├── pages ├── [team_slug] │ └── [resource] │ │ └── [slug] │ │ └── [id_description] │ │ └── [id] │ │ └── index.vue ├── [user_folder] │ └── [username] │ │ └── index.vue ├── index.vue ├── jobs.vue ├── listings.vue ├── posts.vue └── professional.vue ├── public ├── android-chrome-192x192.png ├── android-chrome-512x512.png ├── apple-touch-icon.png ├── browserconfig.xml ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon.ico ├── images │ ├── brand-images │ │ ├── home.jpg │ │ └── home_old.jpg │ ├── home │ │ ├── fashion_show.jpg │ │ ├── frequently_asked_questions.jpg │ │ ├── girl_light_bg.jpg │ │ ├── orange_bg.jpg │ │ ├── pink-lady-high-resolution.jpg │ │ ├── the_furthest_dawn.jpg │ │ ├── three.jpg │ │ ├── woman_1.jpg │ │ ├── woman_2.jpg │ │ ├── woman_3.jpg │ │ └── woman_4.jpg │ └── logo │ │ └── logo.svg ├── mstile-144x144.png ├── mstile-150x150.png ├── mstile-310x150.png ├── mstile-310x310.png ├── mstile-70x70.png ├── safari-pinned-tab.svg └── site.webmanifest ├── server └── api │ └── __sitemap__ │ └── urls.ts ├── store └── user.ts ├── tailwind.config.js ├── tsconfig.json └── utils ├── page-builder ├── compile-css.js └── tailwaind-colors.js └── pricing ├── job-prices.js └── store-subscription-prices.js /.env.example: -------------------------------------------------------------------------------- 1 | LARAVEL_APP_URL_PRODUCTION=https://www.google.com 2 | LARAVEL_APP_URL=http://localhost:8000 3 | APP_URL=http://localhost:4000 4 | APP_NAME=MyApp 5 | APP_ENV=local 6 | GOOGLE_GTAG= 7 | PORT=4000 -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Nuxt dev/build outputs 2 | .output 3 | .data 4 | .nuxt 5 | .nitro 6 | .cache 7 | dist 8 | .htaccess 9 | 10 | 11 | # Node dependencies 12 | node_modules 13 | 14 | # Logs 15 | logs 16 | *.log 17 | 18 | # Misc 19 | .DS_Store 20 | .fleet 21 | .idea 22 | 23 | # Local env files 24 | .env 25 | .env.* 26 | !.env.example 27 | -------------------------------------------------------------------------------- /.htaccess: -------------------------------------------------------------------------------- 1 | DirectoryIndex disabled 2 | RewriteEngine On 3 | RewriteBase / 4 | 5 | RewriteCond %{HTTP_HOST} !^www\. [NC] 6 | RewriteRule ^(.*)$ https://www.demo.myissue.dk/$1 [L,R=301] 7 | 8 | RewriteRule ^(.*)?$ http://127.0.0.1:4000/$1 [P,L] -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | update: 2 | @echo "Updating version..." 3 | @sh ./new_release/release_version.sh -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | Logo 3 |

4 | 5 | # Free Page Builder, Listing Directory, Blog, and Job Board Theme 6 | 7 | Demo [play around](https://www.demo.myissue.dk) 8 | 9 | Laravel & Vue backend [repository](https://github.com/qaiswardag/laravel_vue_directory_and_job_board_theme) 10 | 11 | ## Introduction 12 | 13 | ### About 14 | 15 | Introducing the **Free Page Builder, Listing Directory, Blog, and Job Board Theme**! Are you searching for a powerful yet user-friendly theme to manage listings, jobs, or blog posts? Look no further! Our theme is designed to provide a seamless experience for both administrators and users, thanks to its robust features and intuitive Page Builder. 16 | 17 | ### Key Features 18 | 19 | This theme includes: 20 | - **Page Builder**: Drag & Drop Page Builder. 21 | - **Listing Directory**: Organize and manage listings effortlessly. 22 | - **Job Board**: Post and manage job listings with ease. 23 | - **Blog**: Share updates and engage with your audience. 24 | - **Stripe Integration**: Handle subscriptions and one-time payments securely. 25 | - **Customizable Design**: Tailor the look and feel of your site to match your brand. 26 | 27 | The built-in Page Builder is packed with features: 28 | - **Drag & Drop**: Easily rearrange elements on your page. 29 | - **Reordering**: Change the order of your content without hassle. 30 | - **True Visual Editing**: See your changes in real-time as you make them. 31 | - **Media Library**: Access and manage your media files effortlessly. 32 | - **Responsive Editing**: Ensure your site looks great on all devices. 33 | - **Text Editing**: Customize your text with ease. 34 | - **Font Customization**: Choose the perfect fonts to match your style. 35 | - **Undo & Redo**: Experiment confidently with the ability to revert changes. 36 | - **YouTube Videos**: Integrate video content smoothly. 37 | 38 | 39 | Empower users to create the perfect listings, jobs, or blog posts with the Page Builder. 40 | 41 | ### Technical Details 42 | 43 | - **Frameworks**: Nuxt. 44 | - **Features**: Drag & Drop Page Builder, Listing Directory, Blog, Job Board, and Stripe integration for subscriptions and one-time payments. 45 | 46 | ## Installation 47 | 48 | Make sure to install the dependencies: 49 | 50 | ```bash 51 | # npm 52 | npm install 53 | 54 | # pnpm 55 | pnpm install 56 | 57 | # yarn 58 | yarn install 59 | 60 | # bun 61 | bun install 62 | ``` 63 | 64 | ### Development Server 65 | 66 | Start the development server on `http://localhost`: 67 | 68 | ```bash 69 | # npm 70 | npm run dev 71 | 72 | # pnpm 73 | pnpm run dev 74 | 75 | # yarn 76 | yarn dev 77 | 78 | # bun 79 | bun run dev 80 | ``` 81 | 82 | ### Production 83 | 84 | Build the application for production: 85 | 86 | ```bash 87 | # npm 88 | npm run build 89 | 90 | # pnpm 91 | pnpm run build 92 | 93 | # yarn 94 | yarn build 95 | 96 | # bun 97 | bun run build 98 | ``` 99 | 100 | Locally preview production build: 101 | 102 | ```bash 103 | # npm 104 | npm run preview 105 | 106 | # pnpm 107 | pnpm run preview 108 | 109 | # yarn 110 | yarn preview 111 | 112 | # bun 113 | bun run preview 114 | ``` 115 | 116 | ### Process Manager 117 | 118 | PM2 (Process Manager 2) is a fast and easy solution for hosting your Nuxt application on your server or VM. 119 | To use pm2, use an ecosystem.config.cjs: 120 | ecosystem.config.cjs 121 | 122 | ``` 123 | module.exports = { 124 | apps: [ 125 | { 126 | name: "NuxtAppName", 127 | port: "3000", 128 | exec_mode: "cluster", 129 | instances: "max", 130 | script: "./.output/server/index.mjs" 131 | } 132 | ] 133 | }; 134 | ``` 135 | 136 | ```terminal 137 | npm run build 138 | ``` 139 | 140 | ### Check port: 141 | 142 | Identify the process using port 3000. 143 | 144 | ``` 145 | lsof -i :3000 146 | ``` 147 | 148 | Kill: 149 | 150 | ``` 151 | kill -9 21995 152 | ``` 153 | 154 | -9 155 | The -9 is the signal number that corresponds to the SIGKILL signal in Unix-like operating systems. 156 | The SIGKILL signal is a special signal that forcefully terminates a process. 157 | It does not allow the process to perform any cleanup or 158 | handle the signal in any way – it immediately terminates the process. 159 | 160 | ### pm2 Restart process 161 | 162 | Get Process ID. Remember to install pm2 globally 163 | 164 | ``` 165 | pm2 status 166 | ``` 167 | 168 | Restart Process. If process ID is 0 169 | 170 | ``` 171 | pm2 restart 0 172 | ``` 173 | 174 | 175 | ### Technical Details 176 | 177 | - **Frameworks**: Laravel, Vue 3, and Nuxt. 178 | - **Features**: Drag & Drop Page Builder, Listing Directory, Blog, Job Board, and Stripe integration for subscriptions and one-time payments. 179 | 180 | ## Contributing 181 | 182 | Thank you for considering contributing to this project! 183 | 184 | ## Security Vulnerabilities 185 | 186 | If you discover a security vulnerability, please send me an e-mail. 187 | 188 | ## Get in touch for customization or any questions 189 | 190 | If you have any questions or if you're looking for customization, feel free to connect with me on LinkedIn and send me a message. 191 | 192 | - [Email](mailto:qais.wardag@outlook.com) 193 | - [LinkedIn](https://www.linkedin.com/in/qaiswardag) 194 | 195 | ## Feedback 196 | 197 | I would love to hear your feedback, suggestions, or any issues you encounter while using this app. Feel free to reach out to me if you have any questions or just want to say hello. 198 | 199 | ## Support the Project 200 | 201 | I would greatly appreciate it if you could star the GitHub repository. Starring the project helps to boost its visibility and encourages me to continue adding new features. 202 | 203 | 204 | ## License 205 | 206 | This project is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). 207 | 208 | -------------------------------------------------------------------------------- /app.vue: -------------------------------------------------------------------------------- 1 | 29 | 40 | -------------------------------------------------------------------------------- /assets/css/main.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | @layer components { 5 | /* 6 | |-------------------------------------------------------------------------- 7 | | Widgets 8 | |-------------------------------------------------------------------------- 9 | */ 10 | .myPrimaryWidget { 11 | @apply py-8 px-4 border border-myPrimaryLightGrayColor rounded-md bg-white; 12 | } 13 | 14 | /* 15 | |-------------------------------------------------------------------------- 16 | | Modules 17 | |-------------------------------------------------------------------------- 18 | */ 19 | 20 | .myModulePyMargin { 21 | @apply md:mb-0 mb-0; 22 | } 23 | .myModulePadding { 24 | @apply md:py-28 py-16; 25 | } 26 | 27 | .myPrimaryWidthScreenModule { 28 | @apply myModulePyMargin myModulePadding; 29 | } 30 | .myPrimaryModule { 31 | @apply max-w-7xl mx-auto myModulePyMargin myModulePadding; 32 | } 33 | .myPrimaryContentSection { 34 | @apply max-w-7xl mx-auto md:px-4 px-4 lg:pb-10 md:pb-8 pb-6; 35 | } 36 | 37 | /* 38 | |-------------------------------------------------------------------------- 39 | | Helpers 40 | |-------------------------------------------------------------------------- 41 | */ 42 | .myPrimarySection { 43 | @apply lg:pb-8 lg:pt-20 md:py-8 py-8; 44 | } 45 | 46 | .myPrimaryWarningAlertMessage { 47 | @apply myPrimarySection myTertiaryHeader text-yellow-400 text-center; 48 | } 49 | .myFocus { 50 | @apply focus-within:border-2 focus-within:border-myPrimaryBrandColor; 51 | } 52 | .myActiveLinkColor { 53 | @apply text-myPrimaryBrandColor; 54 | } 55 | 56 | /* 57 | |-------------------------------------------------------------------------- 58 | | Tags 59 | |-------------------------------------------------------------------------- 60 | */ 61 | .myPrimaryTag { 62 | @apply min-h-[3rem] my-2 px-3 py-2 63 | text-xs break-all 64 | inline-flex gap-1 items-center justify-center 65 | rounded-full border border-transparent 66 | text-myPrimaryDarkGrayColor bg-myPrimaryLightMediumGrayColor 67 | sm:w-auto shadow-sm hover:shadow; 68 | } 69 | /* 70 | |-------------------------------------------------------------------------- 71 | | Thumbnail 72 | |-------------------------------------------------------------------------- 73 | */ 74 | .myPrimarythumbnailLogo { 75 | @apply mx-auto block mt-2 mb-6 w-40 transition-all rounded-md object-cover cursor-pointer; 76 | } 77 | .myPrimarythumbnailInsertPreview { 78 | @apply block md:h-16 md:w-16 h-16 w-16 hover:shadow-sm transition-all cursor-pointer rounded-full object-cover; 79 | } 80 | /* 81 | |-------------------------------------------------------------------------- 82 | | Primary paragraphs 83 | |-------------------------------------------------------------------------- 84 | */ 85 | .myPrimaryParagraph { 86 | @apply font-normal text-gray-700 lg:text-base text-sm; 87 | } 88 | 89 | .myPrimaryParagraphError { 90 | @apply myPrimaryParagraph mt-1 italic text-myPrimaryErrorColor; 91 | } 92 | 93 | /* 94 | |-------------------------------------------------------------------------- 95 | | Headers 96 | |-------------------------------------------------------------------------- 97 | */ 98 | 99 | .myPrimaryHeader { 100 | @apply lg:text-7xl md:text-6xl text-5xl font-medium break-words lg:mb-8 md:mb-4 mb-2 text-myPrimaryDarkGrayColor; 101 | } 102 | 103 | .mySecondaryHeader { 104 | @apply font-['Cormorant'] font-medium break-words lg:text-5xl md:text-4xl text-3xl lg:mb-8 md:mb-4 mb-2 text-myPrimaryDarkGrayColor; 105 | } 106 | 107 | .myTertiaryHeader { 108 | @apply font-medium break-words lg:text-3xl md:text-2xl text-2xl lg:mb-8 md:mb-4 mb-2 text-myPrimaryDarkGrayColor; 109 | } 110 | 111 | .myQuaternaryHeader { 112 | @apply font-medium break-words lg:text-xl md:text-lg text-base lg:mb-4 md:mb-2 mb-2 text-myPrimaryDarkGrayColor; 113 | } 114 | 115 | /* 116 | |-------------------------------------------------------------------------- 117 | | Links 118 | |-------------------------------------------------------------------------- 119 | */ 120 | .myPrimaryLink { 121 | @apply text-myPrimaryLinkColor 122 | focus:outline-none 123 | focus:ring-0 focus:ring-myPrimaryLinkColor 124 | focus-visible:ring-0 focus-visible:ring-myPrimaryLinkColor cursor-pointer; 125 | } 126 | 127 | .myPrimaryActiveLink { 128 | @apply text-red-600 text-sm 129 | focus:outline-none 130 | focus:ring-0 focus:ring-red-500 131 | focus-visible:ring-0 focus-visible:ring-red-500; 132 | } 133 | 134 | /* 135 | |-------------------------------------------------------------------------- 136 | | Buttons 137 | |-------------------------------------------------------------------------- 138 | */ 139 | 140 | .myPrimaryMenuTextButton { 141 | @apply lg:flex lg:gap-2 lg:items-center focus:outline-none cursor-pointer rounded-full px-1.5 py-1.5 font-medium; 142 | } 143 | .myRadio { 144 | @apply w-5 h-5 text-myPrimaryBrandColor bg-myPrimaryLightGrayColor border-gray-300 focus:ring-myPrimaryBrandColor dark:focus:ring-myPrimaryBrandColor dark:ring-offset-gray-800 focus:ring-2 dark:bg-gray-700 dark:border-gray-600; 145 | } 146 | 147 | .myPrimaryButton { 148 | @apply min-h-[3rem] lg:px-4 lg:py-3 px-3 py-3 149 | sm:text-sm text-xs whitespace-nowrap break-keep font-medium inline-flex gap-1 items-center justify-center rounded-3xl border border-transparent bg-myPrimaryLinkColor text-white shadow-sm hover:bg-myPrimaryLinkColor sm:w-auto 150 | focus:outline-none focus:ring-2 focus:ring-myPrimaryLinkColor focus:ring-offset-2 151 | focus-visible:ring-2 focus-visible:ring-myPrimaryLinkColor; 152 | } 153 | 154 | .mySecondaryButton { 155 | @apply myPrimaryButton bg-myPrimaryLightMediumGrayColor hover:bg-myPrimaryLightMediumGrayColor hover:bg-opacity-90 focus:ring-myPrimaryLightGrayColor text-myPrimaryDarkGrayColor hover:text-myPrimaryDarkGrayColor shadow-sm; 156 | } 157 | 158 | .myPrimaryDeleteButton { 159 | @apply myPrimaryButton bg-myPrimaryErrorColor hover:bg-myPrimaryErrorColor focus:ring-myPrimaryErrorColor; 160 | } 161 | 162 | .myPrimaryToggleButton { 163 | @apply w-full inline-flex items-center justify-center px-4 py-2 sm:text-sm text-sm font-medium text-myPrimaryDarkGrayColor shadow-sm focus:outline-none focus:ring-2 focus:ring-myPrimaryBrandColor focus:ring-offset-2 bg-myPrimaryLightGrayColor hover:bg-myPrimaryBrandColor hover:text-white; 164 | } 165 | /* 166 | |-------------------------------------------------------------------------- 167 | | Buttons With no background 168 | |-------------------------------------------------------------------------- 169 | */ 170 | 171 | .myPrimaryButtonNoBackground { 172 | @apply myPrimaryParagraph font-medium text-myPrimaryBrandColor 173 | focus:outline-none cursor-pointer; 174 | } 175 | /* 176 | |-------------------------------------------------------------------------- 177 | | Icons 178 | |-------------------------------------------------------------------------- 179 | */ 180 | .mySmallIcon { 181 | @apply shrink-0 h-4 w-4 m-2 stroke-[1.5px] flex justify-center items-center; 182 | } 183 | .myMediumIcon { 184 | @apply shrink-0 h-6 w-6 stroke-[1.5px] flex justify-center items-center; 185 | } 186 | 187 | /* 188 | |-------------------------------------------------------------------------- 189 | | Tables 190 | |-------------------------------------------------------------------------- 191 | */ 192 | 193 | .myTableContainerPlusScrollButton { 194 | @apply relative p-2 border-gray-400 border rounded; 195 | } 196 | .myScrollButtonContainer { 197 | @apply sticky z-10 h-12 top-16 left-0 right-0 flex items-center justify-center myPrimaryGap bg-myPrimaryLightGrayColor bg-opacity-50; 198 | } 199 | .myTableContainer { 200 | @apply overflow-x-auto myPrimarySection py-0 px-0; 201 | } 202 | .myTableSubContainer { 203 | @apply min-w-full align-middle; 204 | } 205 | .myPrimaryTable { 206 | @apply text-sm divide-y divide-myPrimaryLightGrayColor table-fixed min-w-full text-left mb-20; 207 | } 208 | .myPrimaryTableCaption { 209 | @apply bg-white myPrimaryParagraph py-4; 210 | } 211 | .myPrimaryTableTHead { 212 | @apply bg-gray-50; 213 | } 214 | .myPrimaryTableTr { 215 | @apply divide-x divide-gray-300; 216 | } 217 | .myPrimaryTableTh { 218 | @apply px-6 py-4 font-normal text-gray-900; 219 | } 220 | .myPrimaryTableTBody { 221 | @apply divide-y divide-gray-100 border-t border-gray-100 bg-white; 222 | } 223 | .myPrimaryTableTBodyTr { 224 | @apply divide-x myPrimaryParagraph bg-white hover:bg-red-50; 225 | } 226 | .myPrimaryTableTBodyTd { 227 | @apply px-6 py-4 whitespace-pre myPrimaryParagraph; 228 | } 229 | .myPrimaryResourceTableBodyTdTitle { 230 | @apply whitespace-normal; 231 | } 232 | 233 | /* 234 | |-------------------------------------------------------------------------- 235 | | Grid 236 | |-------------------------------------------------------------------------- 237 | */ 238 | .myPrimaryGap { 239 | @apply gap-4; 240 | } 241 | 242 | /* 243 | |-------------------------------------------------------------------------- 244 | | Breadcrumbs 245 | |-------------------------------------------------------------------------- 246 | */ 247 | 248 | .myBreadcrumbsContainer { 249 | @apply flex items-center justify-start gap-1 py-2 pl-4 pr-2 font-medium; 250 | } 251 | 252 | /* 253 | |-------------------------------------------------------------------------- 254 | | Search Bars 255 | |-------------------------------------------------------------------------- 256 | */ 257 | 258 | .mysearchBarWithOptions { 259 | @apply flex gap-2 pl-4 rounded-full border border-gray-200 bg-myPrimaryLightGrayColor; 260 | } 261 | 262 | .myPrimarySearchInput { 263 | @apply myPrimaryInput text-sm py-4 border-none outline-none pl-10 h-full bg-transparent focus:ring-0 focus:ring-offset-0 focus:border-none focus:bg-transparent focus:outline-none shadow-none; 264 | } 265 | 266 | .myPrimarySearchButton { 267 | @apply rounded-r-full text-sm lg:pl-8 lg:pr-10 pl-4 pr-4 text-center border-l border-gray-300 font-medium hover:bg-gray-200; 268 | } 269 | 270 | /* 271 | |-------------------------------------------------------------------------- 272 | | Forms 273 | |-------------------------------------------------------------------------- 274 | */ 275 | .myPrimaryFormWithActions { 276 | @apply flex flex-col myPrimaryGap md:pb-4 px-2 rounded; 277 | } 278 | .myPrimaryContentLayout { 279 | @apply md:flex md:flex-row flex flex-col myPrimaryGap; 280 | } 281 | 282 | .myPrimaryFormTitleDescription { 283 | @apply flex flex-col w-full; 284 | } 285 | 286 | .myPrimaryFormMain { 287 | @apply md:w-8/12 flex flex-col myPrimaryGap; 288 | } 289 | .myPrimaryFormSidebar { 290 | @apply md:w-4/12 flex flex-col myPrimaryGap; 291 | } 292 | .myPrimaryActions { 293 | @apply px-4 py-6 rounded bg-myPrimaryLightGrayColor shadow-sm; 294 | } 295 | 296 | .myInputsOrganization { 297 | @apply px-4 pt-4 pb-4 bg-white rounded-lg border border-gray-200; 298 | } 299 | 300 | .myPrimaryFormOrganizationHeaderDescriptionSection { 301 | @apply mb-4; 302 | } 303 | .myPrimaryFormOrganizationHeader { 304 | @apply myQuaternaryHeader m-0 pt-4; 305 | } 306 | 307 | .myInputsFamily { 308 | @apply flex items-center myPrimaryGap; 309 | } 310 | 311 | .myInputGroup { 312 | @apply w-full self-start mb-2; 313 | } 314 | .myDoActionButtonSection { 315 | @apply px-4 py-4 border border-myPrimaryLightGrayColor rounded sm:px-6 text-right mt-1 bg-gray-50; 316 | } 317 | 318 | .myPrimaryInputLabel { 319 | @apply my-0 block text-sm font-normal text-myPrimaryDarkGrayColor text-left mb-2; 320 | } 321 | 322 | .myPrimaryFormFocus { 323 | @apply focus:ring-4 focus:ring-purple-500 focus:ring-opacity-20 focus:ring-offset-2 focus:border focus:border-gray-200; 324 | } 325 | .myPrimaryInput { 326 | @apply block pr-8 text-left bg-white w-full sm:text-sm font-normal text-myPrimaryDarkGrayColor placeholder:font-normal placeholder:accent-gray-300 focus:bg-white rounded-md py-3 px-3 border border-gray-300 shadow-sm focus:outline-none myPrimaryFormFocus h-full; 327 | } 328 | .myPrimaryInputNoBorder { 329 | @apply myPrimaryInput placeholder:accent-gray-300 focus:bg-none rounded-md py-3 px-3 border-none focus:outline-none focus:ring-0 focus:ring-offset-0 focus:border-none shadow-none; 330 | } 331 | .myPrimaryInputReadonly { 332 | @apply myPrimaryInput bg-gray-50 focus:ring-0 focus:bg-myPrimaryLightGrayColor focus:border-myPrimaryMediumGrayColor; 333 | } 334 | 335 | .myPrimaryInputError { 336 | @apply mt-1 myPrimaryParagraph block font-normal text-myPrimaryErrorColor text-left; 337 | } 338 | 339 | .myPrimaryHiddenInputField { 340 | @apply px-0; 341 | } 342 | 343 | .myPrimaryTextArea { 344 | @apply block w-full sm:text-sm font-normal text-myPrimaryDarkGrayColor placeholder:font-normal placeholder:accent-gray-400 bg-gray-50 focus:bg-white rounded-md py-3 px-3 border border-gray-300 shadow-sm focus:outline-none focus:ring-2 focus:ring-myPrimaryBrandColor focus:border-transparent; 345 | } 346 | 347 | .myPrimaryCheckbox { 348 | @apply focus:ring-myPrimaryBrandColor h-5 w-5 text-myPrimaryBrandColor border-gray-400 rounded-md; 349 | } 350 | 351 | .myPrimarySelect { 352 | @apply relative myPrimaryInput w-full; 353 | } 354 | .myPrimaryFakeSelect { 355 | @apply hover:ring-opacity-20 hover:ring-purple-500 border border-gray-300 flex flex-row justify-between items-center myPrimaryGap py-2.5 pl-3 pr-1 cursor-pointer hover:border-transparent hover:ring-4 rounded-md; 356 | } 357 | .myPrimaryFakeSelectNoHover { 358 | @apply myPrimaryFakeSelect focus:outline-none focus:border-transparent hover:border-transparent; 359 | } 360 | 361 | .myPrimaryColorPreview { 362 | @apply aspect-square border border-gray-200 cursor-pointer min-h-[1.5rem] rounded-sm; 363 | } 364 | } 365 | 366 | /* CSS styles for VueQuill - start */ 367 | .ql-toolbar.ql-snow { 368 | border-top-right-radius: 10px 10px; 369 | border-top-left-radius: 10px 10px; 370 | } 371 | 372 | .ql-editor { 373 | min-height: 200px; 374 | } 375 | 376 | /* example 1 */ 377 | /* table transitions */ 378 | .table-enter-active, 379 | .table-leave-active { 380 | transition: opacity 0.3s ease; 381 | } 382 | 383 | .table-enter-from, 384 | .table-leave-to { 385 | opacity: 0; 386 | } 387 | 388 | /* example 2 */ 389 | /* tags transitions */ 390 | .tags-enter-from { 391 | opacity: 0.6; 392 | transform: translateX(10px); 393 | } 394 | 395 | .tags-enter-active { 396 | /*animation: wobble 0.5s ease;*/ 397 | transition: all 0.2s ease; 398 | } 399 | 400 | .tags-leave-to { 401 | opacity: 0.1; 402 | transform: translateX(5px); 403 | } 404 | 405 | .tags-leave-active { 406 | transition: all 0.1s ease; 407 | position: absolute; /* for move transition after item leaves */ 408 | } 409 | 410 | .tags-move { 411 | transition: all 0.1s ease; 412 | } 413 | 414 | /* Scrollbar Styles - start */ 415 | /* Firefox */ 416 | * { 417 | scrollbar-width: thin; 418 | scrollbar-color: black transparent; 419 | } 420 | 421 | *::-webkit-scrollbar-track { 422 | background: transparent; 423 | border-radius: 25px; 424 | } 425 | 426 | /* Chrome, Edge, and Safari */ 427 | *::-webkit-scrollbar { 428 | width: 6px; 429 | height: 6px; /* Add height for horizontal scrollbar */ 430 | } 431 | 432 | *::-webkit-scrollbar-thumb { 433 | background-color: black; 434 | border-radius: 25px; 435 | border: none; 436 | } 437 | 438 | /* Add overflow-x property to enable horizontal scrollbar */ 439 | .scrollable { 440 | overflow-x: auto; 441 | overflow-y: auto; 442 | /* Add any other desired styles for the scrollable element */ 443 | } 444 | /* Scrollbar Styles - end */ 445 | 446 | .smooth-transition { 447 | transition: opacity 0.3s ease-in-out; 448 | } 449 | 450 | /* Manage P, Link, H1, H2 # start */ 451 | p { 452 | @apply font-normal lg:text-base text-base; 453 | } 454 | 455 | a { 456 | @apply text-myPrimaryLinkColor; 457 | } 458 | 459 | h2 { 460 | @apply text-3xl mt-4 mb-3 font-medium; 461 | } 462 | h3 { 463 | @apply text-2xl mt-4 mb-3 font-medium; 464 | } 465 | /* Manage P, Link, H1, H2 # end */ 466 | 467 | /* CSS for content inside page builder # start */ 468 | #page-builder-editor-editable-area a { 469 | pointer-events: none; 470 | /* display: block; 471 | width: 100%; */ 472 | } 473 | 474 | #page-builder-editor a, 475 | #page-builder-editor-editable-area a { 476 | text-decoration: underline; 477 | } 478 | 479 | #page-builder-editor #linktree p, 480 | #page-builder-editor-editable-area #linktree p { 481 | width: 100%; 482 | } 483 | 484 | #page-builder-editor #linktree a, 485 | #page-builder-editor-editable-area #linktree a { 486 | @apply py-4 px-2 block w-full; 487 | } 488 | 489 | #page-builder-editor #linktree a, 490 | #page-builder-editor-editable-area #linktree a { 491 | text-decoration: none; 492 | font-weight: 500; 493 | color: inherit !important; 494 | width: 100%; 495 | cursor: pointer; 496 | } 497 | #page-builder-editor strong, 498 | #page-builder-editor-editable-area strong { 499 | font-weight: 500; 500 | } 501 | 502 | #page-builder-editor ol, 503 | #page-builder-editor-editable-area ol, 504 | #page-builder-editor ul, 505 | #page-builder-editor-editable-area ul { 506 | list-style: disc !important; 507 | padding: 1rem 0rem; 508 | } 509 | 510 | #page-builder-editor li, 511 | #page-builder-editor-editable-area li { 512 | line-height: 2.2rem; 513 | margin-left: 1.5em; /* Adjust this value as needed */ 514 | } 515 | /* CSS for content inside page builder #end*/ 516 | 517 | /* CSS for Vue datepicker # start */ 518 | :root { 519 | /*General*/ 520 | --dp-font-family: 'Jost', blinkmacsystemfont, 'Segoe UI', roboto, oxygen, 521 | ubuntu, cantarell, 'Open Sans', 'Helvetica Neue', sans-serif !important; 522 | --dp-border-radius: 40px; /*Configurable border-radius*/ 523 | --dp-cell-border-radius: 4px; /*Specific border radius for the calendar cell*/ 524 | --dp-common-transition: all 0.1s ease-in; /*Generic transition applied on buttons and calendar cells*/ 525 | } 526 | 527 | .dp__action_row { 528 | display: flex !important; 529 | align-items: center !important; 530 | justify-content: center; 531 | margin: 0 0 10px 0; 532 | } 533 | .dp__today { 534 | background: transparent !important; 535 | border: 2px solid #ff5252 !important; 536 | color: #ff5252 !important; 537 | border-radius: 100% !important; 538 | } 539 | 540 | .dp__active_date { 541 | background: #ff5252 !important; 542 | border: #ff5252 !important; 543 | color: #fff !important; 544 | border-radius: 100% !important; 545 | } 546 | 547 | .dp__date_hover:hover { 548 | background: #f1f1f1 !important; 549 | border: #f1f1f1 !important; 550 | color: #000 !important; 551 | border-radius: 100% !important; 552 | } 553 | 554 | .dp__action_button { 555 | background: #ff5252 !important; 556 | border: #000 !important; 557 | color: #fff !important; 558 | border-radius: 8px !important; 559 | padding: 1rem 1rem !important; 560 | font-weight: 500; 561 | } 562 | .dp__overlay_cell_active { 563 | background: #ff5252 !important; 564 | border: #000 !important; 565 | color: #fff !important; 566 | } 567 | /* CSS for Vue datepicker # end */ 568 | -------------------------------------------------------------------------------- /components/animate/AnimateCircle.vue: -------------------------------------------------------------------------------- 1 | 8 | 20 | -------------------------------------------------------------------------------- /components/footer/FooterGuests.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 67 | -------------------------------------------------------------------------------- /components/headers/PageHeader.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 26 | -------------------------------------------------------------------------------- /components/layouts/ArticleTemplate.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 45 | -------------------------------------------------------------------------------- /components/layouts/FullWidthElement.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 35 | -------------------------------------------------------------------------------- /components/loaders/FullScreenSpinner.vue: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /components/loaders/SmallUniversalSpinner.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 27 | -------------------------------------------------------------------------------- /components/logos/ApplicationLogo.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 18 | -------------------------------------------------------------------------------- /components/modals/CookieConsentModal.vue: -------------------------------------------------------------------------------- 1 | 50 | 51 | 118 | -------------------------------------------------------------------------------- /components/navbars/GuestsNavbar.vue: -------------------------------------------------------------------------------- 1 | 73 | 259 | -------------------------------------------------------------------------------- /components/pagination/RenderlessPagination.vue: -------------------------------------------------------------------------------- 1 | 194 | -------------------------------------------------------------------------------- /components/pagination/TailwindPagination.vue: -------------------------------------------------------------------------------- 1 | 38 | 121 | -------------------------------------------------------------------------------- /components/sections/SectionTitle.vue: -------------------------------------------------------------------------------- 1 | 16 | -------------------------------------------------------------------------------- /components/sections/WidgetSectionBorder.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /components/sidebars/SlideOverPrimaryMenu.vue: -------------------------------------------------------------------------------- 1 | 111 | 112 | 291 | -------------------------------------------------------------------------------- /components/sliders/ThumbnailSmallImageSlider.vue: -------------------------------------------------------------------------------- 1 | 75 | 76 | 196 | -------------------------------------------------------------------------------- /components/users/UserTag.vue: -------------------------------------------------------------------------------- 1 | 27 | 28 | 118 | -------------------------------------------------------------------------------- /composables/helpers/isObject.js: -------------------------------------------------------------------------------- 1 | export const isObject = function (data) { 2 | if (typeof data === "object" && !Array.isArray(data) && data !== null) { 3 | return true; 4 | } 5 | return false; 6 | }; 7 | -------------------------------------------------------------------------------- /composables/helpers/usePromise.js: -------------------------------------------------------------------------------- 1 | export const usePromise = function (time) { 2 | // new promise 3 | return new Promise((resolve, reject) => { 4 | return setTimeout(() => { 5 | resolve(() => { 6 | return; 7 | }); 8 | }, time); 9 | }); 10 | }; 11 | -------------------------------------------------------------------------------- /composables/vueFetch.js: -------------------------------------------------------------------------------- 1 | import { ref } from 'vue'; 2 | import { usePromise } from './helpers/usePromise'; 3 | import { isObject } from './helpers/isObject'; 4 | 5 | export const vueFetch = function vueFetch() { 6 | // Initializing state management references 7 | const isSuccess = ref(false); 8 | const isLoading = ref(false); 9 | const isError = ref(false); 10 | const error = ref(null); 11 | const errors = ref(null); 12 | const goDirectToError = ref(false); 13 | const fetchedData = ref(null); 14 | const streamAlreadyRead = ref(null); 15 | const response = ref(null); 16 | 17 | const additionalTime = ref(null); 18 | const abortTimeout = ref(null); 19 | 20 | // Function to handle data fetching and state updates 21 | const handleData = async function ( 22 | url, 23 | fetchOptions = {}, 24 | customFetchOptions = {} 25 | ) { 26 | isSuccess.value = false; 27 | isLoading.value = false; 28 | isError.value = false; 29 | error.value = null; 30 | errors.value = null; 31 | goDirectToError.value = false; 32 | fetchedData.value = null; 33 | streamAlreadyRead.value = null; 34 | response.value = null; 35 | 36 | // Initialize or set timeout and additional time values 37 | abortTimeout.value = customFetchOptions.abortTimeoutTime; 38 | additionalTime.value = customFetchOptions.additionalCallTime; 39 | 40 | // Provide default values for abortTimeout and additionalTime 41 | if (additionalTime.value === undefined) additionalTime.value = 0; 42 | if (abortTimeout.value === undefined) abortTimeout.value = 4000; 43 | 44 | // Initializing fetch operation control parameters 45 | const controller = new AbortController(); 46 | 47 | // Abort fetch operation after the specified timeout 48 | const timer = setTimeout(() => { 49 | controller.abort(); 50 | }, abortTimeout.value); 51 | 52 | try { 53 | // Begin fetch operation 54 | isLoading.value = true; 55 | const promise = usePromise(additionalTime.value); 56 | await promise; 57 | 58 | // Check for abort signal and handle accordingly 59 | if (controller.signal.aborted) { 60 | clearTimeout(timer); 61 | isLoading.value = false; 62 | isError.value = false; 63 | goDirectToError.value = true; 64 | 65 | throw new Error('Error 500. Loading time exceeded.'); 66 | } 67 | 68 | // Fetch and handle response 69 | response.value = await fetch(url, fetchOptions); 70 | 71 | // Check if the fetch request was successful. If not, throw an error 72 | if (response.value.status !== 200 && response.value.status !== 201) { 73 | throw new Error( 74 | `${response.value.status}. ${response.value.statusText}` 75 | ); 76 | } 77 | 78 | // Parse JSON response when content-type is 'application/json' 79 | const contentType = response.value.headers.get('content-type') || ''; 80 | 81 | // Content-Type 'application/json' 82 | if (contentType !== null && contentType.includes('application/json')) { 83 | streamAlreadyRead.value = true; 84 | clearTimeout(timer); 85 | isSuccess.value = true; 86 | isLoading.value = false; 87 | isError.value = false; 88 | 89 | fetchedData.value = await response.value.json(); 90 | return fetchedData.value; 91 | } 92 | 93 | // Content-Type 'text/plain' or 'text/html' 94 | if ( 95 | (contentType !== null && contentType.includes('text/plain')) || 96 | contentType.includes('text/html') 97 | ) { 98 | streamAlreadyRead.value = true; 99 | clearTimeout(timer); 100 | isSuccess.value = true; 101 | isLoading.value = false; 102 | isError.value = false; 103 | 104 | fetchedData.value = await response.value.text(); 105 | return fetchedData.value; 106 | } 107 | 108 | // Handle non-GET requests without 'application/json', 'text/plain' or 'text/html' 109 | if ( 110 | fetchOptions?.method !== 'GET' && 111 | fetchOptions?.method !== 'get' && 112 | fetchOptions?.method !== undefined 113 | ) { 114 | clearTimeout(timer); 115 | isSuccess.value = true; 116 | isLoading.value = false; 117 | isError.value = false; 118 | fetchedData.value = 'Your request was processed successfully.'; 119 | return 'Your request was processed successfully.'; 120 | } 121 | 122 | // Handle GET requests without 'application/json' content-type 123 | clearTimeout(timer); 124 | isSuccess.value = true; 125 | isLoading.value = false; 126 | isError.value = false; 127 | goDirectToError.value = true; 128 | throw new Error( 129 | "'Error 500. The request header must contain 'application/json', 'text/plain' or 'text/html'" 130 | ); 131 | } catch (err) { 132 | clearTimeout(timer); 133 | isSuccess.value = false; 134 | isLoading.value = false; 135 | 136 | // Set default error message 137 | isError.value = true; 138 | error.value = `Not able to fetch data. Error status: ${err}.`; 139 | 140 | if (response.value) { 141 | // Get content type of the response 142 | const contentType = response.value.headers.get('content-type') || ''; 143 | 144 | if ( 145 | contentType.includes('application/json') && 146 | !streamAlreadyRead.value 147 | ) { 148 | // Handle errors when content type is 'application/json' 149 | if (goDirectToError.value !== true) { 150 | // Parse the response body as JSON 151 | const collectingErrorsJson = await response.value.json(); 152 | 153 | // Collect backend form validation errors 154 | errors.value = collectingErrorsJson; 155 | 156 | // Handle different types of error messages 157 | 158 | // If the error message is a string, handle it accordingly 159 | if (typeof collectingErrorsJson === 'string') { 160 | // Set error message when error body is a string 161 | isError.value = true; 162 | error.value = `Not able to fetch data. Error status: ${err.message}. ${collectingErrorsJson}`; 163 | } 164 | // If the error message is an array, handle it accordingly 165 | if (Array.isArray(collectingErrorsJson)) { 166 | // Set error message when error body is an array 167 | isError.value = true; 168 | error.value = `Not able to fetch data. Error status: ${ 169 | err.message 170 | }. ${collectingErrorsJson.join(' ')}`; 171 | } 172 | // If the error message is an object, handle it accordingly 173 | if (isObject(collectingErrorsJson)) { 174 | const errorsKeys = Object.keys(collectingErrorsJson); 175 | const errorsValues = Object.values(collectingErrorsJson); 176 | 177 | // If there are no errors, handle it accordingly 178 | if (errorsKeys.length === 0) { 179 | // Set error message when error body is an empty object 180 | isError.value = true; 181 | error.value = `Not able to fetch data. Error status: ${response.value.status}.`; 182 | } 183 | 184 | // If there are errors, handle them accordingly 185 | if (errorsKeys.length > 0) { 186 | for (let i = 0; i < errorsKeys.length; i++) { 187 | if ( 188 | Array.isArray(errorsValues[i]) || 189 | isObject(errorsValues[i]) 190 | ) { 191 | // Set error message when encountering a nested object or array 192 | isError.value = true; 193 | error.value = `Not able to fetch data. Error status: ${err.message}`; 194 | break; 195 | } 196 | 197 | // If the error is neither an array nor an object, handle it accordingly 198 | if ( 199 | !Array.isArray(errorsValues[i]) && 200 | !isObject(errorsValues[i]) 201 | ) { 202 | const errorObjToString = 203 | Object.values(collectingErrorsJson).join(' '); 204 | // Set error message when error body is a flat object 205 | isError.value = true; 206 | error.value = `Not able to fetch data. Error status: ${err.message}. ${errorObjToString}`; 207 | } 208 | } 209 | } 210 | } 211 | } 212 | } 213 | 214 | // If the response's Content-Type text/plain, handle it accordingly 215 | if (contentType.includes('text/plain') && !streamAlreadyRead.value) { 216 | const plainText = await response.value.text(); 217 | // Remove HTML tags using a regular expression 218 | const cleanedText = plainText.replace(/<\/?[^>]+(>|$)/g, ''); 219 | error.value = `Error: ${cleanedText}`; 220 | } 221 | 222 | // If the response's Content-Type text/html, handle it accordingly 223 | if (contentType.includes('text/html') && !streamAlreadyRead.value) { 224 | const htmlContent = await response.value.text(); 225 | 226 | // Remove HTML tags using a regular expression 227 | const cleanedText = htmlContent.replace(/<\/?[^>]+(>|$)/g, ''); 228 | error.value = `Error: ${cleanedText}`; 229 | } 230 | 231 | if ( 232 | (!contentType.includes('application/json') && 233 | !contentType.includes('text/plain') && 234 | !contentType.includes('text/html')) || 235 | goDirectToError.value 236 | ) { 237 | isError.value = true; 238 | error.value = `Not able to fetch data. Error status: ${err.message}`; 239 | } 240 | 241 | // Rethrow the error for further handling 242 | throw err; 243 | } 244 | } 245 | }; 246 | 247 | // Return the state variables and the fetch function 248 | return { 249 | isSuccess, 250 | isLoading, 251 | isError, 252 | error, 253 | errors, 254 | handleData, 255 | fetchedData, 256 | }; 257 | }; 258 | -------------------------------------------------------------------------------- /ecosystem.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | apps: [ 3 | { 4 | name: 'MyISSUE', 5 | port: '4000', 6 | exec_mode: 'cluster', 7 | instances: 'max', 8 | script: './.output/server/index.mjs', 9 | }, 10 | ], 11 | }; 12 | -------------------------------------------------------------------------------- /error.vue: -------------------------------------------------------------------------------- 1 | 34 | 35 | 42 | 43 | 49 | -------------------------------------------------------------------------------- /helpers/delay.js: -------------------------------------------------------------------------------- 1 | export const delay = function delay(ms = 200) { 2 | return new Promise((resolve) => { 3 | setTimeout(resolve, ms); 4 | }); 5 | }; 6 | -------------------------------------------------------------------------------- /helpers/extract-text-content-html.js: -------------------------------------------------------------------------------- 1 | export const extractTextContentHTML = function extractTextContentHTML( 2 | html, 3 | maxLength 4 | ) { 5 | // Remove HTML tags and replace dots with dots followed by a space 6 | let content = html.replace(/<[^>]*>/g, '').replace(/\./g, '. '); 7 | 8 | // Remove extra whitespaces 9 | content = content.replace(/\s+/g, ' ').trim(); 10 | 11 | if (html.length >= maxLength) { 12 | // Find the last space before maxLength 13 | const lastSpaceIndex = content.lastIndexOf(' ', maxLength); 14 | 15 | // Trim the content and add "..." if needed 16 | content = content.slice(0, lastSpaceIndex) + '..'; 17 | } else { 18 | content = content.slice(0, maxLength); 19 | } 20 | 21 | return content; 22 | }; 23 | -------------------------------------------------------------------------------- /helpers/get-cookie.js: -------------------------------------------------------------------------------- 1 | export const getCookie = function (document, name) { 2 | const value = `; ${document.value.cookie}`; 3 | const parts = value.split(`; ${name}=`); 4 | if (parts.length === 2) return parts.pop().split(';').shift(); 5 | }; 6 | 7 | export const setCookie = function (cookieName, cookieValue, expirationDays) { 8 | const cookieDate = new Date(); 9 | 10 | cookieDate.setTime( 11 | cookieDate.getTime() + expirationDays * 24 * 60 * 60 * 1000 12 | ); 13 | const expires = 'expires=' + cookieDate.toUTCString(); 14 | 15 | document.cookie = cookieName + '=' + cookieValue + ';' + expires + ';path=/'; 16 | }; 17 | -------------------------------------------------------------------------------- /layouts/GuestsLayout.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 31 | -------------------------------------------------------------------------------- /layouts/MainLayout.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 20 | -------------------------------------------------------------------------------- /layouts/items/ItemDisplaySelection.vue: -------------------------------------------------------------------------------- 1 | 27 | 28 | 76 | -------------------------------------------------------------------------------- /layouts/items/ItemsFilterSelection.vue: -------------------------------------------------------------------------------- 1 | 42 | 43 | 187 | -------------------------------------------------------------------------------- /new_release/RELEASE_NOTES.md: -------------------------------------------------------------------------------- 1 | # Release Notes 2 | 3 | ## Overview 4 | 5 | Laravel, Vue, and Nuxt, a Page Builder, Listing Directory, Blog, and Job Board Theme. 6 | 7 | ## Changes 8 | 9 | - Minor bug fixes 10 | - Performance improvements 11 | - Code refactoring 12 | -------------------------------------------------------------------------------- /new_release/release_version.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Function to check if a command exists 4 | command_exists() { 5 | command -v "$1" >/dev/null 2>&1 6 | } 7 | 8 | # Ensure required tools are installed 9 | if ! command_exists git; then 10 | echo "Error: git is not installed." 11 | exit 1 12 | fi 13 | 14 | if ! command_exists gh; then 15 | echo "Error: GitHub CLI (gh) is not installed." 16 | exit 1 17 | fi 18 | 19 | # Read the version number from package.json 20 | VERSION=$(jq -r '.version' ./package.json) 21 | if [ -z "$VERSION" ]; then 22 | echo "Error: version number in package.json is empty." 23 | exit 1 24 | fi 25 | 26 | # Check if the release notes file exists and is not empty 27 | if [ ! -s ./new_release/RELEASE_NOTES.md ]; then 28 | echo "Error: RELEASE_NOTES.md file is missing or empty." 29 | exit 1 30 | fi 31 | 32 | # Get the latest tag 33 | LATEST_TAG=$(git describe --tags --abbrev=0) 34 | 35 | # Create a temporary file for the release notes 36 | TEMP_RELEASE_NOTES=$(mktemp) 37 | 38 | # Copy the existing release notes to the temporary file 39 | cat ./new_release/RELEASE_NOTES.md > "$TEMP_RELEASE_NOTES" 40 | 41 | # Append the latest commits since the last tag to the temporary release notes file 42 | echo "\n\n## Latest Commits\n" >> "$TEMP_RELEASE_NOTES" 43 | git log "$LATEST_TAG"..HEAD --pretty=format:"- %s (%h)" >> "$TEMP_RELEASE_NOTES" 44 | 45 | # Create a new tag with the desired version number 46 | git tag "$VERSION" 47 | if [ $? -ne 0 ]; then 48 | echo "Error: Failed to create git tag." 49 | exit 1 50 | fi 51 | 52 | # Push the tag to GitHub 53 | git push origin "$VERSION" 54 | if [ $? -ne 0 ]; then 55 | echo "Error: Failed to push git tag to GitHub." 56 | exit 1 57 | fi 58 | 59 | # Create a GitHub release with release notes 60 | gh release create "$VERSION" --title "$VERSION" --notes-file "$TEMP_RELEASE_NOTES" 61 | if [ $? -eq 0 ]; then 62 | echo "Release version $VERSION created successfully." 63 | else 64 | echo "Error: Failed to create GitHub release." 65 | exit 1 66 | fi 67 | 68 | # Remove the temporary release notes file 69 | rm "$TEMP_RELEASE_NOTES" 70 | 71 | # Check the current tag 72 | echo "\n\nChecking the current tag:" 73 | git describe --tags -------------------------------------------------------------------------------- /nuxt.config.ts: -------------------------------------------------------------------------------- 1 | import { version } from './package.json'; 2 | 3 | export default defineNuxtConfig({ 4 | // Add a trailing slash to each route 5 | nitro: { 6 | prerender: { 7 | crawlLinks: true, 8 | routes: ['/'], 9 | }, 10 | }, 11 | site: { 12 | url: 'https://www.admin.myissue.io', 13 | }, 14 | 15 | devServer: { 16 | port: 4000, 17 | }, 18 | 19 | runtimeConfig: { 20 | public: { 21 | APP_ENV: process.env.APP_ENV, 22 | LARAVEL_APP_URL_PRODUCTION: process.env.LARAVEL_APP_URL_PRODUCTION, 23 | LARAVEL_APP_URL: process.env.LARAVEL_APP_URL, 24 | APP_URL: process.env.APP_URL, 25 | APP_NAME: process.env.APP_NAME, 26 | APP_VERSION: version, 27 | }, 28 | }, 29 | 30 | devtools: { enabled: true }, 31 | modules: ['@nuxtjs/sitemap', '@pinia/nuxt', 'nuxt-simple-robots'], 32 | 33 | sitemap: { 34 | sources: ['/api/__sitemap__/urls'], 35 | }, 36 | 37 | app: { 38 | head: { 39 | charset: 'utf-8', 40 | viewport: 'width=device-width, initial-scale=1', 41 | htmlAttrs: { 42 | lang: 'en', 43 | }, 44 | script: [ 45 | { 46 | src: `https://www.googletagmanager.com/gtag/js?id=${process.env.GOOGLE_GTAG}`, 47 | }, 48 | `window.dataLayer = window.dataLayer || []; 49 | function gtag(){dataLayer.push(arguments);} 50 | gtag('js', new Date()); 51 | gtag('config', 'GT-M34SGDHL');`, 52 | ], 53 | link: [ 54 | { 55 | rel: 'stylesheet', 56 | href: 'https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0', 57 | }, 58 | { 59 | rel: 'stylesheet', 60 | href: 'https://fonts.googleapis.com/css2?family=Jost:ital,wght@0,100;0,200;0,300;0,400;0,500;1,100;1,200;1,300;1,400;1,500&display=swap', 61 | }, 62 | { 63 | rel: 'stylesheet', 64 | href: 'https://fonts.googleapis.com/css2?family=Cormorant:ital,wght@0,300;0,400;0,500;0,600;1,300;1,400;1,500;1,600&display=swap', 65 | }, 66 | // favicon # start 67 | { 68 | rel: 'apple-touch-icon', 69 | sizes: '180x180', 70 | href: '/apple-touch-icon.png', 71 | }, 72 | { 73 | rel: 'icon', 74 | type: 'image/png', 75 | sizes: '32x32', 76 | href: '/favicon-32x32.png', 77 | }, 78 | { 79 | rel: 'icon', 80 | type: 'image/png', 81 | sizes: '16x16', 82 | href: '/favicon-16x16.png', 83 | }, 84 | { rel: 'manifest', href: '/site.webmanifest' }, 85 | { rel: 'mask-icon', href: '/safari-pinned-tab.svg', color: '#5bbad5' }, 86 | // favicon # end 87 | ], 88 | }, 89 | }, 90 | 91 | css: ['~/assets/css/main.css'], 92 | 93 | postcss: { 94 | plugins: { 95 | tailwindcss: {}, 96 | autoprefixer: {}, 97 | }, 98 | }, 99 | 100 | compatibilityDate: '2024-11-19', 101 | }); 102 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "myissue", 3 | "version": "v1.2.38", 4 | "private": true, 5 | "type": "module", 6 | "scripts": { 7 | "start": "nuxt start --port 4000", 8 | "build": "nuxt build", 9 | "dev": "nuxt dev", 10 | "generate": "nuxt generate", 11 | "preview": "nuxt preview", 12 | "postinstall": "nuxt prepare" 13 | }, 14 | "engines": { 15 | "node": "20.x" 16 | }, 17 | "dependencies": { 18 | "nuxt-simple-robots": "^4.0.0-rc.17", 19 | "@pinia/nuxt": "^0.5.1", 20 | "date-fns": "^2.30.0", 21 | "nuxt": "^3.13.0", 22 | "nuxt-headlessui": "^1.1.5", 23 | "pinia": "^2.1.7", 24 | "pm2": "^5.3.1", 25 | "vue": "^3.4.15", 26 | "vue-router": "^4.2.5" 27 | }, 28 | "devDependencies": { 29 | "@nuxtjs/sitemap": "^5.1.0", 30 | "autoprefixer": "^10.4.17", 31 | "postcss": "^8.4.35", 32 | "tailwindcss": "^3.4.1" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /pages/[team_slug]/[resource]/[slug]/[id_description]/[id]/index.vue: -------------------------------------------------------------------------------- 1 | 113 | 114 | 160 | -------------------------------------------------------------------------------- /pages/[user_folder]/[username]/index.vue: -------------------------------------------------------------------------------- 1 | 61 | 117 | -------------------------------------------------------------------------------- /pages/jobs.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 39 | -------------------------------------------------------------------------------- /pages/listings.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 39 | -------------------------------------------------------------------------------- /pages/posts.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 39 | -------------------------------------------------------------------------------- /pages/professional.vue: -------------------------------------------------------------------------------- 1 | 52 | 53 | 247 | -------------------------------------------------------------------------------- /public/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qaiswardag/nuxt_directory_and_job_board_theme/8fab0cafdb0a77dcd9988a99a7894fd5a2e8544d/public/android-chrome-192x192.png -------------------------------------------------------------------------------- /public/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qaiswardag/nuxt_directory_and_job_board_theme/8fab0cafdb0a77dcd9988a99a7894fd5a2e8544d/public/android-chrome-512x512.png -------------------------------------------------------------------------------- /public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qaiswardag/nuxt_directory_and_job_board_theme/8fab0cafdb0a77dcd9988a99a7894fd5a2e8544d/public/apple-touch-icon.png -------------------------------------------------------------------------------- /public/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #da532c 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qaiswardag/nuxt_directory_and_job_board_theme/8fab0cafdb0a77dcd9988a99a7894fd5a2e8544d/public/favicon-16x16.png -------------------------------------------------------------------------------- /public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qaiswardag/nuxt_directory_and_job_board_theme/8fab0cafdb0a77dcd9988a99a7894fd5a2e8544d/public/favicon-32x32.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qaiswardag/nuxt_directory_and_job_board_theme/8fab0cafdb0a77dcd9988a99a7894fd5a2e8544d/public/favicon.ico -------------------------------------------------------------------------------- /public/images/brand-images/home.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qaiswardag/nuxt_directory_and_job_board_theme/8fab0cafdb0a77dcd9988a99a7894fd5a2e8544d/public/images/brand-images/home.jpg -------------------------------------------------------------------------------- /public/images/brand-images/home_old.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qaiswardag/nuxt_directory_and_job_board_theme/8fab0cafdb0a77dcd9988a99a7894fd5a2e8544d/public/images/brand-images/home_old.jpg -------------------------------------------------------------------------------- /public/images/home/fashion_show.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qaiswardag/nuxt_directory_and_job_board_theme/8fab0cafdb0a77dcd9988a99a7894fd5a2e8544d/public/images/home/fashion_show.jpg -------------------------------------------------------------------------------- /public/images/home/frequently_asked_questions.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qaiswardag/nuxt_directory_and_job_board_theme/8fab0cafdb0a77dcd9988a99a7894fd5a2e8544d/public/images/home/frequently_asked_questions.jpg -------------------------------------------------------------------------------- /public/images/home/girl_light_bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qaiswardag/nuxt_directory_and_job_board_theme/8fab0cafdb0a77dcd9988a99a7894fd5a2e8544d/public/images/home/girl_light_bg.jpg -------------------------------------------------------------------------------- /public/images/home/orange_bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qaiswardag/nuxt_directory_and_job_board_theme/8fab0cafdb0a77dcd9988a99a7894fd5a2e8544d/public/images/home/orange_bg.jpg -------------------------------------------------------------------------------- /public/images/home/pink-lady-high-resolution.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qaiswardag/nuxt_directory_and_job_board_theme/8fab0cafdb0a77dcd9988a99a7894fd5a2e8544d/public/images/home/pink-lady-high-resolution.jpg -------------------------------------------------------------------------------- /public/images/home/the_furthest_dawn.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qaiswardag/nuxt_directory_and_job_board_theme/8fab0cafdb0a77dcd9988a99a7894fd5a2e8544d/public/images/home/the_furthest_dawn.jpg -------------------------------------------------------------------------------- /public/images/home/three.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qaiswardag/nuxt_directory_and_job_board_theme/8fab0cafdb0a77dcd9988a99a7894fd5a2e8544d/public/images/home/three.jpg -------------------------------------------------------------------------------- /public/images/home/woman_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qaiswardag/nuxt_directory_and_job_board_theme/8fab0cafdb0a77dcd9988a99a7894fd5a2e8544d/public/images/home/woman_1.jpg -------------------------------------------------------------------------------- /public/images/home/woman_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qaiswardag/nuxt_directory_and_job_board_theme/8fab0cafdb0a77dcd9988a99a7894fd5a2e8544d/public/images/home/woman_2.jpg -------------------------------------------------------------------------------- /public/images/home/woman_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qaiswardag/nuxt_directory_and_job_board_theme/8fab0cafdb0a77dcd9988a99a7894fd5a2e8544d/public/images/home/woman_3.jpg -------------------------------------------------------------------------------- /public/images/home/woman_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qaiswardag/nuxt_directory_and_job_board_theme/8fab0cafdb0a77dcd9988a99a7894fd5a2e8544d/public/images/home/woman_4.jpg -------------------------------------------------------------------------------- /public/images/logo/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 10 | 12 | 13 | 26 | 39 | 44 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /public/mstile-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qaiswardag/nuxt_directory_and_job_board_theme/8fab0cafdb0a77dcd9988a99a7894fd5a2e8544d/public/mstile-144x144.png -------------------------------------------------------------------------------- /public/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qaiswardag/nuxt_directory_and_job_board_theme/8fab0cafdb0a77dcd9988a99a7894fd5a2e8544d/public/mstile-150x150.png -------------------------------------------------------------------------------- /public/mstile-310x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qaiswardag/nuxt_directory_and_job_board_theme/8fab0cafdb0a77dcd9988a99a7894fd5a2e8544d/public/mstile-310x150.png -------------------------------------------------------------------------------- /public/mstile-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qaiswardag/nuxt_directory_and_job_board_theme/8fab0cafdb0a77dcd9988a99a7894fd5a2e8544d/public/mstile-310x310.png -------------------------------------------------------------------------------- /public/mstile-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qaiswardag/nuxt_directory_and_job_board_theme/8fab0cafdb0a77dcd9988a99a7894fd5a2e8544d/public/mstile-70x70.png -------------------------------------------------------------------------------- /public/safari-pinned-tab.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | Created by potrace 1.14, written by Peter Selinger 2001-2017 9 | 10 | 12 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /public/site.webmanifest: -------------------------------------------------------------------------------- 1 | { 2 | "name": "", 3 | "short_name": "", 4 | "icons": [ 5 | { 6 | "src": "/android-chrome-192x192.png", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | }, 10 | { 11 | "src": "/android-chrome-512x512.png", 12 | "sizes": "512x512", 13 | "type": "image/png" 14 | } 15 | ], 16 | "theme_color": "#ffffff", 17 | "background_color": "#ffffff", 18 | "display": "standalone" 19 | } 20 | -------------------------------------------------------------------------------- /server/api/__sitemap__/urls.ts: -------------------------------------------------------------------------------- 1 | export default defineSitemapEventHandler(async () => { 2 | const runtimeConfig = useRuntimeConfig(); 3 | 4 | const mainApiRoute = runtimeConfig.public.LARAVEL_APP_URL + '/'; 5 | 6 | const listingRoute = mainApiRoute + 'api/guest/stores/index-search-engines'; 7 | const postsRoute = mainApiRoute + 'api/guest/posts/index-search-engines'; 8 | const jobsRoute = mainApiRoute + 'api/guest/jobs/index-search-engines'; 9 | 10 | async function generateUrls(route: string, posttype: string) { 11 | const ListingData: any = await $fetch(route); 12 | return (ListingData?.posts || [])?.map((item: any) => { 13 | return { 14 | loc: `${item?.team?.slug}/${posttype}/${item?.slug}/view/${item.id}`, 15 | lastmod: item.updated_at, 16 | }; 17 | }); 18 | } 19 | 20 | const listing = await generateUrls(listingRoute, 'listing'); 21 | const posts = await generateUrls(postsRoute, 'post'); 22 | const jobs = await generateUrls(jobsRoute, 'job'); 23 | 24 | return [...listing, ...posts, ...jobs]; 25 | }); 26 | -------------------------------------------------------------------------------- /store/user.ts: -------------------------------------------------------------------------------- 1 | // stores/counter.ts 2 | 3 | import { defineStore } from 'pinia'; 4 | import { vueFetch } from '../composables/vueFetch'; 5 | 6 | const { 7 | handleData: handleGetUser, 8 | fetchedData: fetchedDataUser, 9 | isError: isErrorUser, 10 | error: errorUser, 11 | errors: errorsUser, 12 | isLoading: isLoadingUser, 13 | isSuccess: isSuccessUser, 14 | } = vueFetch(); 15 | 16 | interface User { 17 | userData: any; 18 | } 19 | 20 | export const useUserStore = defineStore('user', { 21 | state: () => ({ 22 | baseUrl: useRuntimeConfig().public.LARAVEL_APP_URL, 23 | user: {}, 24 | 25 | tagsOrContentListings: false, 26 | tagsOrContentPosts: false, 27 | tagsOrContentJobs: false, 28 | 29 | showJobCountriesAndTypes: false, 30 | 31 | searchQueryListings: '', 32 | searchQueryJobs: '', 33 | searchQueryPosts: '', 34 | 35 | currentPageListings: 1, 36 | currentPageJobs: 1, 37 | currentPagePosts: 1, 38 | 39 | currentCategoriesListings: [], 40 | currentCategoriesJobs: [], 41 | currentCategoriesPosts: [], 42 | 43 | currentTypesListings: [], 44 | currentTypesJobs: [], 45 | currentTypesPosts: [], 46 | 47 | currentCountriesListings: [], 48 | currentCountriesJobs: [], 49 | currentCountriesPosts: [], 50 | 51 | currentStatesListings: [], 52 | currentStatesJobs: [], 53 | currentStatesPosts: [], 54 | }), 55 | getters: { 56 | getUser: (state) => state.user, 57 | getTagsOrContentListings: (state) => state.tagsOrContentListings, 58 | getTagsOrContentJobs: (state) => state.tagsOrContentJobs, 59 | getTagsOrContentPosts: (state) => state.tagsOrContentPosts, 60 | getShowJobCountriesAndTypes: (state) => state.showJobCountriesAndTypes, 61 | 62 | getSearchQueryListings: (state) => state.searchQueryListings, 63 | getSearchQueryJobs: (state) => state.searchQueryJobs, 64 | getSearchQueryPosts: (state) => state.searchQueryPosts, 65 | 66 | getCurrentPageListings: (state) => state.currentPageListings, 67 | getCurrentPageJobs: (state) => state.currentPageJobs, 68 | getCurrentPagePosts: (state) => state.currentPagePosts, 69 | 70 | getCurrentCategoriesListings: (state) => state.currentCategoriesListings, 71 | getCurrentCategoriesJobs: (state) => state.currentCategoriesJobs, 72 | getCurrentCategoriesPosts: (state) => state.currentCategoriesPosts, 73 | 74 | getCurrentTypesListings: (state) => state.currentTypesListings, 75 | getCurrentTypesJobs: (state) => state.currentTypesJobs, 76 | getCurrentTypesPosts: (state) => state.currentTypesPosts, 77 | 78 | getCurrentCountriesListings: (state) => state.currentCountriesListings, 79 | getCurrentCountriesJobs: (state) => state.currentCountriesJobs, 80 | getCurrentCountriesPosts: (state) => state.currentCountriesPosts, 81 | 82 | getCurrentStatesListings: (state) => state.currentStatesListings, 83 | getCurrentStatesJobs: (state) => state.currentStatesJobs, 84 | getCurrentStatesPosts: (state) => state.currentStatesPosts, 85 | }, 86 | actions: { 87 | setTagsOrContentListings(query: boolean) { 88 | this.tagsOrContentListings = query; 89 | }, 90 | setTagsOrContentJobs(query: boolean) { 91 | this.tagsOrContentJobs = query; 92 | }, 93 | setTagsOrContentPosts(query: boolean) { 94 | this.tagsOrContentPosts = query; 95 | }, 96 | setShowJobCountriesAndTypes(query: boolean) { 97 | this.showJobCountriesAndTypes = query; 98 | }, 99 | setSearchQueryListings(query: string) { 100 | this.searchQueryListings = query; 101 | }, 102 | setSearchQueryJobs(query: string) { 103 | this.searchQueryJobs = query; 104 | }, 105 | setSearchQueryPosts(query: string) { 106 | this.searchQueryPosts = query; 107 | }, 108 | 109 | setCurrentPageListings(query: number) { 110 | this.currentPageListings = query; 111 | }, 112 | setCurrentPageJobs(query: number) { 113 | this.currentPageJobs = query; 114 | }, 115 | setCurrentPagePosts(query: number) { 116 | this.currentPagePosts = query; 117 | }, 118 | 119 | setCurrentCategoriesListings(query: any) { 120 | this.currentCategoriesListings = query; 121 | }, 122 | setCurrentCategoriesJobs(query: any) { 123 | this.currentCategoriesJobs = query; 124 | }, 125 | setCurrentCategoriesPosts(query: any) { 126 | this.currentCategoriesPosts = query; 127 | }, 128 | 129 | setCurrentTypesListings(query: any) { 130 | this.currentTypesListings = query; 131 | }, 132 | setCurrentTypesJobs(query: any) { 133 | this.currentTypesJobs = query; 134 | }, 135 | setCurrentTypesPosts(query: any) { 136 | this.currentTypesPosts = query; 137 | }, 138 | 139 | setCurrentCountriesListings(query: any) { 140 | this.currentCountriesListings = query; 141 | }, 142 | setCurrentCountriesJobs(query: any) { 143 | this.currentCountriesJobs = query; 144 | }, 145 | setCurrentCountriesPosts(query: any) { 146 | this.currentCountriesPosts = query; 147 | }, 148 | 149 | setCurrentStatesListings(query: any) { 150 | this.currentStatesListings = query; 151 | }, 152 | setCurrentStatesJobs(query: any) { 153 | this.currentStatesJobs = query; 154 | }, 155 | setCurrentStatesPosts(query: any) { 156 | this.currentStatesPosts = query; 157 | }, 158 | 159 | getAppUrl(path: string) { 160 | return this.baseUrl + '/' + path; 161 | }, 162 | 163 | async fetchUser() { 164 | const path = 'loggedin-user'; 165 | 166 | const fullPath = this.getAppUrl(path); 167 | 168 | handleGetUser(fullPath, { 169 | method: 'GET', 170 | credentials: 'include', 171 | }); 172 | 173 | this.user = { 174 | fetchedDataUser, 175 | isErrorUser, 176 | errorUser, 177 | errorsUser, 178 | isLoadingUser, 179 | isSuccessUser, 180 | }; 181 | }, 182 | }, 183 | }); 184 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: [ 4 | './components/**/*.{js,vue,ts}', 5 | './layouts/**/*.vue', 6 | './pages/**/*.vue', 7 | './plugins/**/*.{js,ts}', 8 | './app.vue', 9 | './error.vue', 10 | './utils/**/*.{js,vue,ts}', 11 | ], 12 | theme: { 13 | extend: { 14 | colors: { 15 | // Custom colors 16 | myPrimaryBrandColor: '#000000', 17 | myPrimaryLinkColor: '#16a34a', 18 | // gray colors 19 | myPrimaryLightGrayColor: '#eff2f6', 20 | // for myPrimaryTag 21 | myPrimaryLightMediumGrayColor: '#dee6f0', 22 | 23 | // just a dark gray color 24 | myPrimaryMediumGrayColor: '#9ca3af', 25 | 26 | // use as black color 27 | myPrimaryDarkGrayColor: '#111827', 28 | 29 | myPrimaryErrorColor: '#d60000', 30 | myPrimarySuccesColor: '#16a34a', 31 | }, 32 | fontFamily: { 33 | sans: ['Jost', 'Raleway', "'Cormorant'", 'sans-serif'], 34 | }, 35 | }, 36 | }, 37 | 38 | plugins: [], 39 | }; 40 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | // https://nuxt.com/docs/guide/concepts/typescript 3 | "extends": "./.nuxt/tsconfig.json" 4 | } 5 | -------------------------------------------------------------------------------- /utils/page-builder/compile-css.js: -------------------------------------------------------------------------------- 1 | const compiledCSS = { 2 | // min & max height & width 3 | minMaxHeightWidth: [ 4 | 'min-h-0.5', 5 | 'min-h-1', 6 | 'min-h-1.5', 7 | 'min-h-2', 8 | 'min-h-2.5', 9 | 'min-h-3', 10 | 'min-h-3.5', 11 | 'min-h-4', 12 | 'min-h-5', 13 | 'min-h-6', 14 | 'min-h-7', 15 | 'min-h-8', 16 | 'min-h-9', 17 | 'min-h-10', 18 | 'min-h-11', 19 | 'min-h-12', 20 | 'min-h-14', 21 | 'min-h-16', 22 | 'min-h-20', 23 | 'min-h-24', 24 | 'min-h-28', 25 | 'min-h-32', 26 | 'min-h-36', 27 | 'min-h-40', 28 | 'min-h-44', 29 | 'min-h-48', 30 | 'min-h-52', 31 | 'min-h-56', 32 | 'min-h-60', 33 | 'min-h-64', 34 | 'min-h-72', 35 | 'min-h-80', 36 | 'min-h-96', 37 | 'max-h-0.5', 38 | 'max-h-1', 39 | 'max-h-1.5', 40 | 'max-h-2', 41 | 'max-h-2.5', 42 | 'max-h-3', 43 | 'max-h-3.5', 44 | 'max-h-4', 45 | 'max-h-5', 46 | 'max-h-6', 47 | 'max-h-7', 48 | 'max-h-8', 49 | 'max-h-9', 50 | 'max-h-10', 51 | 'max-h-11', 52 | 'max-h-12', 53 | 'max-h-14', 54 | 'max-h-16', 55 | 'max-h-20', 56 | 'max-h-24', 57 | 'max-h-28', 58 | 'max-h-32', 59 | 'max-h-36', 60 | 'max-h-40', 61 | 'max-h-44', 62 | 'max-h-48', 63 | 'max-h-52', 64 | 'max-h-56', 65 | 'max-h-60', 66 | 'max-h-64', 67 | 'max-h-72', 68 | 'max-h-80', 69 | 'max-h-96', 70 | 'min-w-0.5', 71 | 'min-w-1', 72 | 'min-w-1.5', 73 | 'min-w-2', 74 | 'min-w-2.5', 75 | 'min-w-3', 76 | 'min-w-3.5', 77 | 'min-w-4', 78 | 'min-w-5', 79 | 'min-w-6', 80 | 'min-w-7', 81 | 'min-w-8', 82 | 'min-w-9', 83 | 'min-w-10', 84 | 'min-w-11', 85 | 'min-w-12', 86 | 'min-w-14', 87 | 'min-w-16', 88 | 'min-w-20', 89 | 'min-w-24', 90 | 'min-w-28', 91 | 'min-w-32', 92 | 'min-w-36', 93 | 'min-w-40', 94 | 'min-w-44', 95 | 'min-w-48', 96 | 'min-w-52', 97 | 'min-w-56', 98 | 'min-w-60', 99 | 'min-w-64', 100 | 'min-w-72', 101 | 'min-w-80', 102 | 'min-w-96', 103 | 'max-w-0.5', 104 | 'max-w-1', 105 | 'max-w-1.5', 106 | 'max-w-2', 107 | 'max-w-2.5', 108 | 'max-w-3', 109 | 'max-w-3.5', 110 | 'max-w-4', 111 | 'max-w-5', 112 | 'max-w-6', 113 | 'max-w-7', 114 | 'max-w-8', 115 | 'max-w-9', 116 | 'max-w-10', 117 | 'max-w-11', 118 | 'max-w-12', 119 | 'max-w-14', 120 | 'max-w-16', 121 | 'max-w-20', 122 | 'max-w-24', 123 | 'max-w-28', 124 | 'max-w-32', 125 | 'max-w-36', 126 | 'max-w-40', 127 | 'max-w-44', 128 | 'max-w-48', 129 | 'max-w-52', 130 | 'max-w-56', 131 | 'max-w-60', 132 | 'max-w-64', 133 | 'max-w-72', 134 | 'max-w-80', 135 | 'max-w-96', 136 | ], 137 | // height 138 | height: [ 139 | 'h-0.5', 140 | 'h-1', 141 | 'h-1.5', 142 | 'h-2', 143 | 'h-2.5', 144 | 'h-3', 145 | 'h-3.5', 146 | 'h-4', 147 | 'h-5', 148 | 'h-6', 149 | 'h-7', 150 | 'h-8', 151 | 'h-9', 152 | 'h-10', 153 | 'h-11', 154 | 'h-12', 155 | 'h-14', 156 | 'h-16', 157 | 'h-20', 158 | 'h-24', 159 | 'h-28', 160 | 'h-32', 161 | 'h-36', 162 | 'h-40', 163 | 'h-44', 164 | 'h-48', 165 | 'h-52', 166 | 'h-56', 167 | 'h-60', 168 | 'h-64', 169 | 'h-72', 170 | 'h-80', 171 | 'h-96', 172 | 'h-auto', 173 | 'h-1/2', 174 | 'h-1/3', 175 | 'h-2/3', 176 | 'h-1/4', 177 | 'h-2/4', 178 | 'h-3/4', 179 | 'h-1/5', 180 | 'h-2/5', 181 | 'h-3/5', 182 | 'h-4/5', 183 | 'h-1/6', 184 | 'h-2/6', 185 | 'h-3/6', 186 | 'h-4/6', 187 | 'h-5/6', 188 | 'h-full', 189 | 'h-screen', 190 | 'h-min', 191 | 'h-max', 192 | 'h-fit', 193 | ], 194 | heightSm: [ 195 | 'sm:h-0.5', 196 | 'sm:h-1', 197 | 'sm:h-1.5', 198 | 'sm:h-2', 199 | 'sm:h-2.5', 200 | 'sm:h-3', 201 | 'sm:h-3.5', 202 | 'sm:h-4', 203 | 'sm:h-5', 204 | 'sm:h-6', 205 | 'sm:h-7', 206 | 'sm:h-8', 207 | 'sm:h-9', 208 | 'sm:h-10', 209 | 'sm:h-11', 210 | 'sm:h-12', 211 | 'sm:h-14', 212 | 'sm:h-16', 213 | 'sm:h-20', 214 | 'sm:h-24', 215 | 'sm:h-28', 216 | 'sm:h-32', 217 | 'sm:h-36', 218 | 'sm:h-40', 219 | 'sm:h-44', 220 | 'sm:h-48', 221 | 'sm:h-52', 222 | 'sm:h-56', 223 | 'sm:h-60', 224 | 'sm:h-64', 225 | 'sm:h-72', 226 | 'sm:h-80', 227 | 'sm:h-96', 228 | 'sm:h-auto', 229 | 'sm:h-1/2', 230 | 'sm:h-1/3', 231 | 'sm:h-2/3', 232 | 'sm:h-1/4', 233 | 'sm:h-2/4', 234 | 'sm:h-3/4', 235 | 'sm:h-1/5', 236 | 'sm:h-2/5', 237 | 'sm:h-3/5', 238 | 'sm:h-4/5', 239 | 'sm:h-1/6', 240 | 'sm:h-2/6', 241 | 'sm:h-3/6', 242 | 'sm:h-4/6', 243 | 'sm:h-5/6', 244 | 'sm:h-full', 245 | 'sm:h-screen', 246 | 'sm:h-min', 247 | 'sm:h-max', 248 | 'sm:h-fit', 249 | ], 250 | heightMd: [ 251 | 'md:h-0.5', 252 | 'md:h-1', 253 | 'md:h-1.5', 254 | 'md:h-2', 255 | 'md:h-2.5', 256 | 'md:h-3', 257 | 'md:h-3.5', 258 | 'md:h-4', 259 | 'md:h-5', 260 | 'md:h-6', 261 | 'md:h-7', 262 | 'md:h-8', 263 | 'md:h-9', 264 | 'md:h-10', 265 | 'md:h-11', 266 | 'md:h-12', 267 | 'md:h-14', 268 | 'md:h-16', 269 | 'md:h-20', 270 | 'md:h-24', 271 | 'md:h-28', 272 | 'md:h-32', 273 | 'md:h-36', 274 | 'md:h-40', 275 | 'md:h-44', 276 | 'md:h-48', 277 | 'md:h-52', 278 | 'md:h-56', 279 | 'md:h-60', 280 | 'md:h-64', 281 | 'md:h-72', 282 | 'md:h-80', 283 | 'md:h-96', 284 | 'md:h-auto', 285 | 'md:h-1/2', 286 | 'md:h-1/3', 287 | 'md:h-2/3', 288 | 'md:h-1/4', 289 | 'md:h-2/4', 290 | 'md:h-3/4', 291 | 'md:h-1/5', 292 | 'md:h-2/5', 293 | 'md:h-3/5', 294 | 'md:h-4/5', 295 | 'md:h-1/6', 296 | 'md:h-2/6', 297 | 'md:h-3/6', 298 | 'md:h-4/6', 299 | 'md:h-5/6', 300 | 'md:h-full', 301 | 'md:h-screen', 302 | 'md:h-min', 303 | 'md:h-max', 304 | 'md:h-fit', 305 | ], 306 | heightLg: [ 307 | 'lg:h-0.5', 308 | 'lg:h-1', 309 | 'lg:h-1.5', 310 | 'lg:h-2', 311 | 'lg:h-2.5', 312 | 'lg:h-3', 313 | 'lg:h-3.5', 314 | 'lg:h-4', 315 | 'lg:h-5', 316 | 'lg:h-6', 317 | 'lg:h-7', 318 | 'lg:h-8', 319 | 'lg:h-9', 320 | 'lg:h-10', 321 | 'lg:h-11', 322 | 'lg:h-12', 323 | 'lg:h-14', 324 | 'lg:h-16', 325 | 'lg:h-20', 326 | 'lg:h-24', 327 | 'lg:h-28', 328 | 'lg:h-32', 329 | 'lg:h-36', 330 | 'lg:h-40', 331 | 'lg:h-44', 332 | 'lg:h-48', 333 | 'lg:h-52', 334 | 'lg:h-56', 335 | 'lg:h-60', 336 | 'lg:h-64', 337 | 'lg:h-72', 338 | 'lg:h-80', 339 | 'lg:h-96', 340 | 'lg:h-auto', 341 | 'lg:h-1/2', 342 | 'lg:h-1/3', 343 | 'lg:h-2/3', 344 | 'lg:h-1/4', 345 | 'lg:h-2/4', 346 | 'lg:h-3/4', 347 | 'lg:h-1/5', 348 | 'lg:h-2/5', 349 | 'lg:h-3/5', 350 | 'lg:h-4/5', 351 | 'lg:h-1/6', 352 | 'lg:h-2/6', 353 | 'lg:h-3/6', 354 | 'lg:h-4/6', 355 | 'lg:h-5/6', 356 | 'lg:h-full', 357 | 'lg:h-screen', 358 | 'lg:h-min', 359 | 'lg:h-max', 360 | 'lg:h-fit', 361 | ], 362 | heightXl: [ 363 | 'xl:h-0.5', 364 | 'xl:h-1', 365 | 'xl:h-1.5', 366 | 'xl:h-2', 367 | 'xl:h-2.5', 368 | 'xl:h-3', 369 | 'xl:h-3.5', 370 | 'xl:h-4', 371 | 'xl:h-5', 372 | 'xl:h-6', 373 | 'xl:h-7', 374 | 'xl:h-8', 375 | 'xl:h-9', 376 | 'xl:h-10', 377 | 'xl:h-11', 378 | 'xl:h-12', 379 | 'xl:h-14', 380 | 'xl:h-16', 381 | 'xl:h-20', 382 | 'xl:h-24', 383 | 'xl:h-28', 384 | 'xl:h-32', 385 | 'xl:h-36', 386 | 'xl:h-40', 387 | 'xl:h-44', 388 | 'xl:h-48', 389 | 'xl:h-52', 390 | 'xl:h-56', 391 | 'xl:h-60', 392 | 'xl:h-64', 393 | 'xl:h-72', 394 | 'xl:h-80', 395 | 'xl:h-96', 396 | 'xl:h-auto', 397 | 'xl:h-1/2', 398 | 'xl:h-1/3', 399 | 'xl:h-2/3', 400 | 'xl:h-1/4', 401 | 'xl:h-2/4', 402 | 'xl:h-3/4', 403 | 'xl:h-1/5', 404 | 'xl:h-2/5', 405 | 'xl:h-3/5', 406 | 'xl:h-4/5', 407 | 'xl:h-1/6', 408 | 'xl:h-2/6', 409 | 'xl:h-3/6', 410 | 'xl:h-4/6', 411 | 'xl:h-5/6', 412 | 'xl:h-full', 413 | 'xl:h-screen', 414 | 'xl:h-min', 415 | 'xl:h-max', 416 | 'xl:h-fit', 417 | ], 418 | height2xl: [ 419 | 'xl:h-0.5', 420 | 'xl:h-1', 421 | 'xl:h-1.5', 422 | 'xl:h-2', 423 | 'xl:h-2.5', 424 | 'xl:h-3', 425 | 'xl:h-3.5', 426 | 'xl:h-4', 427 | 'xl:h-5', 428 | 'xl:h-6', 429 | 'xl:h-7', 430 | 'xl:h-8', 431 | 'xl:h-9', 432 | 'xl:h-10', 433 | 'xl:h-11', 434 | 'xl:h-12', 435 | 'xl:h-14', 436 | 'xl:h-16', 437 | 'xl:h-20', 438 | 'xl:h-24', 439 | 'xl:h-28', 440 | 'xl:h-32', 441 | 'xl:h-36', 442 | 'xl:h-40', 443 | 'xl:h-44', 444 | 'xl:h-48', 445 | 'xl:h-52', 446 | 'xl:h-56', 447 | 'xl:h-60', 448 | 'xl:h-64', 449 | 'xl:h-72', 450 | 'xl:h-80', 451 | 'xl:h-96', 452 | 'xl:h-auto', 453 | 'xl:h-1/2', 454 | 'xl:h-1/3', 455 | 'xl:h-2/3', 456 | 'xl:h-1/4', 457 | 'xl:h-2/4', 458 | 'xl:h-3/4', 459 | 'xl:h-1/5', 460 | 'xl:h-2/5', 461 | 'xl:h-3/5', 462 | 'xl:h-4/5', 463 | 'xl:h-1/6', 464 | 'xl:h-2/6', 465 | 'xl:h-3/6', 466 | 'xl:h-4/6', 467 | 'xl:h-5/6', 468 | 'xl:h-full', 469 | 'xl:h-screen', 470 | 'xl:h-min', 471 | 'xl:h-max', 472 | 'xl:h-fit', 473 | ], 474 | height2xl: [ 475 | '2xl:h-0.5', 476 | '2xl:h-1', 477 | '2xl:h-1.5', 478 | '2xl:h-2', 479 | '2xl:h-2.5', 480 | '2xl:h-3', 481 | '2xl:h-3.5', 482 | '2xl:h-4', 483 | '2xl:h-5', 484 | '2xl:h-6', 485 | '2xl:h-7', 486 | '2xl:h-8', 487 | '2xl:h-9', 488 | '2xl:h-10', 489 | '2xl:h-11', 490 | '2xl:h-12', 491 | '2xl:h-14', 492 | '2xl:h-16', 493 | '2xl:h-20', 494 | '2xl:h-24', 495 | '2xl:h-28', 496 | '2xl:h-32', 497 | '2xl:h-36', 498 | '2xl:h-40', 499 | '2xl:h-44', 500 | '2xl:h-48', 501 | '2xl:h-52', 502 | '2xl:h-56', 503 | '2xl:h-60', 504 | '2xl:h-64', 505 | '2xl:h-72', 506 | '2xl:h-80', 507 | '2xl:h-96', 508 | '2xl:h-auto', 509 | '2xl:h-1/2', 510 | '2xl:h-1/3', 511 | '2xl:h-2/3', 512 | '2xl:h-1/4', 513 | '2xl:h-2/4', 514 | '2xl:h-3/4', 515 | '2xl:h-1/5', 516 | '2xl:h-2/5', 517 | '2xl:h-3/5', 518 | '2xl:h-4/5', 519 | '2xl:h-1/6', 520 | '2xl:h-2/6', 521 | '2xl:h-3/6', 522 | '2xl:h-4/6', 523 | '2xl:h-5/6', 524 | '2xl:h-full', 525 | '2xl:h-screen', 526 | '2xl:h-min', 527 | '2xl:h-max', 528 | '2xl:h-fit', 529 | ], 530 | // height 531 | width: [ 532 | 'w-0.5', 533 | 'w-1', 534 | 'w-1.5', 535 | 'w-2', 536 | 'w-2.5', 537 | 'w-3', 538 | 'w-3.5', 539 | 'w-4', 540 | 'w-5', 541 | 'w-6', 542 | 'w-7', 543 | 'w-8', 544 | 'w-9', 545 | 'w-10', 546 | 'w-11', 547 | 'w-12', 548 | 'w-14', 549 | 'w-16', 550 | 'w-20', 551 | 'w-24', 552 | 'w-28', 553 | 'w-32', 554 | 'w-36', 555 | 'w-40', 556 | 'w-44', 557 | 'w-48', 558 | 'w-52', 559 | 'w-56', 560 | 'w-60', 561 | 'w-64', 562 | 'w-72', 563 | 'w-80', 564 | 'w-96', 565 | 'w-auto', 566 | 'w-1/2', 567 | 'w-1/3', 568 | 'w-2/3', 569 | 'w-1/4', 570 | 'w-2/4', 571 | 'w-3/4', 572 | 'w-1/5', 573 | 'w-2/5', 574 | 'w-3/5', 575 | 'w-4/5', 576 | 'w-1/6', 577 | 'w-2/6', 578 | 'w-3/6', 579 | 'w-4/6', 580 | 'w-5/6', 581 | 'w-full', 582 | 'w-screen', 583 | 'w-min', 584 | 'w-max', 585 | 'w-fit', 586 | ], 587 | widthSm: [ 588 | 'sm:w-0.5', 589 | 'sm:w-1', 590 | 'sm:w-1.5', 591 | 'sm:w-2', 592 | 'sm:w-2.5', 593 | 'sm:w-3', 594 | 'sm:w-3.5', 595 | 'sm:w-4', 596 | 'sm:w-5', 597 | 'sm:w-6', 598 | 'sm:w-7', 599 | 'sm:w-8', 600 | 'sm:w-9', 601 | 'sm:w-10', 602 | 'sm:w-11', 603 | 'sm:w-12', 604 | 'sm:w-14', 605 | 'sm:w-16', 606 | 'sm:w-20', 607 | 'sm:w-24', 608 | 'sm:w-28', 609 | 'sm:w-32', 610 | 'sm:w-36', 611 | 'sm:w-40', 612 | 'sm:w-44', 613 | 'sm:w-48', 614 | 'sm:w-52', 615 | 'sm:w-56', 616 | 'sm:w-60', 617 | 'sm:w-64', 618 | 'sm:w-72', 619 | 'sm:w-80', 620 | 'sm:w-96', 621 | 'sm:w-auto', 622 | 'sm:w-1/2', 623 | 'sm:w-1/3', 624 | 'sm:w-2/3', 625 | 'sm:w-1/4', 626 | 'sm:w-2/4', 627 | 'sm:w-3/4', 628 | 'sm:w-1/5', 629 | 'sm:w-2/5', 630 | 'sm:w-3/5', 631 | 'sm:w-4/5', 632 | 'sm:w-1/6', 633 | 'sm:w-2/6', 634 | 'sm:w-3/6', 635 | 'sm:w-4/6', 636 | 'sm:w-5/6', 637 | 'sm:w-full', 638 | 'sm:w-screen', 639 | 'sm:w-min', 640 | 'sm:w-max', 641 | 'sm:w-fit', 642 | ], 643 | widthMd: [ 644 | 'md:w-0.5', 645 | 'md:w-1', 646 | 'md:w-1.5', 647 | 'md:w-2', 648 | 'md:w-2.5', 649 | 'md:w-3', 650 | 'md:w-3.5', 651 | 'md:w-4', 652 | 'md:w-5', 653 | 'md:w-6', 654 | 'md:w-7', 655 | 'md:w-8', 656 | 'md:w-9', 657 | 'md:w-10', 658 | 'md:w-11', 659 | 'md:w-12', 660 | 'md:w-14', 661 | 'md:w-16', 662 | 'md:w-20', 663 | 'md:w-24', 664 | 'md:w-28', 665 | 'md:w-32', 666 | 'md:w-36', 667 | 'md:w-40', 668 | 'md:w-44', 669 | 'md:w-48', 670 | 'md:w-52', 671 | 'md:w-56', 672 | 'md:w-60', 673 | 'md:w-64', 674 | 'md:w-72', 675 | 'md:w-80', 676 | 'md:w-96', 677 | 'md:w-auto', 678 | 'md:w-1/2', 679 | 'md:w-1/3', 680 | 'md:w-2/3', 681 | 'md:w-1/4', 682 | 'md:w-2/4', 683 | 'md:w-3/4', 684 | 'md:w-1/5', 685 | 'md:w-2/5', 686 | 'md:w-3/5', 687 | 'md:w-4/5', 688 | 'md:w-1/6', 689 | 'md:w-2/6', 690 | 'md:w-3/6', 691 | 'md:w-4/6', 692 | 'md:w-5/6', 693 | 'md:w-full', 694 | 'md:w-screen', 695 | 'md:w-min', 696 | 'md:w-max', 697 | 'md:w-fit', 698 | ], 699 | widthLg: [ 700 | 'lg:w-0.5', 701 | 'lg:w-1', 702 | 'lg:w-1.5', 703 | 'lg:w-2', 704 | 'lg:w-2.5', 705 | 'lg:w-3', 706 | 'lg:w-3.5', 707 | 'lg:w-4', 708 | 'lg:w-5', 709 | 'lg:w-6', 710 | 'lg:w-7', 711 | 'lg:w-8', 712 | 'lg:w-9', 713 | 'lg:w-10', 714 | 'lg:w-11', 715 | 'lg:w-12', 716 | 'lg:w-14', 717 | 'lg:w-16', 718 | 'lg:w-20', 719 | 'lg:w-24', 720 | 'lg:w-28', 721 | 'lg:w-32', 722 | 'lg:w-36', 723 | 'lg:w-40', 724 | 'lg:w-44', 725 | 'lg:w-48', 726 | 'lg:w-52', 727 | 'lg:w-56', 728 | 'lg:w-60', 729 | 'lg:w-64', 730 | 'lg:w-72', 731 | 'lg:w-80', 732 | 'lg:w-96', 733 | 'lg:w-auto', 734 | 'lg:w-1/2', 735 | 'lg:w-1/3', 736 | 'lg:w-2/3', 737 | 'lg:w-1/4', 738 | 'lg:w-2/4', 739 | 'lg:w-3/4', 740 | 'lg:w-1/5', 741 | 'lg:w-2/5', 742 | 'lg:w-3/5', 743 | 'lg:w-4/5', 744 | 'lg:w-1/6', 745 | 'lg:w-2/6', 746 | 'lg:w-3/6', 747 | 'lg:w-4/6', 748 | 'lg:w-5/6', 749 | 'lg:w-full', 750 | 'lg:w-screen', 751 | 'lg:w-min', 752 | 'lg:w-max', 753 | 'lg:w-fit', 754 | ], 755 | widthXl: [ 756 | 'xl:w-0.5', 757 | 'xl:w-1', 758 | 'xl:w-1.5', 759 | 'xl:w-2', 760 | 'xl:w-2.5', 761 | 'xl:w-3', 762 | 'xl:w-3.5', 763 | 'xl:w-4', 764 | 'xl:w-5', 765 | 'xl:w-6', 766 | 'xl:w-7', 767 | 'xl:w-8', 768 | 'xl:w-9', 769 | 'xl:w-10', 770 | 'xl:w-11', 771 | 'xl:w-12', 772 | 'xl:w-14', 773 | 'xl:w-16', 774 | 'xl:w-20', 775 | 'xl:w-24', 776 | 'xl:w-28', 777 | 'xl:w-32', 778 | 'xl:w-36', 779 | 'xl:w-40', 780 | 'xl:w-44', 781 | 'xl:w-48', 782 | 'xl:w-52', 783 | 'xl:w-56', 784 | 'xl:w-60', 785 | 'xl:w-64', 786 | 'xl:w-72', 787 | 'xl:w-80', 788 | 'xl:w-96', 789 | 'xl:w-auto', 790 | 'xl:w-1/2', 791 | 'xl:w-1/3', 792 | 'xl:w-2/3', 793 | 'xl:w-1/4', 794 | 'xl:w-2/4', 795 | 'xl:w-3/4', 796 | 'xl:w-1/5', 797 | 'xl:w-2/5', 798 | 'xl:w-3/5', 799 | 'xl:w-4/5', 800 | 'xl:w-1/6', 801 | 'xl:w-2/6', 802 | 'xl:w-3/6', 803 | 'xl:w-4/6', 804 | 'xl:w-5/6', 805 | 'xl:w-full', 806 | 'xl:w-screen', 807 | 'xl:w-min', 808 | 'xl:w-max', 809 | 'xl:w-fit', 810 | ], 811 | width2xl: [ 812 | 'xl:w-0.5', 813 | 'xl:w-1', 814 | 'xl:w-1.5', 815 | 'xl:w-2', 816 | 'xl:w-2.5', 817 | 'xl:w-3', 818 | 'xl:w-3.5', 819 | 'xl:w-4', 820 | 'xl:w-5', 821 | 'xl:w-6', 822 | 'xl:w-7', 823 | 'xl:w-8', 824 | 'xl:w-9', 825 | 'xl:w-10', 826 | 'xl:w-11', 827 | 'xl:w-12', 828 | 'xl:w-14', 829 | 'xl:w-16', 830 | 'xl:w-20', 831 | 'xl:w-24', 832 | 'xl:w-28', 833 | 'xl:w-32', 834 | 'xl:w-36', 835 | 'xl:w-40', 836 | 'xl:w-44', 837 | 'xl:w-48', 838 | 'xl:w-52', 839 | 'xl:w-56', 840 | 'xl:w-60', 841 | 'xl:w-64', 842 | 'xl:w-72', 843 | 'xl:w-80', 844 | 'xl:w-96', 845 | 'xl:w-auto', 846 | 'xl:w-1/2', 847 | 'xl:w-1/3', 848 | 'xl:w-2/3', 849 | 'xl:w-1/4', 850 | 'xl:w-2/4', 851 | 'xl:w-3/4', 852 | 'xl:w-1/5', 853 | 'xl:w-2/5', 854 | 'xl:w-3/5', 855 | 'xl:w-4/5', 856 | 'xl:w-1/6', 857 | 'xl:w-2/6', 858 | 'xl:w-3/6', 859 | 'xl:w-4/6', 860 | 'xl:w-5/6', 861 | 'xl:w-full', 862 | 'xl:w-screen', 863 | 'xl:w-min', 864 | 'xl:w-max', 865 | 'xl:w-fit', 866 | ], 867 | width2xl: [ 868 | '2xl:w-0.5', 869 | '2xl:w-1', 870 | '2xl:w-1.5', 871 | '2xl:w-2', 872 | '2xl:w-2.5', 873 | '2xl:w-3', 874 | '2xl:w-3.5', 875 | '2xl:w-4', 876 | '2xl:w-5', 877 | '2xl:w-6', 878 | '2xl:w-7', 879 | '2xl:w-8', 880 | '2xl:w-9', 881 | '2xl:w-10', 882 | '2xl:w-11', 883 | '2xl:w-12', 884 | '2xl:w-14', 885 | '2xl:w-16', 886 | '2xl:w-20', 887 | '2xl:w-24', 888 | '2xl:w-28', 889 | '2xl:w-32', 890 | '2xl:w-36', 891 | '2xl:w-40', 892 | '2xl:w-44', 893 | '2xl:w-48', 894 | '2xl:w-52', 895 | '2xl:w-56', 896 | '2xl:w-60', 897 | '2xl:w-64', 898 | '2xl:w-72', 899 | '2xl:w-80', 900 | '2xl:w-96', 901 | '2xl:w-auto', 902 | '2xl:w-1/2', 903 | '2xl:w-1/3', 904 | '2xl:w-2/3', 905 | '2xl:w-1/4', 906 | '2xl:w-2/4', 907 | '2xl:w-3/4', 908 | '2xl:w-1/5', 909 | '2xl:w-2/5', 910 | '2xl:w-3/5', 911 | '2xl:w-4/5', 912 | '2xl:w-1/6', 913 | '2xl:w-2/6', 914 | '2xl:w-3/6', 915 | '2xl:w-4/6', 916 | '2xl:w-5/6', 917 | '2xl:w-full', 918 | '2xl:w-screen', 919 | '2xl:w-min', 920 | '2xl:w-max', 921 | '2xl:w-fit', 922 | ], 923 | 924 | // margin top, right, bottom, left 925 | marginTop: [ 926 | 'none', 927 | 'mt-0', 928 | 'mt-0.5', 929 | 'mt-1', 930 | 'mt-1.5', 931 | 'mt-2', 932 | 'mt-2.5', 933 | 'mt-3', 934 | 'mt-3.5', 935 | 'mt-4', 936 | 'mt-5', 937 | 'mt-6', 938 | 'mt-7', 939 | 'mt-8', 940 | 'mt-9', 941 | 'mt-10', 942 | 'mt-11', 943 | 'mt-12', 944 | 'mt-14', 945 | 'mt-16', 946 | 'mt-20', 947 | 'mt-24', 948 | 'mt-28', 949 | 'mt-32', 950 | 'mt-36', 951 | 'mt-40', 952 | 'mt-44', 953 | 'mt-48', 954 | 'mt-52', 955 | 'mt-56', 956 | 'mt-60', 957 | 'mt-64', 958 | 'mt-72', 959 | 'mt-80', 960 | 'mt-96', 961 | ], 962 | marginRight: [ 963 | 'none', 964 | 'mr-0', 965 | 'mr-0.5', 966 | 'mr-1', 967 | 'mr-1.5', 968 | 'mr-2', 969 | 'mr-2.5', 970 | 'mr-3', 971 | 'mr-3.5', 972 | 'mr-4', 973 | 'mr-5', 974 | 'mr-6', 975 | 'mr-7', 976 | 'mr-8', 977 | 'mr-9', 978 | 'mr-10', 979 | 'mr-11', 980 | 'mr-12', 981 | 'mr-14', 982 | 'mr-16', 983 | 'mr-20', 984 | 'mr-24', 985 | 'mr-28', 986 | 'mr-32', 987 | 'mr-36', 988 | 'mr-40', 989 | 'mr-44', 990 | 'mr-48', 991 | 'mr-52', 992 | 'mr-56', 993 | 'mr-60', 994 | 'mr-64', 995 | 'mr-72', 996 | 'mr-80', 997 | 'mr-96', 998 | ], 999 | marginBottom: [ 1000 | 'none', 1001 | 'mb-0', 1002 | 'mb-0.5', 1003 | 'mb-1', 1004 | 'mb-1.5', 1005 | 'mb-2', 1006 | 'mb-2.5', 1007 | 'mb-3', 1008 | 'mb-3.5', 1009 | 'mb-4', 1010 | 'mb-5', 1011 | 'mb-6', 1012 | 'mb-7', 1013 | 'mb-8', 1014 | 'mb-9', 1015 | 'mb-10', 1016 | 'mb-11', 1017 | 'mb-12', 1018 | 'mb-14', 1019 | 'mb-16', 1020 | 'mb-20', 1021 | 'mb-24', 1022 | 'mb-28', 1023 | 'mb-32', 1024 | 'mb-36', 1025 | 'mb-40', 1026 | 'mb-44', 1027 | 'mb-48', 1028 | 'mb-52', 1029 | 'mb-56', 1030 | 'mb-60', 1031 | 'mb-64', 1032 | 'mb-72', 1033 | 'mb-80', 1034 | 'mb-96', 1035 | ], 1036 | marginLeft: [ 1037 | 'none', 1038 | 'ml-0', 1039 | 'ml-0.5', 1040 | 'ml-1', 1041 | 'ml-1.5', 1042 | 'ml-2', 1043 | 'ml-2.5', 1044 | 'ml-3', 1045 | 'ml-3.5', 1046 | 'ml-4', 1047 | 'ml-5', 1048 | 'ml-6', 1049 | 'ml-7', 1050 | 'ml-8', 1051 | 'ml-9', 1052 | 'ml-10', 1053 | 'ml-11', 1054 | 'ml-12', 1055 | 'ml-14', 1056 | 'ml-16', 1057 | 'ml-20', 1058 | 'ml-24', 1059 | 'ml-28', 1060 | 'ml-32', 1061 | 'ml-36', 1062 | 'ml-40', 1063 | 'ml-44', 1064 | 'ml-48', 1065 | 'ml-52', 1066 | 'ml-56', 1067 | 'ml-60', 1068 | 'ml-64', 1069 | 'ml-72', 1070 | 'ml-80', 1071 | 'ml-96', 1072 | ], 1073 | // padding left top, right, bottom, left 1074 | paddingTop: [ 1075 | 'none', 1076 | 'pt-0', 1077 | 'pt-0.5', 1078 | 'pt-1', 1079 | 'pt-1.5', 1080 | 'pt-2', 1081 | 'pt-2.5', 1082 | 'pt-3', 1083 | 'pt-3.5', 1084 | 'pt-4', 1085 | 'pt-5', 1086 | 'pt-6', 1087 | 'pt-7', 1088 | 'pt-8', 1089 | 'pt-9', 1090 | 'pt-10', 1091 | 'pt-11', 1092 | 'pt-12', 1093 | 'pt-14', 1094 | 'pt-16', 1095 | 'pt-20', 1096 | 'pt-24', 1097 | 'pt-28', 1098 | 'pt-32', 1099 | 'pt-36', 1100 | 'pt-40', 1101 | 'pt-44', 1102 | 'pt-48', 1103 | 'pt-52', 1104 | 'pt-56', 1105 | 'pt-60', 1106 | 'pt-64', 1107 | 'pt-72', 1108 | 'pt-80', 1109 | 'pt-96', 1110 | ], 1111 | paddingRight: [ 1112 | 'none', 1113 | 'pr-0', 1114 | 'pr-0.5', 1115 | 'pr-1', 1116 | 'pr-1.5', 1117 | 'pr-2', 1118 | 'pr-2.5', 1119 | 'pr-3', 1120 | 'pr-3.5', 1121 | 'pr-4', 1122 | 'pr-5', 1123 | 'pr-6', 1124 | 'pr-7', 1125 | 'pr-8', 1126 | 'pr-9', 1127 | 'pr-10', 1128 | 'pr-11', 1129 | 'pr-12', 1130 | 'pr-14', 1131 | 'pr-16', 1132 | 'pr-20', 1133 | 'pr-24', 1134 | 'pr-28', 1135 | 'pr-32', 1136 | 'pr-36', 1137 | 'pr-40', 1138 | 'pr-44', 1139 | 'pr-48', 1140 | 'pr-52', 1141 | 'pr-56', 1142 | 'pr-60', 1143 | 'pr-64', 1144 | 'pr-72', 1145 | 'pr-80', 1146 | 'pr-96', 1147 | ], 1148 | paddingBottom: [ 1149 | 'none', 1150 | 'pb-0', 1151 | 'pb-0.5', 1152 | 'pb-1', 1153 | 'pb-1.5', 1154 | 'pb-2', 1155 | 'pb-2.5', 1156 | 'pb-3', 1157 | 'pb-3.5', 1158 | 'pb-4', 1159 | 'pb-5', 1160 | 'pb-6', 1161 | 'pb-7', 1162 | 'pb-8', 1163 | 'pb-9', 1164 | 'pb-10', 1165 | 'pb-11', 1166 | 'pb-12', 1167 | 'pb-14', 1168 | 'pb-16', 1169 | 'pb-20', 1170 | 'pb-24', 1171 | 'pb-28', 1172 | 'pb-32', 1173 | 'pb-36', 1174 | 'pb-40', 1175 | 'pb-44', 1176 | 'pb-48', 1177 | 'pb-52', 1178 | 'pb-56', 1179 | 'pb-60', 1180 | 'pb-64', 1181 | 'pb-72', 1182 | 'pb-80', 1183 | 'pb-96', 1184 | ], 1185 | paddingLeft: [ 1186 | 'none', 1187 | 'pl-0', 1188 | 'pl-0.5', 1189 | 'pl-1', 1190 | 'pl-1.5', 1191 | 'pl-2', 1192 | 'pl-2.5', 1193 | 'pl-3', 1194 | 'pl-3.5', 1195 | 'pl-4', 1196 | 'pl-5', 1197 | 'pl-6', 1198 | 'pl-7', 1199 | 'pl-8', 1200 | 'pl-9', 1201 | 'pl-10', 1202 | 'pl-11', 1203 | 'pl-12', 1204 | 'pl-14', 1205 | 'pl-16', 1206 | 'pl-20', 1207 | 'pl-24', 1208 | 'pl-28', 1209 | 'pl-32', 1210 | 'pl-36', 1211 | 'pl-40', 1212 | 'pl-44', 1213 | 'pl-48', 1214 | 'pl-52', 1215 | 'pl-56', 1216 | 'pl-60', 1217 | 'pl-64', 1218 | 'pl-72', 1219 | 'pl-80', 1220 | 'pl-96', 1221 | ], 1222 | // 2xl: padding left top, right, bottom, left 1223 | twoXlPaddingTop: [ 1224 | 'none', 1225 | '2xl:pt-0', 1226 | '2xl:pt-0.5', 1227 | '2xl:pt-1', 1228 | '2xl:pt-1.5', 1229 | '2xl:pt-2', 1230 | '2xl:pt-2.5', 1231 | '2xl:pt-3', 1232 | '2xl:pt-3.5', 1233 | '2xl:pt-4', 1234 | '2xl:pt-5', 1235 | '2xl:pt-6', 1236 | '2xl:pt-7', 1237 | '2xl:pt-8', 1238 | '2xl:pt-9', 1239 | '2xl:pt-10', 1240 | '2xl:pt-11', 1241 | '2xl:pt-12', 1242 | '2xl:pt-14', 1243 | '2xl:pt-16', 1244 | '2xl:pt-20', 1245 | '2xl:pt-24', 1246 | '2xl:pt-28', 1247 | '2xl:pt-32', 1248 | '2xl:pt-36', 1249 | '2xl:pt-40', 1250 | '2xl:pt-44', 1251 | '2xl:pt-48', 1252 | '2xl:pt-52', 1253 | '2xl:pt-56', 1254 | '2xl:pt-60', 1255 | '2xl:pt-64', 1256 | '2xl:pt-72', 1257 | '2xl:pt-80', 1258 | '2xl:pt-96', 1259 | ], 1260 | twoXlPaddingRight: [ 1261 | 'none', 1262 | '2xl:pr-0', 1263 | '2xl:pr-0.5', 1264 | '2xl:pr-1', 1265 | '2xl:pr-1.5', 1266 | '2xl:pr-2', 1267 | '2xl:pr-2.5', 1268 | '2xl:pr-3', 1269 | '2xl:pr-3.5', 1270 | '2xl:pr-4', 1271 | '2xl:pr-5', 1272 | '2xl:pr-6', 1273 | '2xl:pr-7', 1274 | '2xl:pr-8', 1275 | '2xl:pr-9', 1276 | '2xl:pr-10', 1277 | '2xl:pr-11', 1278 | '2xl:pr-12', 1279 | '2xl:pr-14', 1280 | '2xl:pr-16', 1281 | '2xl:pr-20', 1282 | '2xl:pr-24', 1283 | '2xl:pr-28', 1284 | '2xl:pr-32', 1285 | '2xl:pr-36', 1286 | '2xl:pr-40', 1287 | '2xl:pr-44', 1288 | '2xl:pr-48', 1289 | '2xl:pr-52', 1290 | '2xl:pr-56', 1291 | '2xl:pr-60', 1292 | '2xl:pr-64', 1293 | '2xl:pr-72', 1294 | '2xl:pr-80', 1295 | '2xl:pr-96', 1296 | ], 1297 | twoXlPaddingBottom: [ 1298 | 'none', 1299 | '2xl:pb-0', 1300 | '2xl:pb-0.5', 1301 | '2xl:pb-1', 1302 | '2xl:pb-1.5', 1303 | '2xl:pb-2', 1304 | '2xl:pb-2.5', 1305 | '2xl:pb-3', 1306 | '2xl:pb-3.5', 1307 | '2xl:pb-4', 1308 | '2xl:pb-5', 1309 | '2xl:pb-6', 1310 | '2xl:pb-7', 1311 | '2xl:pb-8', 1312 | '2xl:pb-9', 1313 | '2xl:pb-10', 1314 | '2xl:pb-11', 1315 | '2xl:pb-12', 1316 | '2xl:pb-14', 1317 | '2xl:pb-16', 1318 | '2xl:pb-20', 1319 | '2xl:pb-24', 1320 | '2xl:pb-28', 1321 | '2xl:pb-32', 1322 | '2xl:pb-36', 1323 | '2xl:pb-40', 1324 | '2xl:pb-44', 1325 | '2xl:pb-48', 1326 | '2xl:pb-52', 1327 | '2xl:pb-56', 1328 | '2xl:pb-60', 1329 | '2xl:pb-64', 1330 | '2xl:pb-72', 1331 | '2xl:pb-80', 1332 | '2xl:pb-96', 1333 | ], 1334 | twoXlPaddingLeft: [ 1335 | 'none', 1336 | '2xl:pl-0', 1337 | '2xl:pl-0.5', 1338 | '2xl:pl-1', 1339 | '2xl:pl-1.5', 1340 | '2xl:pl-2', 1341 | '2xl:pl-2.5', 1342 | '2xl:pl-3', 1343 | '2xl:pl-3.5', 1344 | '2xl:pl-4', 1345 | '2xl:pl-5', 1346 | '2xl:pl-6', 1347 | '2xl:pl-7', 1348 | '2xl:pl-8', 1349 | '2xl:pl-9', 1350 | '2xl:pl-10', 1351 | '2xl:pl-11', 1352 | '2xl:pl-12', 1353 | '2xl:pl-14', 1354 | '2xl:pl-16', 1355 | '2xl:pl-20', 1356 | '2xl:pl-24', 1357 | '2xl:pl-28', 1358 | '2xl:pl-32', 1359 | '2xl:pl-36', 1360 | '2xl:pl-40', 1361 | '2xl:pl-44', 1362 | '2xl:pl-48', 1363 | '2xl:pl-52', 1364 | '2xl:pl-56', 1365 | '2xl:pl-60', 1366 | '2xl:pl-64', 1367 | '2xl:pl-72', 1368 | '2xl:pl-80', 1369 | '2xl:pl-96', 1370 | ], 1371 | // xl: padding left top, right, bottom, left 1372 | xlPaddingTop: [ 1373 | 'none', 1374 | 'xl:pt-0', 1375 | 'xl:pt-0.5', 1376 | 'xl:pt-1', 1377 | 'xl:pt-1.5', 1378 | 'xl:pt-2', 1379 | 'xl:pt-2.5', 1380 | 'xl:pt-3', 1381 | 'xl:pt-3.5', 1382 | 'xl:pt-4', 1383 | 'xl:pt-5', 1384 | 'xl:pt-6', 1385 | 'xl:pt-7', 1386 | 'xl:pt-8', 1387 | 'xl:pt-9', 1388 | 'xl:pt-10', 1389 | 'xl:pt-11', 1390 | 'xl:pt-12', 1391 | 'xl:pt-14', 1392 | 'xl:pt-16', 1393 | 'xl:pt-20', 1394 | 'xl:pt-24', 1395 | 'xl:pt-28', 1396 | 'xl:pt-32', 1397 | 'xl:pt-36', 1398 | 'xl:pt-40', 1399 | 'xl:pt-44', 1400 | 'xl:pt-48', 1401 | 'xl:pt-52', 1402 | 'xl:pt-56', 1403 | 'xl:pt-60', 1404 | 'xl:pt-64', 1405 | 'xl:pt-72', 1406 | 'xl:pt-80', 1407 | 'xl:pt-96', 1408 | ], 1409 | xlPaddingRight: [ 1410 | 'none', 1411 | 'xl:pr-0', 1412 | 'xl:pr-0.5', 1413 | 'xl:pr-1', 1414 | 'xl:pr-1.5', 1415 | 'xl:pr-2', 1416 | 'xl:pr-2.5', 1417 | 'xl:pr-3', 1418 | 'xl:pr-3.5', 1419 | 'xl:pr-4', 1420 | 'xl:pr-5', 1421 | 'xl:pr-6', 1422 | 'xl:pr-7', 1423 | 'xl:pr-8', 1424 | 'xl:pr-9', 1425 | 'xl:pr-10', 1426 | 'xl:pr-11', 1427 | 'xl:pr-12', 1428 | 'xl:pr-14', 1429 | 'xl:pr-16', 1430 | 'xl:pr-20', 1431 | 'xl:pr-24', 1432 | 'xl:pr-28', 1433 | 'xl:pr-32', 1434 | 'xl:pr-36', 1435 | 'xl:pr-40', 1436 | 'xl:pr-44', 1437 | 'xl:pr-48', 1438 | 'xl:pr-52', 1439 | 'xl:pr-56', 1440 | 'xl:pr-60', 1441 | 'xl:pr-64', 1442 | 'xl:pr-72', 1443 | 'xl:pr-80', 1444 | 'xl:pr-96', 1445 | ], 1446 | xlPaddingBottom: [ 1447 | 'none', 1448 | 'xl:pb-0', 1449 | 'xl:pb-0.5', 1450 | 'xl:pb-1', 1451 | 'xl:pb-1.5', 1452 | 'xl:pb-2', 1453 | 'xl:pb-2.5', 1454 | 'xl:pb-3', 1455 | 'xl:pb-3.5', 1456 | 'xl:pb-4', 1457 | 'xl:pb-5', 1458 | 'xl:pb-6', 1459 | 'xl:pb-7', 1460 | 'xl:pb-8', 1461 | 'xl:pb-9', 1462 | 'xl:pb-10', 1463 | 'xl:pb-11', 1464 | 'xl:pb-12', 1465 | 'xl:pb-14', 1466 | 'xl:pb-16', 1467 | 'xl:pb-20', 1468 | 'xl:pb-24', 1469 | 'xl:pb-28', 1470 | 'xl:pb-32', 1471 | 'xl:pb-36', 1472 | 'xl:pb-40', 1473 | 'xl:pb-44', 1474 | 'xl:pb-48', 1475 | 'xl:pb-52', 1476 | 'xl:pb-56', 1477 | 'xl:pb-60', 1478 | 'xl:pb-64', 1479 | 'xl:pb-72', 1480 | 'xl:pb-80', 1481 | 'xl:pb-96', 1482 | ], 1483 | xlPaddingLeft: [ 1484 | 'none', 1485 | 'xl:pl-0', 1486 | 'xl:pl-0.5', 1487 | 'xl:pl-1', 1488 | 'xl:pl-1.5', 1489 | 'xl:pl-2', 1490 | 'xl:pl-2.5', 1491 | 'xl:pl-3', 1492 | 'xl:pl-3.5', 1493 | 'xl:pl-4', 1494 | 'xl:pl-5', 1495 | 'xl:pl-6', 1496 | 'xl:pl-7', 1497 | 'xl:pl-8', 1498 | 'xl:pl-9', 1499 | 'xl:pl-10', 1500 | 'xl:pl-11', 1501 | 'xl:pl-12', 1502 | 'xl:pl-14', 1503 | 'xl:pl-16', 1504 | 'xl:pl-20', 1505 | 'xl:pl-24', 1506 | 'xl:pl-28', 1507 | 'xl:pl-32', 1508 | 'xl:pl-36', 1509 | 'xl:pl-40', 1510 | 'xl:pl-44', 1511 | 'xl:pl-48', 1512 | 'xl:pl-52', 1513 | 'xl:pl-56', 1514 | 'xl:pl-60', 1515 | 'xl:pl-64', 1516 | 'xl:pl-72', 1517 | 'xl:pl-80', 1518 | 'xl:pl-96', 1519 | ], 1520 | // lg: padding left top, right, bottom, left 1521 | lgPaddingTop: [ 1522 | 'none', 1523 | 'lg:pt-0', 1524 | 'lg:pt-0.5', 1525 | 'lg:pt-1', 1526 | 'lg:pt-1.5', 1527 | 'lg:pt-2', 1528 | 'lg:pt-2.5', 1529 | 'lg:pt-3', 1530 | 'lg:pt-3.5', 1531 | 'lg:pt-4', 1532 | 'lg:pt-5', 1533 | 'lg:pt-6', 1534 | 'lg:pt-7', 1535 | 'lg:pt-8', 1536 | 'lg:pt-9', 1537 | 'lg:pt-10', 1538 | 'lg:pt-11', 1539 | 'lg:pt-12', 1540 | 'lg:pt-14', 1541 | 'lg:pt-16', 1542 | 'lg:pt-20', 1543 | 'lg:pt-24', 1544 | 'lg:pt-28', 1545 | 'lg:pt-32', 1546 | 'lg:pt-36', 1547 | 'lg:pt-40', 1548 | 'lg:pt-44', 1549 | 'lg:pt-48', 1550 | 'lg:pt-52', 1551 | 'lg:pt-56', 1552 | 'lg:pt-60', 1553 | 'lg:pt-64', 1554 | 'lg:pt-72', 1555 | 'lg:pt-80', 1556 | 'lg:pt-96', 1557 | ], 1558 | lgPaddingRight: [ 1559 | 'none', 1560 | 'lg:pr-0', 1561 | 'lg:pr-0.5', 1562 | 'lg:pr-1', 1563 | 'lg:pr-1.5', 1564 | 'lg:pr-2', 1565 | 'lg:pr-2.5', 1566 | 'lg:pr-3', 1567 | 'lg:pr-3.5', 1568 | 'lg:pr-4', 1569 | 'lg:pr-5', 1570 | 'lg:pr-6', 1571 | 'lg:pr-7', 1572 | 'lg:pr-8', 1573 | 'lg:pr-9', 1574 | 'lg:pr-10', 1575 | 'lg:pr-11', 1576 | 'lg:pr-12', 1577 | 'lg:pr-14', 1578 | 'lg:pr-16', 1579 | 'lg:pr-20', 1580 | 'lg:pr-24', 1581 | 'lg:pr-28', 1582 | 'lg:pr-32', 1583 | 'lg:pr-36', 1584 | 'lg:pr-40', 1585 | 'lg:pr-44', 1586 | 'lg:pr-48', 1587 | 'lg:pr-52', 1588 | 'lg:pr-56', 1589 | 'lg:pr-60', 1590 | 'lg:pr-64', 1591 | 'lg:pr-72', 1592 | 'lg:pr-80', 1593 | 'lg:pr-96', 1594 | ], 1595 | lgPaddingBottom: [ 1596 | 'none', 1597 | 'lg:pb-0', 1598 | 'lg:pb-0.5', 1599 | 'lg:pb-1', 1600 | 'lg:pb-1.5', 1601 | 'lg:pb-2', 1602 | 'lg:pb-2.5', 1603 | 'lg:pb-3', 1604 | 'lg:pb-3.5', 1605 | 'lg:pb-4', 1606 | 'lg:pb-5', 1607 | 'lg:pb-6', 1608 | 'lg:pb-7', 1609 | 'lg:pb-8', 1610 | 'lg:pb-9', 1611 | 'lg:pb-10', 1612 | 'lg:pb-11', 1613 | 'lg:pb-12', 1614 | 'lg:pb-14', 1615 | 'lg:pb-16', 1616 | 'lg:pb-20', 1617 | 'lg:pb-24', 1618 | 'lg:pb-28', 1619 | 'lg:pb-32', 1620 | 'lg:pb-36', 1621 | 'lg:pb-40', 1622 | 'lg:pb-44', 1623 | 'lg:pb-48', 1624 | 'lg:pb-52', 1625 | 'lg:pb-56', 1626 | 'lg:pb-60', 1627 | 'lg:pb-64', 1628 | 'lg:pb-72', 1629 | 'lg:pb-80', 1630 | 'lg:pb-96', 1631 | ], 1632 | lgPaddingLeft: [ 1633 | 'none', 1634 | 'lg:pl-0', 1635 | 'lg:pl-0.5', 1636 | 'lg:pl-1', 1637 | 'lg:pl-1.5', 1638 | 'lg:pl-2', 1639 | 'lg:pl-2.5', 1640 | 'lg:pl-3', 1641 | 'lg:pl-3.5', 1642 | 'lg:pl-4', 1643 | 'lg:pl-5', 1644 | 'lg:pl-6', 1645 | 'lg:pl-7', 1646 | 'lg:pl-8', 1647 | 'lg:pl-9', 1648 | 'lg:pl-10', 1649 | 'lg:pl-11', 1650 | 'lg:pl-12', 1651 | 'lg:pl-14', 1652 | 'lg:pl-16', 1653 | 'lg:pl-20', 1654 | 'lg:pl-24', 1655 | 'lg:pl-28', 1656 | 'lg:pl-32', 1657 | 'lg:pl-36', 1658 | 'lg:pl-40', 1659 | 'lg:pl-44', 1660 | 'lg:pl-48', 1661 | 'lg:pl-52', 1662 | 'lg:pl-56', 1663 | 'lg:pl-60', 1664 | 'lg:pl-64', 1665 | 'lg:pl-72', 1666 | 'lg:pl-80', 1667 | 'lg:pl-96', 1668 | ], 1669 | // md: padding left top, right, bottom, left 1670 | mdPaddingTop: [ 1671 | 'none', 1672 | 'md:pt-0', 1673 | 'md:pt-0.5', 1674 | 'md:pt-1', 1675 | 'md:pt-1.5', 1676 | 'md:pt-2', 1677 | 'md:pt-2.5', 1678 | 'md:pt-3', 1679 | 'md:pt-3.5', 1680 | 'md:pt-4', 1681 | 'md:pt-5', 1682 | 'md:pt-6', 1683 | 'md:pt-7', 1684 | 'md:pt-8', 1685 | 'md:pt-9', 1686 | 'md:pt-10', 1687 | 'md:pt-11', 1688 | 'md:pt-12', 1689 | 'md:pt-14', 1690 | 'md:pt-16', 1691 | 'md:pt-20', 1692 | 'md:pt-24', 1693 | 'md:pt-28', 1694 | 'md:pt-32', 1695 | 'md:pt-36', 1696 | 'md:pt-40', 1697 | 'md:pt-44', 1698 | 'md:pt-48', 1699 | 'md:pt-52', 1700 | 'md:pt-56', 1701 | 'md:pt-60', 1702 | 'md:pt-64', 1703 | 'md:pt-72', 1704 | 'md:pt-80', 1705 | 'md:pt-96', 1706 | ], 1707 | mdPaddingRight: [ 1708 | 'none', 1709 | 'md:pr-0', 1710 | 'md:pr-0.5', 1711 | 'md:pr-1', 1712 | 'md:pr-1.5', 1713 | 'md:pr-2', 1714 | 'md:pr-2.5', 1715 | 'md:pr-3', 1716 | 'md:pr-3.5', 1717 | 'md:pr-4', 1718 | 'md:pr-5', 1719 | 'md:pr-6', 1720 | 'md:pr-7', 1721 | 'md:pr-8', 1722 | 'md:pr-9', 1723 | 'md:pr-10', 1724 | 'md:pr-11', 1725 | 'md:pr-12', 1726 | 'md:pr-14', 1727 | 'md:pr-16', 1728 | 'md:pr-20', 1729 | 'md:pr-24', 1730 | 'md:pr-28', 1731 | 'md:pr-32', 1732 | 'md:pr-36', 1733 | 'md:pr-40', 1734 | 'md:pr-44', 1735 | 'md:pr-48', 1736 | 'md:pr-52', 1737 | 'md:pr-56', 1738 | 'md:pr-60', 1739 | 'md:pr-64', 1740 | 'md:pr-72', 1741 | 'md:pr-80', 1742 | 'md:pr-96', 1743 | ], 1744 | mdPaddingBottom: [ 1745 | 'none', 1746 | 'md:pb-0', 1747 | 'md:pb-0.5', 1748 | 'md:pb-1', 1749 | 'md:pb-1.5', 1750 | 'md:pb-2', 1751 | 'md:pb-2.5', 1752 | 'md:pb-3', 1753 | 'md:pb-3.5', 1754 | 'md:pb-4', 1755 | 'md:pb-5', 1756 | 'md:pb-6', 1757 | 'md:pb-7', 1758 | 'md:pb-8', 1759 | 'md:pb-9', 1760 | 'md:pb-10', 1761 | 'md:pb-11', 1762 | 'md:pb-12', 1763 | 'md:pb-14', 1764 | 'md:pb-16', 1765 | 'md:pb-20', 1766 | 'md:pb-24', 1767 | 'md:pb-28', 1768 | 'md:pb-32', 1769 | 'md:pb-36', 1770 | 'md:pb-40', 1771 | 'md:pb-44', 1772 | 'md:pb-48', 1773 | 'md:pb-52', 1774 | 'md:pb-56', 1775 | 'md:pb-60', 1776 | 'md:pb-64', 1777 | 'md:pb-72', 1778 | 'md:pb-80', 1779 | 'md:pb-96', 1780 | ], 1781 | mdPaddingLeft: [ 1782 | 'none', 1783 | 'md:pl-0', 1784 | 'md:pl-0.5', 1785 | 'md:pl-1', 1786 | 'md:pl-1.5', 1787 | 'md:pl-2', 1788 | 'md:pl-2.5', 1789 | 'md:pl-3', 1790 | 'md:pl-3.5', 1791 | 'md:pl-4', 1792 | 'md:pl-5', 1793 | 'md:pl-6', 1794 | 'md:pl-7', 1795 | 'md:pl-8', 1796 | 'md:pl-9', 1797 | 'md:pl-10', 1798 | 'md:pl-11', 1799 | 'md:pl-12', 1800 | 'md:pl-14', 1801 | 'md:pl-16', 1802 | 'md:pl-20', 1803 | 'md:pl-24', 1804 | 'md:pl-28', 1805 | 'md:pl-32', 1806 | 'md:pl-36', 1807 | 'md:pl-40', 1808 | 'md:pl-44', 1809 | 'md:pl-48', 1810 | 'md:pl-52', 1811 | 'md:pl-56', 1812 | 'md:pl-60', 1813 | 'md:pl-64', 1814 | 'md:pl-72', 1815 | 'md:pl-80', 1816 | 'md:pl-96', 1817 | ], 1818 | // sm: padding left top, right, bottom, left 1819 | smPaddingTop: [ 1820 | 'none', 1821 | 'sm:pt-0', 1822 | 'sm:pt-0.5', 1823 | 'sm:pt-1', 1824 | 'sm:pt-1.5', 1825 | 'sm:pt-2', 1826 | 'sm:pt-2.5', 1827 | 'sm:pt-3', 1828 | 'sm:pt-3.5', 1829 | 'sm:pt-4', 1830 | 'sm:pt-5', 1831 | 'sm:pt-6', 1832 | 'sm:pt-7', 1833 | 'sm:pt-8', 1834 | 'sm:pt-9', 1835 | 'sm:pt-10', 1836 | 'sm:pt-11', 1837 | 'sm:pt-12', 1838 | 'sm:pt-14', 1839 | 'sm:pt-16', 1840 | 'sm:pt-20', 1841 | 'sm:pt-24', 1842 | 'sm:pt-28', 1843 | 'sm:pt-32', 1844 | 'sm:pt-36', 1845 | 'sm:pt-40', 1846 | 'sm:pt-44', 1847 | 'sm:pt-48', 1848 | 'sm:pt-52', 1849 | 'sm:pt-56', 1850 | 'sm:pt-60', 1851 | 'sm:pt-64', 1852 | 'sm:pt-72', 1853 | 'sm:pt-80', 1854 | 'sm:pt-96', 1855 | ], 1856 | smPaddingRight: [ 1857 | 'none', 1858 | 'sm:pr-0', 1859 | 'sm:pr-0.5', 1860 | 'sm:pr-1', 1861 | 'sm:pr-1.5', 1862 | 'sm:pr-2', 1863 | 'sm:pr-2.5', 1864 | 'sm:pr-3', 1865 | 'sm:pr-3.5', 1866 | 'sm:pr-4', 1867 | 'sm:pr-5', 1868 | 'sm:pr-6', 1869 | 'sm:pr-7', 1870 | 'sm:pr-8', 1871 | 'sm:pr-9', 1872 | 'sm:pr-10', 1873 | 'sm:pr-11', 1874 | 'sm:pr-12', 1875 | 'sm:pr-14', 1876 | 'sm:pr-16', 1877 | 'sm:pr-20', 1878 | 'sm:pr-24', 1879 | 'sm:pr-28', 1880 | 'sm:pr-32', 1881 | 'sm:pr-36', 1882 | 'sm:pr-40', 1883 | 'sm:pr-44', 1884 | 'sm:pr-48', 1885 | 'sm:pr-52', 1886 | 'sm:pr-56', 1887 | 'sm:pr-60', 1888 | 'sm:pr-64', 1889 | 'sm:pr-72', 1890 | 'sm:pr-80', 1891 | 'sm:pr-96', 1892 | ], 1893 | smPaddingBottom: [ 1894 | 'none', 1895 | 'sm:pb-0', 1896 | 'sm:pb-0.5', 1897 | 'sm:pb-1', 1898 | 'sm:pb-1.5', 1899 | 'sm:pb-2', 1900 | 'sm:pb-2.5', 1901 | 'sm:pb-3', 1902 | 'sm:pb-3.5', 1903 | 'sm:pb-4', 1904 | 'sm:pb-5', 1905 | 'sm:pb-6', 1906 | 'sm:pb-7', 1907 | 'sm:pb-8', 1908 | 'sm:pb-9', 1909 | 'sm:pb-10', 1910 | 'sm:pb-11', 1911 | 'sm:pb-12', 1912 | 'sm:pb-14', 1913 | 'sm:pb-16', 1914 | 'sm:pb-20', 1915 | 'sm:pb-24', 1916 | 'sm:pb-28', 1917 | 'sm:pb-32', 1918 | 'sm:pb-36', 1919 | 'sm:pb-40', 1920 | 'sm:pb-44', 1921 | 'sm:pb-48', 1922 | 'sm:pb-52', 1923 | 'sm:pb-56', 1924 | 'sm:pb-60', 1925 | 'sm:pb-64', 1926 | 'sm:pb-72', 1927 | 'sm:pb-80', 1928 | 'sm:pb-96', 1929 | ], 1930 | smPaddingLeft: [ 1931 | 'none', 1932 | 'sm:pl-0', 1933 | 'sm:pl-0.5', 1934 | 'sm:pl-1', 1935 | 'sm:pl-1.5', 1936 | 'sm:pl-2', 1937 | 'sm:pl-2.5', 1938 | 'sm:pl-3', 1939 | 'sm:pl-3.5', 1940 | 'sm:pl-4', 1941 | 'sm:pl-5', 1942 | 'sm:pl-6', 1943 | 'sm:pl-7', 1944 | 'sm:pl-8', 1945 | 'sm:pl-9', 1946 | 'sm:pl-10', 1947 | 'sm:pl-11', 1948 | 'sm:pl-12', 1949 | 'sm:pl-14', 1950 | 'sm:pl-16', 1951 | 'sm:pl-20', 1952 | 'sm:pl-24', 1953 | 'sm:pl-28', 1954 | 'sm:pl-32', 1955 | 'sm:pl-36', 1956 | 'sm:pl-40', 1957 | 'sm:pl-44', 1958 | 'sm:pl-48', 1959 | 'sm:pl-52', 1960 | 'sm:pl-56', 1961 | 'sm:pl-60', 1962 | 'sm:pl-64', 1963 | 'sm:pl-72', 1964 | 'sm:pl-80', 1965 | 'sm:pl-96', 1966 | ], 1967 | grid: [ 1968 | 'grid', 1969 | '2xl:grid', 1970 | 'xl:grid', 1971 | 'lg:grid', 1972 | 'md:grid', 1973 | 'sm:grid', 1974 | 'grid-auto-columns', 1975 | 'auto-cols-min', 1976 | 'auto-cols-max', 1977 | 'auto-cols-fr', 1978 | 'grid-flow-row-dense', 1979 | 1980 | // grid cols 1981 | 'grid-cols-1', 1982 | 'grid-cols-2', 1983 | 'grid-cols-3', 1984 | 'grid-cols-4', 1985 | 'grid-cols-5', 1986 | 'grid-cols-6', 1987 | 'grid-cols-7', 1988 | 'grid-cols-8', 1989 | 'grid-cols-9', 1990 | 'grid-cols-10', 1991 | 'grid-cols-11', 1992 | 'grid-cols-12', 1993 | '2xl:grid-cols-1', 1994 | '2xl:grid-cols-2', 1995 | '2xl:grid-cols-3', 1996 | '2xl:grid-cols-4', 1997 | '2xl:grid-cols-5', 1998 | '2xl:grid-cols-6', 1999 | '2xl:grid-cols-7', 2000 | '2xl:grid-cols-8', 2001 | '2xl:grid-cols-9', 2002 | '2xl:grid-cols-10', 2003 | '2xl:grid-cols-11', 2004 | '2xl:grid-cols-12', 2005 | 'xl:grid-cols-1', 2006 | 'xl:grid-cols-2', 2007 | 'xl:grid-cols-3', 2008 | 'xl:grid-cols-4', 2009 | 'xl:grid-cols-5', 2010 | 'xl:grid-cols-6', 2011 | 'xl:grid-cols-7', 2012 | 'xl:grid-cols-8', 2013 | 'xl:grid-cols-9', 2014 | 'xl:grid-cols-10', 2015 | 'xl:grid-cols-11', 2016 | 'xl:grid-cols-12', 2017 | 'lg:grid-cols-1', 2018 | 'lg:grid-cols-2', 2019 | 'lg:grid-cols-3', 2020 | 'lg:grid-cols-4', 2021 | 'lg:grid-cols-5', 2022 | 'lg:grid-cols-6', 2023 | 'lg:grid-cols-7', 2024 | 'lg:grid-cols-8', 2025 | 'lg:grid-cols-9', 2026 | 'lg:grid-cols-10', 2027 | 'lg:grid-cols-11', 2028 | 'lg:grid-cols-12', 2029 | 'md:grid-cols-1', 2030 | 'md:grid-cols-2', 2031 | 'md:grid-cols-3', 2032 | 'md:grid-cols-4', 2033 | 'md:grid-cols-5', 2034 | 'md:grid-cols-6', 2035 | 'md:grid-cols-7', 2036 | 'md:grid-cols-8', 2037 | 'md:grid-cols-9', 2038 | 'md:grid-cols-10', 2039 | 'md:grid-cols-11', 2040 | 'md:grid-cols-12', 2041 | 'sm:grid-cols-1', 2042 | 'sm:grid-cols-2', 2043 | 'sm:grid-cols-3', 2044 | 'sm:grid-cols-4', 2045 | 'sm:grid-cols-5', 2046 | 'sm:grid-cols-6', 2047 | 'sm:grid-cols-7', 2048 | 'sm:grid-cols-8', 2049 | 'sm:grid-cols-9', 2050 | 'sm:grid-cols-10', 2051 | 'sm:grid-cols-11', 2052 | 'sm:grid-cols-12', 2053 | 2054 | // 'grid-rows 2055 | 'grid-rows-1', 2056 | 'grid-rows-2', 2057 | 'grid-rows-3', 2058 | 'grid-rows-4', 2059 | 'grid-rows-5', 2060 | 'grid-rows-6', 2061 | 'grid-rows-7', 2062 | 'grid-rows-8', 2063 | 'grid-rows-9', 2064 | 'grid-rows-10', 2065 | 'grid-rows-11', 2066 | 'grid-rows-12', 2067 | '2xl:grid-rows-1', 2068 | '2xl:grid-rows-2', 2069 | '2xl:grid-rows-3', 2070 | '2xl:grid-rows-4', 2071 | '2xl:grid-rows-5', 2072 | '2xl:grid-rows-6', 2073 | '2xl:grid-rows-7', 2074 | '2xl:grid-rows-8', 2075 | '2xl:grid-rows-9', 2076 | '2xl:grid-rows-10', 2077 | '2xl:grid-rows-11', 2078 | '2xl:grid-rows-12', 2079 | 'xl:grid-rows-1', 2080 | 'xl:grid-rows-2', 2081 | 'xl:grid-rows-3', 2082 | 'xl:grid-rows-4', 2083 | 'xl:grid-rows-5', 2084 | 'xl:grid-rows-6', 2085 | 'xl:grid-rows-7', 2086 | 'xl:grid-rows-8', 2087 | 'xl:grid-rows-9', 2088 | 'xl:grid-rows-10', 2089 | 'xl:grid-rows-11', 2090 | 'xl:grid-rows-12', 2091 | 'lg:grid-rows-1', 2092 | 'lg:grid-rows-2', 2093 | 'lg:grid-rows-3', 2094 | 'lg:grid-rows-4', 2095 | 'lg:grid-rows-5', 2096 | 'lg:grid-rows-6', 2097 | 'lg:grid-rows-7', 2098 | 'lg:grid-rows-8', 2099 | 'lg:grid-rows-9', 2100 | 'lg:grid-rows-10', 2101 | 'lg:grid-rows-11', 2102 | 'lg:grid-rows-12', 2103 | 'md:grid-rows-1', 2104 | 'md:grid-rows-2', 2105 | 'md:grid-rows-3', 2106 | 'md:grid-rows-4', 2107 | 'md:grid-rows-5', 2108 | 'md:grid-rows-6', 2109 | 'md:grid-rows-7', 2110 | 'md:grid-rows-8', 2111 | 'md:grid-rows-9', 2112 | 'md:grid-rows-10', 2113 | 'md:grid-rows-11', 2114 | 'md:grid-rows-12', 2115 | 'sm:grid-rows-1', 2116 | 'sm:grid-rows-2', 2117 | 'sm:grid-rows-3', 2118 | 'sm:grid-rows-4', 2119 | 'sm:grid-rows-5', 2120 | 'sm:grid-rows-6', 2121 | 'sm:grid-rows-7', 2122 | 'sm:grid-rows-8', 2123 | 'sm:grid-rows-9', 2124 | 'sm:grid-rows-10', 2125 | 'sm:grid-rows-11', 2126 | 'sm:grid-rows-12', 2127 | 2128 | // grid 2129 | '2xl:flex', 2130 | 'xl:flex', 2131 | 'lg:flex', 2132 | 'md:flex', 2133 | 'sm:flex', 2134 | 'grid-flow-col auto-cols-max', 2135 | 'auto-cols-max', 2136 | 'grid-cols-[minmax(10rem,1fr)]', 2137 | 'grid-cols-[minmax(14rem,1fr)]', 2138 | 'grid-cols-[minmax(50px,100px)]', 2139 | 'auto-cols-[minmax(100px,_1fr)]', 2140 | // colors 2141 | ], 2142 | gridLg: ['lg:auto-cols-[minmax(100px,_4fr)]'], 2143 | image: [ 2144 | 'aspect-square', 2145 | 'aspect-[4/3]', 2146 | 'aspect-[9/16]', 2147 | 'aspect-[16/9]', 2148 | 'object-top', 2149 | 'object-center', 2150 | 'object-right', 2151 | 'object-left', 2152 | ], 2153 | video: ['w-full', 'aspect-video', 'bg-gray-600'], 2154 | }; 2155 | 2156 | export default compiledCSS; 2157 | -------------------------------------------------------------------------------- /utils/page-builder/tailwaind-colors.js: -------------------------------------------------------------------------------- 1 | const tailwindColors = { 2 | backgroundColorVariables: [ 3 | 'none', 4 | 'bg-white', 5 | 'bg-black', 6 | 7 | 'bg-slate-50', 8 | 'bg-slate-100', 9 | 'bg-slate-200', 10 | 'bg-slate-300', 11 | 'bg-slate-400', 12 | 'bg-slate-500', 13 | 'bg-slate-600', 14 | 'bg-slate-700', 15 | 'bg-slate-800', 16 | 'bg-slate-900', 17 | 18 | 'bg-gray-50', 19 | 'bg-gray-100', 20 | 'bg-gray-200', 21 | 'bg-gray-300', 22 | 'bg-gray-400', 23 | 'bg-gray-500', 24 | 'bg-gray-600', 25 | 'bg-gray-700', 26 | 'bg-gray-800', 27 | 'bg-gray-900', 28 | 29 | 'bg-zinc-50', 30 | 'bg-zinc-100', 31 | 'bg-zinc-200', 32 | 'bg-zinc-300', 33 | 'bg-zinc-400', 34 | 'bg-zinc-500', 35 | 'bg-zinc-600', 36 | 'bg-zinc-700', 37 | 'bg-zinc-800', 38 | 'bg-zinc-900', 39 | 40 | 'bg-neutral-50', 41 | 'bg-neutral-100', 42 | 'bg-neutral-200', 43 | 'bg-neutral-300', 44 | 'bg-neutral-400', 45 | 'bg-neutral-500', 46 | 'bg-neutral-600', 47 | 'bg-neutral-700', 48 | 'bg-neutral-800', 49 | 'bg-neutral-900', 50 | 51 | 'bg-stone-50', 52 | 'bg-stone-100', 53 | 'bg-stone-200', 54 | 'bg-stone-300', 55 | 'bg-stone-400', 56 | 'bg-stone-500', 57 | 'bg-stone-600', 58 | 'bg-stone-700', 59 | 'bg-stone-800', 60 | 'bg-stone-900', 61 | 62 | 'bg-red-50', 63 | 'bg-red-100', 64 | 'bg-red-200', 65 | 'bg-red-300', 66 | 'bg-red-400', 67 | 'bg-red-500', 68 | 'bg-red-600', 69 | 'bg-red-700', 70 | 'bg-red-800', 71 | 'bg-red-900', 72 | 73 | 'bg-orange-50', 74 | 'bg-orange-100', 75 | 'bg-orange-200', 76 | 'bg-orange-300', 77 | 'bg-orange-400', 78 | 'bg-orange-500', 79 | 'bg-orange-600', 80 | 'bg-orange-700', 81 | 'bg-orange-800', 82 | 'bg-orange-900', 83 | 84 | 'bg-amber-50', 85 | 'bg-amber-100', 86 | 'bg-amber-200', 87 | 'bg-amber-300', 88 | 'bg-amber-400', 89 | 'bg-amber-500', 90 | 'bg-amber-600', 91 | 'bg-amber-700', 92 | 'bg-amber-800', 93 | 'bg-amber-900', 94 | 95 | 'bg-yellow-50', 96 | 'bg-yellow-100', 97 | 'bg-yellow-200', 98 | 'bg-yellow-300', 99 | 'bg-yellow-400', 100 | 'bg-yellow-500', 101 | 'bg-yellow-600', 102 | 'bg-yellow-700', 103 | 'bg-yellow-800', 104 | 'bg-yellow-900', 105 | 106 | 'bg-lime-50', 107 | 'bg-lime-100', 108 | 'bg-lime-200', 109 | 'bg-lime-300', 110 | 'bg-lime-400', 111 | 'bg-lime-500', 112 | 'bg-lime-600', 113 | 'bg-lime-700', 114 | 'bg-lime-800', 115 | 'bg-lime-900', 116 | 117 | 'bg-green-50', 118 | 'bg-green-100', 119 | 'bg-green-200', 120 | 'bg-green-300', 121 | 'bg-green-400', 122 | 'bg-green-500', 123 | 'bg-green-600', 124 | 'bg-green-700', 125 | 'bg-green-800', 126 | 'bg-green-900', 127 | 128 | 'bg-emerald-50', 129 | 'bg-emerald-100', 130 | 'bg-emerald-200', 131 | 'bg-emerald-300', 132 | 'bg-emerald-400', 133 | 'bg-emerald-500', 134 | 'bg-emerald-600', 135 | 'bg-emerald-700', 136 | 'bg-emerald-800', 137 | 'bg-emerald-900', 138 | 139 | 'bg-teal-50', 140 | 'bg-teal-100', 141 | 'bg-teal-200', 142 | 'bg-teal-300', 143 | 'bg-teal-400', 144 | 'bg-teal-500', 145 | 'bg-teal-600', 146 | 'bg-teal-700', 147 | 'bg-teal-800', 148 | 'bg-teal-900', 149 | 150 | 'bg-cyan-50', 151 | 'bg-cyan-100', 152 | 'bg-cyan-200', 153 | 'bg-cyan-300', 154 | 'bg-cyan-400', 155 | 'bg-cyan-500', 156 | 'bg-cyan-600', 157 | 'bg-cyan-700', 158 | 'bg-cyan-800', 159 | 'bg-cyan-900', 160 | 161 | 'bg-sky-50', 162 | 'bg-sky-100', 163 | 'bg-sky-200', 164 | 'bg-sky-300', 165 | 'bg-sky-400', 166 | 'bg-sky-500', 167 | 'bg-sky-600', 168 | 'bg-sky-700', 169 | 'bg-sky-800', 170 | 'bg-sky-900', 171 | 172 | 'bg-blue-50', 173 | 'bg-blue-100', 174 | 'bg-blue-200', 175 | 'bg-blue-300', 176 | 'bg-blue-400', 177 | 'bg-blue-500', 178 | 'bg-blue-600', 179 | 'bg-blue-700', 180 | 'bg-blue-800', 181 | 'bg-blue-900', 182 | 183 | 'bg-indigo-50', 184 | 'bg-indigo-100', 185 | 'bg-indigo-200', 186 | 'bg-indigo-300', 187 | 'bg-indigo-400', 188 | 'bg-indigo-500', 189 | 'bg-indigo-600', 190 | 'bg-indigo-700', 191 | 'bg-indigo-800', 192 | 'bg-indigo-900', 193 | 194 | 'bg-violet-50', 195 | 'bg-violet-100', 196 | 'bg-violet-200', 197 | 'bg-violet-300', 198 | 'bg-violet-400', 199 | 'bg-violet-500', 200 | 'bg-violet-600', 201 | 'bg-violet-700', 202 | 'bg-violet-800', 203 | 'bg-violet-900', 204 | 205 | 'bg-purple-50', 206 | 'bg-purple-100', 207 | 'bg-purple-200', 208 | 'bg-purple-300', 209 | 'bg-purple-400', 210 | 'bg-purple-500', 211 | 'bg-purple-600', 212 | 'bg-purple-700', 213 | 'bg-purple-800', 214 | 'bg-purple-900', 215 | 216 | 'bg-fuchsia-50', 217 | 'bg-fuchsia-100', 218 | 'bg-fuchsia-200', 219 | 'bg-fuchsia-300', 220 | 'bg-fuchsia-400', 221 | 'bg-fuchsia-500', 222 | 'bg-fuchsia-600', 223 | 'bg-fuchsia-700', 224 | 'bg-fuchsia-800', 225 | 'bg-fuchsia-900', 226 | 227 | 'bg-pink-50', 228 | 'bg-pink-100', 229 | 'bg-pink-200', 230 | 'bg-pink-300', 231 | 'bg-pink-400', 232 | 'bg-pink-500', 233 | 'bg-pink-600', 234 | 'bg-pink-700', 235 | 'bg-pink-800', 236 | 'bg-pink-900', 237 | 238 | 'bg-rose-50', 239 | 'bg-rose-100', 240 | 'bg-rose-200', 241 | 'bg-rose-300', 242 | 'bg-rose-400', 243 | 'bg-rose-500', 244 | 'bg-rose-600', 245 | 'bg-rose-700', 246 | 'bg-rose-800', 247 | 'bg-rose-900', 248 | ], 249 | textColorVariables: [ 250 | 'none', 251 | 'text-white', 252 | 'text-black', 253 | 254 | 'text-slate-50', 255 | 'text-slate-100', 256 | 'text-slate-200', 257 | 'text-slate-300', 258 | 'text-slate-400', 259 | 'text-slate-500', 260 | 'text-slate-600', 261 | 'text-slate-700', 262 | 'text-slate-800', 263 | 'text-slate-900', 264 | 265 | 'text-gray-50', 266 | 'text-gray-100', 267 | 'text-gray-200', 268 | 'text-gray-300', 269 | 'text-gray-400', 270 | 'text-gray-500', 271 | 'text-gray-600', 272 | 'text-gray-700', 273 | 'text-gray-800', 274 | 'text-gray-900', 275 | 276 | 'text-zinc-50', 277 | 'text-zinc-100', 278 | 'text-zinc-200', 279 | 'text-zinc-300', 280 | 'text-zinc-400', 281 | 'text-zinc-500', 282 | 'text-zinc-600', 283 | 'text-zinc-700', 284 | 'text-zinc-800', 285 | 'text-zinc-900', 286 | 287 | 'text-neutral-50', 288 | 'text-neutral-100', 289 | 'text-neutral-200', 290 | 'text-neutral-300', 291 | 'text-neutral-400', 292 | 'text-neutral-500', 293 | 'text-neutral-600', 294 | 'text-neutral-700', 295 | 'text-neutral-800', 296 | 'text-neutral-900', 297 | 298 | 'text-stone-50', 299 | 'text-stone-100', 300 | 'text-stone-200', 301 | 'text-stone-300', 302 | 'text-stone-400', 303 | 'text-stone-500', 304 | 'text-stone-600', 305 | 'text-stone-700', 306 | 'text-stone-800', 307 | 'text-stone-900', 308 | 309 | 'text-red-50', 310 | 'text-red-100', 311 | 'text-red-200', 312 | 'text-red-300', 313 | 'text-red-400', 314 | 'text-red-500', 315 | 'text-red-600', 316 | 'text-red-700', 317 | 'text-red-800', 318 | 'text-red-900', 319 | 320 | 'text-orange-50', 321 | 'text-orange-100', 322 | 'text-orange-200', 323 | 'text-orange-300', 324 | 'text-orange-400', 325 | 'text-orange-500', 326 | 'text-orange-600', 327 | 'text-orange-700', 328 | 'text-orange-800', 329 | 'text-orange-900', 330 | 331 | 'text-amber-50', 332 | 'text-amber-100', 333 | 'text-amber-200', 334 | 'text-amber-300', 335 | 'text-amber-400', 336 | 'text-amber-500', 337 | 'text-amber-600', 338 | 'text-amber-700', 339 | 'text-amber-800', 340 | 'text-amber-900', 341 | 342 | 'text-yellow-50', 343 | 'text-yellow-100', 344 | 'text-yellow-200', 345 | 'text-yellow-300', 346 | 'text-yellow-400', 347 | 'text-yellow-500', 348 | 'text-yellow-600', 349 | 'text-yellow-700', 350 | 'text-yellow-800', 351 | 'text-yellow-900', 352 | 353 | 'text-lime-50', 354 | 'text-lime-100', 355 | 'text-lime-200', 356 | 'text-lime-300', 357 | 'text-lime-400', 358 | 'text-lime-500', 359 | 'text-lime-600', 360 | 'text-lime-700', 361 | 'text-lime-800', 362 | 'text-lime-900', 363 | 364 | 'text-green-50', 365 | 'text-green-100', 366 | 'text-green-200', 367 | 'text-green-300', 368 | 'text-green-400', 369 | 'text-green-500', 370 | 'text-green-600', 371 | 'text-green-700', 372 | 'text-green-800', 373 | 'text-green-900', 374 | 375 | 'text-emerald-50', 376 | 'text-emerald-100', 377 | 'text-emerald-200', 378 | 'text-emerald-300', 379 | 'text-emerald-400', 380 | 'text-emerald-500', 381 | 'text-emerald-600', 382 | 'text-emerald-700', 383 | 'text-emerald-800', 384 | 'text-emerald-900', 385 | 386 | 'text-teal-50', 387 | 'text-teal-100', 388 | 'text-teal-200', 389 | 'text-teal-300', 390 | 'text-teal-400', 391 | 'text-teal-500', 392 | 'text-teal-600', 393 | 'text-teal-700', 394 | 'text-teal-800', 395 | 'text-teal-900', 396 | 397 | 'text-cyan-50', 398 | 'text-cyan-100', 399 | 'text-cyan-200', 400 | 'text-cyan-300', 401 | 'text-cyan-400', 402 | 'text-cyan-500', 403 | 'text-cyan-600', 404 | 'text-cyan-700', 405 | 'text-cyan-800', 406 | 'text-cyan-900', 407 | 408 | 'text-sky-50', 409 | 'text-sky-100', 410 | 'text-sky-200', 411 | 'text-sky-300', 412 | 'text-sky-400', 413 | 'text-sky-500', 414 | 'text-sky-600', 415 | 'text-sky-700', 416 | 'text-sky-800', 417 | 'text-sky-900', 418 | 419 | 'text-blue-50', 420 | 'text-blue-100', 421 | 'text-blue-200', 422 | 'text-blue-300', 423 | 'text-blue-400', 424 | 'text-blue-500', 425 | 'text-blue-600', 426 | 'text-blue-700', 427 | 'text-blue-800', 428 | 'text-blue-900', 429 | 430 | 'text-indigo-50', 431 | 'text-indigo-100', 432 | 'text-indigo-200', 433 | 'text-indigo-300', 434 | 'text-indigo-400', 435 | 'text-indigo-500', 436 | 'text-indigo-600', 437 | 'text-indigo-700', 438 | 'text-indigo-800', 439 | 'text-indigo-900', 440 | 441 | 'text-violet-50', 442 | 'text-violet-100', 443 | 'text-violet-200', 444 | 'text-violet-300', 445 | 'text-violet-400', 446 | 'text-violet-500', 447 | 'text-violet-600', 448 | 'text-violet-700', 449 | 'text-violet-800', 450 | 'text-violet-900', 451 | 452 | 'text-purple-50', 453 | 'text-purple-100', 454 | 'text-purple-200', 455 | 'text-purple-300', 456 | 'text-purple-400', 457 | 'text-purple-500', 458 | 'text-purple-600', 459 | 'text-purple-700', 460 | 'text-purple-800', 461 | 'text-purple-900', 462 | 463 | 'text-fuchsia-50', 464 | 'text-fuchsia-100', 465 | 'text-fuchsia-200', 466 | 'text-fuchsia-300', 467 | 'text-fuchsia-400', 468 | 'text-fuchsia-500', 469 | 'text-fuchsia-600', 470 | 'text-fuchsia-700', 471 | 'text-fuchsia-800', 472 | 'text-fuchsia-900', 473 | 474 | 'text-pink-50', 475 | 'text-pink-100', 476 | 'text-pink-200', 477 | 'text-pink-300', 478 | 'text-pink-400', 479 | 'text-pink-500', 480 | 'text-pink-600', 481 | 'text-pink-700', 482 | 'text-pink-800', 483 | 'text-pink-900', 484 | 485 | 'text-rose-50', 486 | 'text-rose-100', 487 | 'text-rose-200', 488 | 'text-rose-300', 489 | 'text-rose-400', 490 | 'text-rose-500', 491 | 'text-rose-600', 492 | 'text-rose-700', 493 | 'text-rose-800', 494 | 'text-rose-900', 495 | ], 496 | }; 497 | 498 | export default tailwindColors; 499 | -------------------------------------------------------------------------------- /utils/pricing/job-prices.js: -------------------------------------------------------------------------------- 1 | const jobPrices = [ 2 | { 3 | name: 'Single Job Posting', 4 | id: 'single_job_post', 5 | price: '$150', 6 | priceRaw: '150', 7 | totalPrice: '150', 8 | title: 'Single job', 9 | description: 'Single job post.', 10 | features: [ 11 | 'Page Builder', 12 | '30 days visibility', 13 | 'Up to 8000 dayly visitors', 14 | 'Responsive & Mobile-Friendly', 15 | ], 16 | mostPopular: false, 17 | }, 18 | ]; 19 | 20 | export default jobPrices; 21 | -------------------------------------------------------------------------------- /utils/pricing/store-subscription-prices.js: -------------------------------------------------------------------------------- 1 | const listingsubscriptionPrices = [ 2 | { 3 | name: 'Single Listing', 4 | id: 'single_store', 5 | price: '$16', 6 | priceRaw: '16', 7 | totalPrice: '16', 8 | frequencies: 'per store / monthly', 9 | billed: 'Billed every month', 10 | title: 'Single listing', 11 | description: 'Affordable & with all features.', 12 | features: [ 13 | 'Page Builder', 14 | 'Up to 8000 dayly visitors', 15 | 'Listing Directory', 16 | 'Geolocation Technology', 17 | 'Be Found Instantly By Consumers', 18 | 'Responsive & Mobile-Friendly', 19 | 'Showcase Listings and Products', 20 | 'Be Where Your Customers Are', 21 | 'Unlimited Availability', 22 | ], 23 | mostPopular: false, 24 | }, 25 | { 26 | name: 'Up to 3 listings', 27 | id: 'three_listings', 28 | price: '$14', 29 | priceRaw: '14', 30 | totalPrice: '42', 31 | frequencies: 'per store / monthly', 32 | billed: 'Billed every month', 33 | title: 'Most popular', 34 | description: 'Affordable & with all features.', 35 | features: [ 36 | 'Page Builder', 37 | 'Up to 8000 dayly visitors', 38 | 'Listing Directory', 39 | 'Geolocation Technology', 40 | 'Be Found Instantly By Consumers', 41 | 'Responsive & Mobile-Friendly', 42 | 'Showcase Listings and Products', 43 | 'Be Where Your Customers Are', 44 | 'Unlimited Availability', 45 | ], 46 | mostPopular: false, 47 | }, 48 | { 49 | name: 'From 4 listings', 50 | id: 'dynamic_listings_enterprise', 51 | price: '$12', 52 | priceRaw: '12', 53 | totalPrice: '48', 54 | frequencies: 'per store / monthly', 55 | billed: 'Billed every month', 56 | title: 'Enterprise', 57 | description: 'A plan that scales with your business.', 58 | features: [ 59 | 'Page Builder', 60 | 'Up to 8000 dayly visitors', 61 | 'Listing Directory', 62 | 'Geolocation Technology', 63 | 'Be Found Instantly By Consumers', 64 | 'Responsive & Mobile-Friendly', 65 | 'Showcase Listings and Products', 66 | 'Be Where Your Customers Are', 67 | 'Unlimited Availability', 68 | ], 69 | mostPopular: true, 70 | }, 71 | ]; 72 | 73 | export default listingsubscriptionPrices; 74 | --------------------------------------------------------------------------------