Compare commits

...

4 Commits

Author SHA1 Message Date
Drew Bednar 704590272b Not bad 2 weeks ago
Drew Bednar b63c43b3f6 Update Gemini rules 2 weeks ago
Drew Bednar 12aabbb375 Fix readme 2 weeks ago
Drew Bednar 5fae0a8f9b drew/test-it (#1)
Working example

Reviewed-on: #1
2 weeks ago

2
.gitignore vendored

@ -0,0 +1,2 @@
/playground/**
!playground/.gitkeep

@ -0,0 +1,4 @@
# Findings
## Gemini CLI
- Didn't understand that the goal was to create a compliant HTML webpages. It just copy and pasted components from ./components together.

@ -0,0 +1,508 @@
# Gemini CLI Configuration for Project Components
This document provides context and instructions for the Gemini CLI when working with this project.
---
## Project Context
This project utilizes a `components/` directory at its root, which contains a collection of Tailwind CSS-based HTML partials. These components are organized hierarchically by their intended purpose (e.g., `application_ui`, `marketing`).
**The files within the `components/` directory are intended as a library of examples and building blocks.** They should **never be directly modified or edited** by the Gemini CLI.
### Development Sandbox
- **All file modifications must be confined to the `./playground/src/` directory**. This is the designated area for all development and coding work. The Gemini CLI must not, under any circumstances, attempt to create, modify, or delete files outside of the `./playground/src/`.
- Gemini does not need to setup the `./playground` directory structure. The user will have done that before running Gemini.
- Only modifiy the `./playground/src/css/input.css` and `./playground/src/index.html`. All other files will be created and maintained by the user.
- The `./playground/src/index.html` has a valid structure for the project layout. When the user asks Gemini to make changes to it, Gemini should consider the prompt to be made in the context of changing the index.html body unless explicitly called out in the user's input prompt.
- The `./playground/src/main.css` will be generated by the user before viewing the changes made by the agent. No tailwindcss cli command needs to be run by Gemini.
Reference file structure for a new ./playground project.
```
./playground/
├── README.md
└── src
├── css
│   └── input.css
├── index.html
└── vendor
└── js
└── tailwindcss-elements.1.0.0.js
5 directories, 4 files
```
---
## Component Utilization Strategy
When generating or modifying HTML, the Gemini CLI should refer to the examples provided in the `components/` directory to understand patterns, styles, and structures for various UI elements.
**For any request involving a UI element that closely resembles a component in `components/`, the CLI should:**
1. **Identify relevant component(s):** Search the `components/` directory for the most appropriate and similar HTML partials.
2. **Adapt and integrate:** Extract the necessary HTML and Tailwind classes from the identified component(s) and adapt them to fit the specific requirements of the user's request. This involves:
* Copying and pasting relevant HTML structures.
* Applying or adjusting Tailwind classes as needed.
* Modifying content (text, images, links) to match the request.
* Combining elements from multiple components if necessary to fulfill a complex request.
3. **Generate new code:** The adapted code should be generated in the target file specified by the user's request, *not* within the `components/` directory.
---
## Component Directory Structure
The following is an overview of the `components/` directory structure for reference:
```
components/
├── application_ui
│   ├── application_shells
│   │   ├── multi_column_layouts
│   │   │   ├── constrained_three_column.html
│   │   │   ├── constrained_with_sticky_columns.html
│   │   │   ├── full_width_secondary_column_on_right.html
│   │   │   ├── full_width_three_column.html
│   │   │   ├── full_width_with_narrow_sidebar_and_header.html
│   │   │   └── full_width_with_narrow_sidebar.html
│   │   ├── sidebar_layouts
│   │   │   ├── brand_sidebar.html
│   │   │   ├── brand_sidebar_with_headers.html
│   │   │   ├── dark_sidebar.html
│   │   │   ├── dark_sidebar_with_header.html
│   │   │   ├── light_sidebar.html
│   │   │   ├── light_sidebar_with_constrained_content_area.html
│   │   │   ├── light_sidebar_with_header.html
│   │   │   └── light_sidebar_with_off_white_background.html
│   │   └── stacked_layouts
│   │   ├── branded_nav_with_compact_page_header.html
│   │   ├── branded_nav_with_white_page_header.html
│   │   ├── brand_nav_with_overlap.html
│   │   ├── dark_nav_with_compact_white_page_header.html
│   │   ├── dark_nav_with_overlap.html
│   │   ├── dark_nav_with_white_page_header.html
│   │   ├── light_nav_on_gray_background.html
│   │   ├── light_nav_with_bottom_border.html
│   │   └── two_row_navigation_with_overlap.html
│   ├── data_display
│   │   ├── calendars
│   │   │   ├── borderless_side_by_side.html
│   │   │   ├── bordlerless_stacked.html
│   │   │   ├── day_view.html
│   │   │   ├── double.html
│   │   │   ├── month_view.html
│   │   │   ├── small_with_meetings.html
│   │   │   ├── week_view.html
│   │   │   └── year_view.html
│   │   ├── description_lists
│   │   │   ├── left_aligned.html
│   │   │   ├── left_aligned_in_card.html
│   │   │   ├── left_aligned_on_dark.html
│   │   │   ├── left_aligned_striped.html
│   │   │   ├── left_aligned_with_inline_actions.html
│   │   │   ├── narrow_with_hidden_labels.html
│   │   │   └── two_column.html
│   │   └── stats
│   │   ├── simple.html
│   │   ├── simple_in_cards.html
│   │   ├── with_brand_icon.html
│   │   ├── with_shared_borders.html
│   │   └── with_trending.html
│   ├── elements
│   │   ├── avatars
│   │   │   ├── avatar_group_stacked_botton_to_top.html
│   │   │   ├── avatar_group_stacked_top_to_bottom.html
│   │   │   ├── circular_avatars.html
│   │   │   ├── circular_avatars_with_bottom_notification.html
│   │   │   ├── circular_avatars_with_placeholder_icon.html
│   │   │   ├── circular_avatars_with_placeholder_initials.html
│   │   │   ├── circular_avatars_with_top_notification.html
│   │   │   ├── rounded_avatars.html
│   │   │   ├── rounded_avatars_with_bottom_notification.html
│   │   │   ├── rounded_avatars_with_top_notification.html
│   │   │   └── with_text.html
│   │   ├── badges
│   │   │   ├── flat.html
│   │   │   ├── flat_pill.html
│   │   │   ├── flat_pill_with_dot.html
│   │   │   ├── flat_with_dot.html
│   │   │   ├── flat_with_remove_button.html
│   │   │   ├── pill_with_border_and_dot.html
│   │   │   ├── pill_with_border.html
│   │   │   ├── small_flat.html
│   │   │   ├── small_flat_pill.html
│   │   │   ├── small_flat_pill_with_dot.html
│   │   │   ├── small_flat_with_dot.html
│   │   │   ├── small_pill_with_border.html
│   │   │   ├── small_with_border.html
│   │   │   ├── with_border_and_dot.html
│   │   │   ├── with_border_and_dot_on_dark.html
│   │   │   ├── with_border_and_remove_button.html
│   │   │   ├── with_border.html
│   │   │   └── with_border_on_dark.html
│   │   ├── button_groups
│   │   │   ├── basic.html
│   │   │   ├── icon_only.html
│   │   │   ├── with_checkbox_and_dropdown.html
│   │   │   ├── with_dropdown.html
│   │   │   └── with_stat.html
│   │   ├── buttons
│   │   │   ├── buttons_with_leading_icon.html
│   │   │   ├── buttons_with_trailing_icon.html
│   │   │   ├── circular_buttons.html
│   │   │   ├── primary_buttons.html
│   │   │   ├── primary_buttons_on_dark.html
│   │   │   ├── rounded_primary_buttons.html
│   │   │   ├── rounded_secondary_buttons.html
│   │   │   ├── secondary_buttons.html
│   │   │   ├── secondary_buttons_on_dark.html
│   │   │   └── soft_buttons.html
│   │   └── dropdowns
│   │   ├── simple.html
│   │   ├── with_dividers.html
│   │   ├── with_icons.html
│   │   ├── with_minimal_menu_icon.html
│   │   └── with_simple_header.html
│   ├── feedback
│   │   ├── alerts
│   │   │   ├── with_accent_border.html
│   │   │   ├── with_actions.html
│   │   │   ├── with_description.html
│   │   │   ├── with_dismiss_button.html
│   │   │   ├── with_link_on_right.html
│   │   │   └── with_list.html
│   │   └── empty_states
│   │   ├── simple.html
│   │   ├── with_dashed_border.html
│   │   ├── with_recommendation_grids.html
│   │   ├── with_recommendations.html
│   │   ├── with_starting_points.html
│   │   └── with_templates.html
│   ├── forms
│   │   ├── action_panels
│   │   │   ├── simple.html
│   │   │   ├── simple_well.html
│   │   │   ├── with_button_at_top_right.html
│   │   │   ├── with_button_on_right.html
│   │   │   ├── with_input.html
│   │   │   ├── with_link.html
│   │   │   ├── with_toggle.html
│   │   │   └── with_well.html
│   │   ├── checkboxes
│   │   │   ├── list_with_checkbox_on_right.html
│   │   │   ├── list_with_description.html
│   │   │   ├── list_with_inline_description.html
│   │   │   └── simple_list_with_heading.html
│   │   ├── comboboxes
│   │   │   ├── simple.html
│   │   │   ├── with_image.html
│   │   │   ├── with_secondary_text.html
│   │   │   └── with_status_indicator.html
│   │   ├── form_layouts
│   │   │   ├── labels_on_left.html
│   │   │   ├── stacked.html
│   │   │   ├── stacked_on_dark.html
│   │   │   ├── two_column.html
│   │   │   └── two_column_with_cards.html
│   │   ├── input_groups
│   │   │   ├── inpout_with_disabled_state.html
│   │   │   ├── inputs_with_inset_labels_and_shared_borders.html
│   │   │   ├── inputs_with_shared_borders.html
│   │   │   ├── input_with_addon.html
│   │   │   ├── input_with_corner_hint.html
│   │   │   ├── input_with_gray_background_and_bottom_border.html
│   │   │   ├── input_with_hidden_label.html
│   │   │   ├── input_with_inline_addon.html
│   │   │   ├── input_with_inline_leading_addon_and_trailing_dropdown.html
│   │   │   ├── input_with_inline_leading_and_trailing_addons.html
│   │   │   ├── input_with_inline_leading_dropdown.html
│   │   │   ├── input_with_inset_label.html
│   │   │   ├── input_with_keyboard_shortcut.html
│   │   │   ├── input_with_label_and_help_text.html
│   │   │   ├── input_with_label.html
│   │   │   ├── input_with_leading_icon_and_trailing_button.html
│   │   │   ├── input_with_leading_icon.html
│   │   │   ├── input_with_overlapping_label.html
│   │   │   ├── input_with_pill_shape.html
│   │   │   ├── input_with_trailing_icon.html
│   │   │   └── input_with_validation_error.html
│   │   ├── radio_groups
│   │   │   ├── cards.html
│   │   │   ├── color_picker.html
│   │   │   ├── list_with_description.html
│   │   │   ├── list_with_descriptions_in_panel.html
│   │   │   ├── list_with_inline_description.html
│   │   │   ├── list_with_radio_on_right.html
│   │   │   ├── simple_inline_list.html
│   │   │   ├── simple_list.html
│   │   │   ├── simple_list_with_radio_on_right.html
│   │   │   ├── simple_table.html
│   │   │   ├── small_cards.html
│   │   │   └── stacked_cards.html
│   │   ├── select_menus
│   │   │   ├── branded_with_supported_text.html
│   │   │   ├── custom_with_avatar.html
│   │   │   ├── custom_with_check_on_left.html
│   │   │   ├── custom_with_status_indicator.html
│   │   │   ├── simple_custom.html
│   │   │   ├── simple_native.html
│   │   │   └── with_secondary_text.html
│   │   ├── signin_and_registration
│   │   │   ├── simple_card.html
│   │   │   ├── simple.html
│   │   │   ├── simple_no_labels.html
│   │   │   ├── simple_on_dark.html
│   │   │   └── split_screen.html
│   │   ├── textareas
│   │   │   ├── simple.html
│   │   │   ├── with_avatar_and_actions.html
│   │   │   ├── with_preview_button.html
│   │   │   ├── with_title_and_pill_actions.html
│   │   │   └── with_underline_and_actions.html
│   │   └── toggles
│   │   ├── short_toggle.html
│   │   ├── simple_toggle.html
│   │   ├── toggle_with_icon.html
│   │   ├── with_left_label_and_description.html
│   │   └── with_right_label.html
│   ├── headings
│   │   ├── card_headings
│   │   │   ├── simple.html
│   │   │   ├── with_action.html
│   │   │   ├── with_avatar_and_actions.html
│   │   │   ├── with_avatar_meta_and_dropdown.html
│   │   │   ├── with_description_and_action.html
│   │   │   └── with_description.html
│   │   ├── page_headings
│   │   │   ├── card_with_avatar_and_stats.html
│   │   │   ├── with_actions_and_breadcrumbs.html
│   │   │   ├── with_actions_and_breadcrumbs_on_dark.html
│   │   │   ├── with_actions.html
│   │   │   ├── with_actions_on_dark.html
│   │   │   ├── with_avatar_and_actions.html
│   │   │   ├── with_banner_image.html
│   │   │   ├── with_filters_and_action.html
│   │   │   ├── with_logo_meta_and_actions.html
│   │   │   ├── with_meta_actions_and_breadcrumbs.html
│   │   │   ├── with_meta_actions_and_breadcrumbs_on_dark.html
│   │   │   ├── with_meta_and_actions.html
│   │   │   └── with_meta_and_actions_on_dark.html
│   │   └── section_headings
│   ├── layout
│   │   ├── cards
│   │   │   ├── basic_card.html
│   │   │   ├── card_edge_to_edge_on_mobile.html
│   │   │   ├── card_with_footer.html
│   │   │   ├── card_with_gray_body.html
│   │   │   ├── card_with_gray_footer.html
│   │   │   ├── card_with_header.html
│   │   │   ├── card_with_heeader_and_footer.html
│   │   │   ├── well_edge_to_edge_on_mobile.html
│   │   │   ├── well.html
│   │   │   └── well_on_gray.html
│   │   ├── containers
│   │   │   ├── constrained_to_br_with_padded_content.html
│   │   │   ├── constrained_with_padded_content.html
│   │   │   ├── full_mobil_constrained_to_br_with_padded_content.html
│   │   │   ├── full_mobile_constrained_with_padded_content_above.html
│   │   │   └── narrow_constrained_with_padded_content.html
│   │   ├── dividers
│   │   │   ├── with_button.html
│   │   │   ├── with_icon.html
│   │   │   ├── with_label.html
│   │   │   ├── with_label_on_left.html
│   │   │   ├── with_title_and_button.html
│   │   │   ├── with_title.html
│   │   │   ├── with_title_on_left.html
│   │   │   └── with_toolbar.html
│   │   ├── list_containers
│   │   │   ├── card_with_dividers_full_width_on_mobile.html
│   │   │   ├── card_with_dividers.html
│   │   │   ├── flat_card_with_dividers.html
│   │   │   ├── separate_cards_full_width_on_mobile.html
│   │   │   ├── separate_cards.html
│   │   │   ├── simple_with_dividers_full_width_on_mobile.html
│   │   │   └── simple_with_dividers.html
│   │   └── media_objects
│   │   ├── aligned_to_bottom.html
│   │   ├── aligned_to_center.html
│   │   ├── basic.html
│   │   ├── basic_responsive.html
│   │   ├── media_on_right.html
│   │   ├── nested.html
│   │   ├── stretched_to_fit.html
│   │   └── wide_responsive.html
│   ├── lists
│   │   ├── feeds
│   │   │   ├── simple_with_icons.html
│   │   │   ├── with_comments.html
│   │   │   └── with_multiple_items_types.html
│   │   ├── grid_lists
│   │   │   ├── actions_with_shared_borders.html
│   │   │   ├── contact_cards.html
│   │   │   ├── contact_cards_with_small_portraits.html
│   │   │   ├── horizontal_link_cards.html
│   │   │   ├── images_with_details.html
│   │   │   ├── logo_cards_with_description_list.html
│   │   │   └── simple_cards.html
│   │   ├── stacked_lists
│   │   │   ├── full_width_with_constrained_content.html
│   │   │   ├── full_width_with_links.html
│   │   │   ├── in_card_with_links.html
│   │   │   ├── narrow.html
│   │   │   ├── narrow_with_actions.html
│   │   │   ├── narrow_with_badges_on_dark.html
│   │   │   ├── narrow_with_small_avatars.html
│   │   │   ├── narrow_with_small_avatars_on_dark.html
│   │   │   ├── narrow_with_sticky_headings.html
│   │   │   ├── narrow_with_truncated_content.html
│   │   │   ├── simple.html
│   │   │   ├── simple_on_dark.html
│   │   │   ├── two_columns_with_links.html
│   │   │   ├── with_badges_buttons_and_action_menu.html
│   │   │   ├── with_inline_links_and_actions_menu.html
│   │   │   ├── with_inline_links_and_avatar_group.html
│   │   │   └── with_links.html
│   │   └── tables
│   │   ├── full_width.html
│   │   ├── full_width_with_avatars_on_dark.html
│   │   ├── full_width_with_constrained_content.html
│   │   ├── simple.html
│   │   ├── simple_in_card.html
│   │   ├── simple_on_dark.html
│   │   ├── with_avatars_and_multi_line_content.html
│   │   ├── with_border.html
│   │   ├── with_checkboxes.html
│   │   ├── with_condensed_content.html
│   │   ├── with_grouped_rows.html
│   │   ├── with_hidden_columns_on_mobile.html
│   │   ├── with_hidden_headings.html
│   │   ├── with_sortable_headings.html
│   │   ├── with_stacked_columns_on_mobile.html
│   │   ├── with_sticky_header.html
│   │   ├── with_striped_rows.html
│   │   ├── with_summary_rows.html
│   │   ├── with_uppercase_headings.html
│   │   └── with_veritcal_lines.html
│   ├── navigation
│   │   ├── breadcrumbs
│   │   │   ├── contained.html
│   │   │   ├── full_width_bar.html
│   │   │   ├── simple_with_chevrons.html
│   │   │   └── simple_with_slashes.html
│   │   ├── command_palettes
│   │   │   ├── dark_with_icons.html
│   │   │   ├── semi_transparent_with_icons.html
│   │   │   ├── simple.html
│   │   │   ├── simple_with_padding.html
│   │   │   ├── with_footer.html
│   │   │   ├── with_groups.html
│   │   │   ├── with_icons.html
│   │   │   ├── with_images_and_descriptions.html
│   │   │   └── with_preview.html
│   │   ├── navbars
│   │   │   ├── dark_with_quick_action.html
│   │   │   ├── dark_with_search.html
│   │   │   ├── simple_dark.html
│   │   │   ├── simple_dark_with_menu_button_on_left.html
│   │   │   ├── simple.html
│   │   │   ├── simple_with_menu_button_on_left.html
│   │   │   ├── with_centered_search_and_secondary_links_dark.html
│   │   │   ├── with_centered_search_and_secondary_links.html
│   │   │   ├── with_quick_action.html
│   │   │   ├── with_search.html
│   │   │   └── with_search_in_column_layout.html
│   │   ├── pagination
│   │   │   ├── card_footer_with_page_buttons.html
│   │   │   ├── centered_page_numbers.html
│   │   │   └── simple_card_footer.html
│   │   ├── progress_bars
│   │   │   ├── bullets_and_text.html
│   │   │   ├── bullets.html
│   │   │   ├── circles.html
│   │   │   ├── circles_with_text.html
│   │   │   ├── panels.html
│   │   │   ├── panels_with_border.html
│   │   │   ├── progress_bar.html
│   │   │   └── simple.html
│   │   ├── sidebar_navigation
│   │   │   ├── brand.html
│   │   │   ├── dark.html
│   │   │   ├── light.html
│   │   │   ├── with_expandable_sections.html
│   │   │   └── with_secondary_navigation.html
│   │   ├── tabs
│   │   │   ├── bar_with_underline.html
│   │   │   ├── full_width_tabs_with_underline.html
│   │   │   ├── simple_on_dark.html
│   │   │   ├── tabs_in_pills.html
│   │   │   ├── tabs_in_pills_on_gray.html
│   │   │   ├── tabs_in_pills_with_brand_color.html
│   │   │   ├── tabs_with_underline_and_badges.html
│   │   │   ├── tabs_with_underline_and_icons.html
│   │   │   └── tabs_with_underline.html
│   │   └── vertical_navigation
│   │   ├── on_gray.html
│   │   ├── simple.html
│   │   ├── with_badges.html
│   │   ├── with_icons_and_badges.html
│   │   ├── with_icons.html
│   │   └── with_secondary_navigation.html
│   ├── overlays
│   │   ├── drawers
│   │   │   ├── contact_list_example.html
│   │   │   ├── create_project_form_example.html
│   │   │   ├── empty.html
│   │   │   ├── file_details_example.html
│   │   │   ├── user_profile_example.html
│   │   │   ├── wide_create_project_from_example.html
│   │   │   ├── wide_empty.html
│   │   │   ├── wide_horizontal_user_profile_example.html
│   │   │   ├── with_background_overly.html
│   │   │   ├── with_branded_header.html
│   │   │   ├── with_clone_button_on_outside.html
│   │   │   └── with_sticky_footer.html
│   │   ├── modal_dialogs
│   │   │   ├── centered_with_sinlge_action.html
│   │   │   ├── centered_with_wide_buttons.html
│   │   │   ├── simple_alert.html
│   │   │   ├── simple_alerts_with_left_aligned_buttons.html
│   │   │   ├── simple_with_dismiss_button.html
│   │   │   └── simple_with_gray_footer.html
│   │   └── notifications
│   │   ├── condensed.html
│   │   ├── simple.html
│   │   ├── with_actions_below.html
│   │   ├── with_avatar.html
│   │   ├── with_buttons_below.html
│   │   └── with_split_buttons.html
│   └── page_examples
│   ├── detail_screens
│   │   ├── index.html
│   │   ├── sidebar_on_dark.html
│   │   └── stacked.html
│   ├── home_screens
│   │   ├── sidebar_on_dark.html
│   │   └── stacked.html
│   └── settings_screens
│   ├── sidebar_on_dark.html
│   └── stacked.html
└── marketing
└── page_sections
└── hero_sections
├── simple_centered.html
├── simple_centered_with_background_image.html
├── split_with_bordered_screenshot.html
├── split_with_code_example.html
├── split_with_image.html
├── split_with_screenshot.html
├── with_angled_image_on_right.html
├── with_app_screen_shot.html
├── with_bordered_app_screenshot.html
├── with_image_tiles.html
├── with_offset_image.html
└── with_phone_mockup.html
65 directories, 382 files
```

@ -0,0 +1,12 @@
prepare: clean
cp -R ./template/* ./playground
clean:
cd ./playground && find . ! -name '.gitkeep' -delete
watch:
tailwindcss -i ./playground/src/css/input.css -o ./playground/src/css/main.css --watch
live:
live-server ./playground/src/

@ -0,0 +1,18 @@
# Tailwind-AI
An lab to run experiments using agentic coding tools and Tailwind Plus Components.
## Setup
The setup assumes you have `tailwindcss` installed globally on your machine.
## How to run an experiment
A makefile is present with the commands `prepare` and `clean`. Note these are destructive commands and will wipe the current contents of the `./playground` directory.
Each experiment you want to run should be done within the `./playground` directory. Simply `make prepare` the directory then run your agentic coding tool with that directory as the target for changes. Use `make watch` to compile tailwind css, and `make live` to view changes in the browser.
## Resources
- [Gemini-cli Cheatsheet](https://www.philschmid.de/gemini-cli-cheatsheet)
- [Tailwind 4 Features](https://tailwindcss.com/blog/tailwindcss-v4#css-first-configuration)

@ -1,12 +0,0 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Page Title</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" type="text/css" media="screen" href="main.css" />
<script src="main.js"></script>
</head>
<body></body>
</html>

@ -91,10 +91,7 @@
</div> </div>
</div> </div>
<el-dialog> <el-dialog>
<dialog <dialog id="mobile-menu" class="backdrop:bg-transparent lg:hidden">
id="mobile-menu"
class="backdrop:bg-transparent lg:hidden"
>
<div tabindex="0" class="fixed inset-0 focus:outline-none"> <div tabindex="0" class="fixed inset-0 focus:outline-none">
<el-dialog-panel <el-dialog-panel
class="fixed inset-y-0 left-0 z-50 w-full overflow-y-auto bg-white px-4 pb-6 sm:max-w-sm sm:px-6 sm:ring-1 sm:ring-gray-900/10" class="fixed inset-y-0 left-0 z-50 w-full overflow-y-auto bg-white px-4 pb-6 sm:max-w-sm sm:px-6 sm:ring-1 sm:ring-gray-900/10"
@ -125,9 +122,7 @@
</button> </button>
<div class="-ml-0.5"> <div class="-ml-0.5">
<a href="#" class="-m-1.5 block p-1.5"> <a href="#" class="-m-1.5 block p-1.5">
<span class="sr-only" <span class="sr-only">Your Company</span>
>Your Company</span
>
<img <img
src="https://tailwindcss.com/plus-assets/img/logos/mark.svg?color=indigo&shade=600" src="https://tailwindcss.com/plus-assets/img/logos/mark.svg?color=indigo&shade=600"
alt="" alt=""
@ -166,10 +161,7 @@
<main> <main>
<header class="relative isolate pt-16"> <header class="relative isolate pt-16">
<div <div aria-hidden="true" class="absolute inset-0 -z-10 overflow-hidden">
aria-hidden="true"
class="absolute inset-0 -z-10 overflow-hidden"
>
<div <div
class="absolute top-full left-16 -mt-16 transform-gpu opacity-50 blur-3xl xl:left-1/2 xl:-ml-80" class="absolute top-full left-16 -mt-16 transform-gpu opacity-50 blur-3xl xl:left-1/2 xl:-ml-80"
> >
@ -194,9 +186,7 @@
class="aspect-1154/678 w-288.5 bg-linear-to-br from-[#FF80B5] to-[#9089FC]" class="aspect-1154/678 w-288.5 bg-linear-to-br from-[#FF80B5] to-[#9089FC]"
></div> ></div>
</div> </div>
<div <div class="absolute inset-x-0 bottom-0 h-px bg-gray-900/5"></div>
class="absolute inset-x-0 bottom-0 h-px bg-gray-900/5"
></div>
</div> </div>
<div class="mx-auto max-w-7xl px-4 py-10 sm:px-6 lg:px-8"> <div class="mx-auto max-w-7xl px-4 py-10 sm:px-6 lg:px-8">
@ -214,9 +204,7 @@
Invoice Invoice
<span class="text-gray-700">#00011</span> <span class="text-gray-700">#00011</span>
</div> </div>
<div <div class="mt-1 text-base font-semibold text-gray-900">
class="mt-1 text-base font-semibold text-gray-900"
>
Tuple, Inc Tuple, Inc
</div> </div>
</h1> </h1>
@ -286,19 +274,11 @@
<!-- Invoice summary --> <!-- Invoice summary -->
<div class="lg:col-start-3 lg:row-end-1"> <div class="lg:col-start-3 lg:row-end-1">
<h2 class="sr-only">Summary</h2> <h2 class="sr-only">Summary</h2>
<div <div class="rounded-lg bg-gray-50 shadow-xs ring-1 ring-gray-900/5">
class="rounded-lg bg-gray-50 shadow-xs ring-1 ring-gray-900/5"
>
<dl class="flex flex-wrap"> <dl class="flex flex-wrap">
<div class="flex-auto pt-6 pl-6"> <div class="flex-auto pt-6 pl-6">
<dt <dt class="text-sm/6 font-semibold text-gray-900">Amount</dt>
class="text-sm/6 font-semibold text-gray-900" <dd class="mt-1 text-base font-semibold text-gray-900">
>
Amount
</dt>
<dd
class="mt-1 text-base font-semibold text-gray-900"
>
$10,560.00 $10,560.00
</dd> </dd>
</div> </div>
@ -329,15 +309,11 @@
/> />
</svg> </svg>
</dt> </dt>
<dd <dd class="text-sm/6 font-medium text-gray-900">
class="text-sm/6 font-medium text-gray-900"
>
Alex Curren Alex Curren
</dd> </dd>
</div> </div>
<div <div class="mt-4 flex w-full flex-none gap-x-4 px-6">
class="mt-4 flex w-full flex-none gap-x-4 px-6"
>
<dt class="flex-none"> <dt class="flex-none">
<span class="sr-only">Due date</span> <span class="sr-only">Due date</span>
<svg <svg
@ -358,14 +334,10 @@
</svg> </svg>
</dt> </dt>
<dd class="text-sm/6 text-gray-500"> <dd class="text-sm/6 text-gray-500">
<time datetime="2023-01-31" <time datetime="2023-01-31">January 31, 2023</time>
>January 31, 2023</time
>
</dd> </dd>
</div> </div>
<div <div class="mt-4 flex w-full flex-none gap-x-4 px-6">
class="mt-4 flex w-full flex-none gap-x-4 px-6"
>
<dt class="flex-none"> <dt class="flex-none">
<span class="sr-only">Status</span> <span class="sr-only">Status</span>
<svg <svg
@ -382,19 +354,12 @@
/> />
</svg> </svg>
</dt> </dt>
<dd class="text-sm/6 text-gray-500"> <dd class="text-sm/6 text-gray-500">Paid with MasterCard</dd>
Paid with MasterCard
</dd>
</div> </div>
</dl> </dl>
<div <div class="mt-6 border-t border-gray-900/5 px-6 py-6">
class="mt-6 border-t border-gray-900/5 px-6 py-6" <a href="#" class="text-sm/6 font-semibold text-gray-900"
> >Download receipt <span aria-hidden="true">&rarr;</span></a
<a
href="#"
class="text-sm/6 font-semibold text-gray-900"
>Download receipt
<span aria-hidden="true">&rarr;</span></a
> >
</div> </div>
</div> </div>
@ -404,39 +369,25 @@
<div <div
class="-mx-4 px-4 py-8 shadow-xs ring-1 ring-gray-900/5 sm:mx-0 sm:rounded-lg sm:px-8 sm:pb-14 lg:col-span-2 lg:row-span-2 lg:row-end-2 xl:px-16 xl:pt-16 xl:pb-20" class="-mx-4 px-4 py-8 shadow-xs ring-1 ring-gray-900/5 sm:mx-0 sm:rounded-lg sm:px-8 sm:pb-14 lg:col-span-2 lg:row-span-2 lg:row-end-2 xl:px-16 xl:pt-16 xl:pb-20"
> >
<h2 class="text-base font-semibold text-gray-900"> <h2 class="text-base font-semibold text-gray-900">Invoice</h2>
Invoice <dl class="mt-6 grid grid-cols-1 text-sm/6 sm:grid-cols-2">
</h2>
<dl
class="mt-6 grid grid-cols-1 text-sm/6 sm:grid-cols-2"
>
<div class="sm:pr-4"> <div class="sm:pr-4">
<dt class="inline text-gray-500">Issued on</dt> <dt class="inline text-gray-500">Issued on</dt>
<dd class="inline text-gray-700"> <dd class="inline text-gray-700">
<time datetime="2023-23-01" <time datetime="2023-23-01">January 23, 2023</time>
>January 23, 2023</time
>
</dd> </dd>
</div> </div>
<div class="mt-2 sm:mt-0 sm:pl-4"> <div class="mt-2 sm:mt-0 sm:pl-4">
<dt class="inline text-gray-500">Due on</dt> <dt class="inline text-gray-500">Due on</dt>
<dd class="inline text-gray-700"> <dd class="inline text-gray-700">
<time datetime="2023-31-01" <time datetime="2023-31-01">January 31, 2023</time>
>January 31, 2023</time
>
</dd> </dd>
</div> </div>
<div <div class="mt-6 border-t border-gray-900/5 pt-6 sm:pr-4">
class="mt-6 border-t border-gray-900/5 pt-6 sm:pr-4" <dt class="font-semibold text-gray-900">From</dt>
>
<dt class="font-semibold text-gray-900">
From
</dt>
<dd class="mt-2 text-gray-500"> <dd class="mt-2 text-gray-500">
<span class="font-medium text-gray-900" <span class="font-medium text-gray-900">Acme, Inc.</span
>Acme, Inc.</span ><br />7363 Cynthia Pass<br />Toronto, ON N3Y 4H8
><br />7363 Cynthia Pass<br />Toronto, ON
N3Y 4H8
</dd> </dd>
</div> </div>
<div <div
@ -444,32 +395,21 @@
> >
<dt class="font-semibold text-gray-900">To</dt> <dt class="font-semibold text-gray-900">To</dt>
<dd class="mt-2 text-gray-500"> <dd class="mt-2 text-gray-500">
<span class="font-medium text-gray-900" <span class="font-medium text-gray-900">Tuple, Inc</span
>Tuple, Inc</span ><br />886 Walter Street<br />New York, NY 12345
><br />886 Walter Street<br />New York, NY
12345
</dd> </dd>
</div> </div>
</dl> </dl>
<table <table class="mt-16 w-full text-left text-sm/6 whitespace-nowrap">
class="mt-16 w-full text-left text-sm/6 whitespace-nowrap"
>
<colgroup> <colgroup>
<col class="w-full" /> <col class="w-full" />
<col /> <col />
<col /> <col />
<col /> <col />
</colgroup> </colgroup>
<thead <thead class="border-b border-gray-200 text-gray-900">
class="border-b border-gray-200 text-gray-900"
>
<tr> <tr>
<th <th scope="col" class="px-0 py-3 font-semibold">Projects</th>
scope="col"
class="px-0 py-3 font-semibold"
>
Projects
</th>
<th <th
scope="col" scope="col"
class="hidden py-3 pr-0 pl-8 text-right font-semibold sm:table-cell" class="hidden py-3 pr-0 pl-8 text-right font-semibold sm:table-cell"
@ -493,9 +433,7 @@
<tbody> <tbody>
<tr class="border-b border-gray-100"> <tr class="border-b border-gray-100">
<td class="max-w-0 px-0 py-5 align-top"> <td class="max-w-0 px-0 py-5 align-top">
<div <div class="truncate font-medium text-gray-900">
class="truncate font-medium text-gray-900"
>
Logo redesign Logo redesign
</div> </div>
<div class="truncate text-gray-500"> <div class="truncate text-gray-500">
@ -520,14 +458,11 @@
</tr> </tr>
<tr class="border-b border-gray-100"> <tr class="border-b border-gray-100">
<td class="max-w-0 px-0 py-5 align-top"> <td class="max-w-0 px-0 py-5 align-top">
<div <div class="truncate font-medium text-gray-900">
class="truncate font-medium text-gray-900"
>
Website redesign Website redesign
</div> </div>
<div class="truncate text-gray-500"> <div class="truncate text-gray-500">
Design and program new company Design and program new company website.
website.
</div> </div>
</td> </td>
<td <td
@ -548,14 +483,12 @@
</tr> </tr>
<tr class="border-b border-gray-100"> <tr class="border-b border-gray-100">
<td class="max-w-0 px-0 py-5 align-top"> <td class="max-w-0 px-0 py-5 align-top">
<div <div class="truncate font-medium text-gray-900">
class="truncate font-medium text-gray-900"
>
Business cards Business cards
</div> </div>
<div class="truncate text-gray-500"> <div class="truncate text-gray-500">
Design and production of 3.5&quot; x Design and production of 3.5&quot; x 2.0&quot; business
2.0&quot; business cards. cards.
</div> </div>
</td> </td>
<td <td
@ -576,9 +509,7 @@
</tr> </tr>
<tr class="border-b border-gray-100"> <tr class="border-b border-gray-100">
<td class="max-w-0 px-0 py-5 align-top"> <td class="max-w-0 px-0 py-5 align-top">
<div <div class="truncate font-medium text-gray-900">
class="truncate font-medium text-gray-900"
>
T-shirt design T-shirt design
</div> </div>
<div class="truncate text-gray-500"> <div class="truncate text-gray-500">
@ -669,9 +600,7 @@
<div class="lg:col-start-3"> <div class="lg:col-start-3">
<!-- Activity feed --> <!-- Activity feed -->
<h2 class="text-sm/6 font-semibold text-gray-900"> <h2 class="text-sm/6 font-semibold text-gray-900">Activity</h2>
Activity
</h2>
<ul role="list" class="mt-6 space-y-6"> <ul role="list" class="mt-6 space-y-6">
<li class="relative flex gap-x-4"> <li class="relative flex gap-x-4">
<div <div
@ -686,12 +615,8 @@
class="size-1.5 rounded-full bg-gray-100 ring-1 ring-gray-300" class="size-1.5 rounded-full bg-gray-100 ring-1 ring-gray-300"
></div> ></div>
</div> </div>
<p <p class="flex-auto py-0.5 text-xs/5 text-gray-500">
class="flex-auto py-0.5 text-xs/5 text-gray-500" <span class="font-medium text-gray-900">Chelsea Hagon</span>
>
<span class="font-medium text-gray-900"
>Chelsea Hagon</span
>
created the invoice. created the invoice.
</p> </p>
<time <time
@ -713,12 +638,8 @@
class="size-1.5 rounded-full bg-gray-100 ring-1 ring-gray-300" class="size-1.5 rounded-full bg-gray-100 ring-1 ring-gray-300"
></div> ></div>
</div> </div>
<p <p class="flex-auto py-0.5 text-xs/5 text-gray-500">
class="flex-auto py-0.5 text-xs/5 text-gray-500" <span class="font-medium text-gray-900">Chelsea Hagon</span>
>
<span class="font-medium text-gray-900"
>Chelsea Hagon</span
>
edited the invoice. edited the invoice.
</p> </p>
<time <time
@ -740,12 +661,8 @@
class="size-1.5 rounded-full bg-gray-100 ring-1 ring-gray-300" class="size-1.5 rounded-full bg-gray-100 ring-1 ring-gray-300"
></div> ></div>
</div> </div>
<p <p class="flex-auto py-0.5 text-xs/5 text-gray-500">
class="flex-auto py-0.5 text-xs/5 text-gray-500" <span class="font-medium text-gray-900">Chelsea Hagon</span>
>
<span class="font-medium text-gray-900"
>Chelsea Hagon</span
>
sent the invoice. sent the invoice.
</p> </p>
<time <time
@ -769,11 +686,8 @@
class="flex-auto rounded-md p-3 ring-1 ring-gray-200 ring-inset" class="flex-auto rounded-md p-3 ring-1 ring-gray-200 ring-inset"
> >
<div class="flex justify-between gap-x-4"> <div class="flex justify-between gap-x-4">
<div <div class="py-0.5 text-xs/5 text-gray-500">
class="py-0.5 text-xs/5 text-gray-500" <span class="font-medium text-gray-900"
>
<span
class="font-medium text-gray-900"
>Chelsea Hagon</span >Chelsea Hagon</span
> >
commented commented
@ -785,8 +699,8 @@
> >
</div> </div>
<p class="text-sm/6 text-gray-500"> <p class="text-sm/6 text-gray-500">
Called client, they reassured me the Called client, they reassured me the invoice would be paid
invoice would be paid by the 25th. by the 25th.
</p> </p>
</div> </div>
</li> </li>
@ -803,12 +717,8 @@
class="size-1.5 rounded-full bg-gray-100 ring-1 ring-gray-300" class="size-1.5 rounded-full bg-gray-100 ring-1 ring-gray-300"
></div> ></div>
</div> </div>
<p <p class="flex-auto py-0.5 text-xs/5 text-gray-500">
class="flex-auto py-0.5 text-xs/5 text-gray-500" <span class="font-medium text-gray-900">Alex Curren</span>
>
<span class="font-medium text-gray-900"
>Alex Curren</span
>
viewed the invoice. viewed the invoice.
</p> </p>
<time <time
@ -818,9 +728,7 @@
> >
</li> </li>
<li class="relative flex gap-x-4"> <li class="relative flex gap-x-4">
<div <div class="absolute top-0 left-0 flex h-6 w-6 justify-center">
class="absolute top-0 left-0 flex h-6 w-6 justify-center"
>
<div class="w-px bg-gray-200"></div> <div class="w-px bg-gray-200"></div>
</div> </div>
<div <div
@ -840,12 +748,8 @@
/> />
</svg> </svg>
</div> </div>
<p <p class="flex-auto py-0.5 text-xs/5 text-gray-500">
class="flex-auto py-0.5 text-xs/5 text-gray-500" <span class="font-medium text-gray-900">Alex Curren</span>
>
<span class="font-medium text-gray-900"
>Alex Curren</span
>
paid the invoice. paid the invoice.
</p> </p>
<time <time
@ -867,9 +771,7 @@
<div <div
class="overflow-hidden rounded-lg pb-12 outline-1 -outline-offset-1 outline-gray-300 focus-within:outline-2 focus-within:-outline-offset-2 focus-within:outline-indigo-600" class="overflow-hidden rounded-lg pb-12 outline-1 -outline-offset-1 outline-gray-300 focus-within:outline-2 focus-within:-outline-offset-2 focus-within:outline-indigo-600"
> >
<label for="comment" class="sr-only" <label for="comment" class="sr-only">Add your comment</label>
>Add your comment</label
>
<textarea <textarea
id="comment" id="comment"
name="comment" name="comment"
@ -901,9 +803,7 @@
fill-rule="evenodd" fill-rule="evenodd"
/> />
</svg> </svg>
<span class="sr-only" <span class="sr-only">Attach a file</span>
>Attach a file</span
>
</button> </button>
</div> </div>
<div class="flex items-center"> <div class="flex items-center">
@ -929,9 +829,7 @@
fill-rule="evenodd" fill-rule="evenodd"
/> />
</svg> </svg>
<span class="sr-only" <span class="sr-only">Add your mood</span>
>Add your mood</span
>
</el-selectedcontent> </el-selectedcontent>
</button> </button>
@ -944,9 +842,7 @@
value="excited" value="excited"
class="relative block cursor-default bg-white px-3 py-2 select-none focus:bg-gray-100 focus:outline-hidden" class="relative block cursor-default bg-white px-3 py-2 select-none focus:bg-gray-100 focus:outline-hidden"
> >
<div <div class="flex items-center">
class="flex items-center"
>
<div <div
class="flex size-8 items-center justify-center rounded-full bg-red-500" class="flex size-8 items-center justify-center rounded-full bg-red-500"
> >
@ -974,9 +870,7 @@
value="loved" value="loved"
class="relative block cursor-default bg-white px-3 py-2 select-none focus:bg-gray-100 focus:outline-hidden" class="relative block cursor-default bg-white px-3 py-2 select-none focus:bg-gray-100 focus:outline-hidden"
> >
<div <div class="flex items-center">
class="flex items-center"
>
<div <div
class="flex size-8 items-center justify-center rounded-full bg-pink-400" class="flex size-8 items-center justify-center rounded-full bg-pink-400"
> >
@ -1002,9 +896,7 @@
value="happy" value="happy"
class="relative block cursor-default bg-white px-3 py-2 select-none focus:bg-gray-100 focus:outline-hidden" class="relative block cursor-default bg-white px-3 py-2 select-none focus:bg-gray-100 focus:outline-hidden"
> >
<div <div class="flex items-center">
class="flex items-center"
>
<div <div
class="flex size-8 items-center justify-center rounded-full bg-green-400" class="flex size-8 items-center justify-center rounded-full bg-green-400"
> >
@ -1032,9 +924,7 @@
value="sad" value="sad"
class="relative block cursor-default bg-white px-3 py-2 select-none focus:bg-gray-100 focus:outline-hidden" class="relative block cursor-default bg-white px-3 py-2 select-none focus:bg-gray-100 focus:outline-hidden"
> >
<div <div class="flex items-center">
class="flex items-center"
>
<div <div
class="flex size-8 items-center justify-center rounded-full bg-yellow-400" class="flex size-8 items-center justify-center rounded-full bg-yellow-400"
> >
@ -1062,9 +952,7 @@
value="thumbsy" value="thumbsy"
class="relative block cursor-default bg-white px-3 py-2 select-none focus:bg-gray-100 focus:outline-hidden" class="relative block cursor-default bg-white px-3 py-2 select-none focus:bg-gray-100 focus:outline-hidden"
> >
<div <div class="flex items-center">
class="flex items-center"
>
<div <div
class="flex size-8 items-center justify-center rounded-full bg-blue-500" class="flex size-8 items-center justify-center rounded-full bg-blue-500"
> >
@ -1090,9 +978,7 @@
value="" value=""
class="relative block cursor-default bg-white px-3 py-2 select-none focus:bg-gray-100 focus:outline-hidden" class="relative block cursor-default bg-white px-3 py-2 select-none focus:bg-gray-100 focus:outline-hidden"
> >
<div <div class="flex items-center">
class="flex items-center"
>
<div <div
class="flex size-8 items-center justify-center rounded-full bg-transparent in-[el-selectedcontent]:hidden" class="flex size-8 items-center justify-center rounded-full bg-transparent in-[el-selectedcontent]:hidden"
> >
@ -1124,16 +1010,11 @@
fill-rule="evenodd" fill-rule="evenodd"
/> />
</svg> </svg>
<span <span class="sr-only">Add your mood</span>
class="sr-only"
>Add your
mood</span
>
</span> </span>
<span <span
class="ml-3 block truncate font-medium in-[el-selectedcontent]:hidden" class="ml-3 block truncate font-medium in-[el-selectedcontent]:hidden"
>I feel >I feel nothing</span
nothing</span
> >
</div> </div>
</el-option> </el-option>

@ -0,0 +1,9 @@
# Tailwind Template
This is the basic setup necessary for configuring a tail page using the tailwind CSS 4.x version with the new Elements Javascript library for HTML based components.
## Running
```
tailwindcss -i src/css/input.css -o src/css/main.css --watch
```

@ -0,0 +1,5 @@
@import "tailwindcss";
@theme {
--font-sans: InterVariable, sans-serif;
}

@ -0,0 +1,19 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Tailwind AI</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="https://rsms.me/inter/inter.css" />
<link rel="stylesheet" type="text/css" media="screen" href="css/main.css" />
<script
src="vendor/js/tailwindcss-elements.1.0.0.js"
type="module"
></script>
</head>
<body>
<h1 class="text-4xl font-semibold text-center">Hello Tailwind</h1>
<!-- CONTENT GOES HERE -->
</body>
</html>

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save