loco_motion-rails 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +95 -67
  3. data/app/components/daisy/actions/button_component.rb +5 -2
  4. data/app/components/daisy/actions/dropdown_component.rb +1 -1
  5. data/app/components/daisy/actions/modal_component.rb +56 -14
  6. data/app/components/daisy/actions/swap_component.rb +3 -1
  7. data/app/components/daisy/actions/theme_controller_component.rb +1 -1
  8. data/app/components/daisy/data_display/accordion_component.rb +2 -1
  9. data/app/components/daisy/data_display/avatar_component.rb +3 -1
  10. data/app/components/daisy/data_display/badge_component.rb +16 -2
  11. data/app/components/daisy/data_display/card_component.rb +2 -1
  12. data/app/components/daisy/data_display/carousel_component.rb +1 -1
  13. data/app/components/daisy/data_display/chat_component.rb +5 -8
  14. data/app/components/daisy/data_display/collapse_component.rb +3 -1
  15. data/app/components/daisy/data_display/countdown_component.rb +2 -1
  16. data/app/components/daisy/data_display/diff_component.rb +1 -1
  17. data/app/components/daisy/data_display/kbd_component.rb +14 -1
  18. data/app/components/daisy/data_display/stat_component.rb +3 -1
  19. data/app/components/daisy/data_display/table_component.rb +1 -1
  20. data/app/components/daisy/data_display/timeline_component.rb +1 -1
  21. data/app/components/daisy/data_display/timeline_event_component.rb +1 -1
  22. data/app/components/daisy/feedback/alert_component.rb +1 -1
  23. data/app/components/daisy/feedback/loading_component.rb +11 -0
  24. data/app/components/daisy/feedback/progress_component.rb +20 -0
  25. data/app/components/daisy/feedback/radial_progress_component.rb +29 -0
  26. data/app/components/daisy/feedback/skeleton_component.rb +9 -0
  27. data/app/components/daisy/feedback/toast_component.rb +9 -0
  28. data/app/components/daisy/feedback/tooltip_component.rb +41 -0
  29. data/app/components/daisy/layout/artboard_component.rb +11 -0
  30. data/app/components/daisy/layout/divider_component.rb +32 -0
  31. data/app/components/daisy/layout/drawer_component.html.haml +9 -0
  32. data/app/components/daisy/layout/drawer_component.rb +110 -0
  33. data/app/components/daisy/layout/footer_component.rb +29 -0
  34. data/app/components/daisy/layout/hero_component.html.haml +5 -0
  35. data/app/components/daisy/layout/hero_component.rb +21 -0
  36. data/app/components/daisy/layout/indicator_component.rb +36 -0
  37. data/app/components/daisy/layout/join_component.rb +1 -1
  38. data/app/components/daisy/layout/stack_component.rb +9 -0
  39. data/app/components/daisy/navigation/bottom_nav_component.rb +2 -2
  40. data/app/components/daisy/navigation/breadcrumbs_component.rb +1 -1
  41. data/app/components/daisy/navigation/link_component.rb +38 -10
  42. data/app/components/daisy/navigation/menu_component.rb +45 -5
  43. data/app/components/daisy/navigation/navbar_component.rb +1 -1
  44. data/app/components/daisy/navigation/steps_component.rb +2 -2
  45. data/app/components/daisy/navigation/tabs_component.rb +1 -1
  46. data/app/components/hero/icon_component.rb +10 -1
  47. data/lib/daisy.rb +13 -3
  48. data/lib/hero.rb +7 -0
  49. data/lib/loco_motion/basic_component.rb +1 -1
  50. data/lib/loco_motion/concerns/tippable_component.rb +26 -0
  51. data/lib/loco_motion/configuration.rb +35 -0
  52. data/lib/loco_motion/helpers.rb +89 -0
  53. data/lib/loco_motion.rb +6 -36
  54. metadata +35 -6
  55. data/app/components/daisy/data_display/badge_component.html.haml +0 -2
  56. data/app/components/daisy/data_display/kbd_component.html.haml +0 -2
  57. data/app/components/daisy/navigation/link_component.html.haml +0 -4
  58. data/lib/daisy/helpers.rb +0 -61
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6cfe2882401b7bdfd08a844df9df854c145e89889bacc1e283102e4aad59d6d3
4
- data.tar.gz: df1222834a5606b7ffa9135bf90fb4d59e1fc699eea8d2bf52686e7f039d0c3f
3
+ metadata.gz: a020015ecb6d9ee0a705d25830f1951b00c60be6ee4046939b878d3a720bfbda
4
+ data.tar.gz: c9bc31844a168d4427423912be65f354387aba43f2c6d6711998cee947e2311d
5
5
  SHA512:
6
- metadata.gz: 3f1ef92f5d9315db44ac50cb7c1be90f0924391c29b247d36930ae1758572dee93edafc0ba9f28ed496a8d29cb583c438ec77b50a08d73807cd79ca77d67aa38
7
- data.tar.gz: 6ba44670ccdd89349da146dc31e15dbeff3e5753f6bf55fc3531b8bbcb4505d72dcbdb895b3abed018cf84ce8c4d44ce173d922d7ab4ea559ca9878863ec23b3
6
+ metadata.gz: f88796625ae5f6f7c7690563d0a687ed2d8932924d305cb12da0985fdcfdb00f629e6a25618afe5498ec6932af0e8c45b1cc3008a9f68d28940563f9f41f1fb0
7
+ data.tar.gz: 5f09dacd5dab790708428cb3e853e40fa59a5d20da58b4d11f9e99cca76bf940b1d3d311e55e8396b140acb2271eddb3df202175164ba59306acc041427d65cd
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  Crazy fast Rails development with modern tools and components leveraging
5
5
  ViewComponent, TailwindCSS, DaisyUI and more!
6
6
 
7
- ![image](./docs/assets/images/loco-chats.png)
7
+ <img src="//loco-motion-docs.profoundry.us/images/loco-chats.png" width="500px" style="border: 1px solid #bbb; padding: 2px; border-radius: 10px;">
8
8
 
9
9
  _**DISCLAIMER**_
10
10
 
@@ -13,10 +13,12 @@ In particular, new Daisy components are being added frequently and older
13
13
  components are being updated with new features meaning the APIs are very likely
14
14
  to change!
15
15
 
16
- We plan to publish the docs site to a publicly available URL soon, but until
17
- then, you can run the docs by cloning the repository and running `make all` (or
18
- `make all-quick` if you've already run `make all` or `make rebuild` previously)
19
- and visiting http://localhost:3000/ in your browser.
16
+ We expect to settle on and purchase a real domain name in the near future, but
17
+ for the time being, the latest documentation is available at the links below.
18
+
19
+ - [Docs / Demo (Latest Release)][1]
20
+ - [API Docs (Latest Release)][2]
21
+ - [Docs / Demo (Main Branch / Staging)][3]
20
22
 
21
23
  Please reach out by opening an
22
24
  [Issue](https://github.com/profoundry-us/loco_motion/issues) if you've found a
@@ -42,7 +44,6 @@ your solution is aligned with our goals.
42
44
  - [LocoMotion Components](#locomotion-components)
43
45
  - [Install](#install)
44
46
  - [Using Components](#using-components)
45
- - [Setting a Base Component Class](#setting-a-base-component-class)
46
47
  - [Developing](#developing)
47
48
  - [Tooling](#tooling)
48
49
  - [TODO / Next Steps](#todo--next-steps)
@@ -460,16 +461,23 @@ recommned Rspec with [factory_bot](https://github.com/thoughtbot/factory_bot)
460
461
  and [Shoulda Matchers](https://github.com/thoughtbot/shoulda-matchers).
461
462
 
462
463
  Finally, although both libraries offer some functionality for testing your user
463
- interface, we recommend utilizing [Cypress](https://www.cypress.io/) instead as
464
- it more closely mimics the real user experience in a browser and it allows you
465
- to see in real-time what is happening, including in-browser debugging!
464
+ interface, we recommend utilizing [Playwright](https://playwright.dev/) instead
465
+ as it more closely mimics the real user experience in a browser and it allows
466
+ you to see in real-time what is happening, including in-browser debugging!
467
+
468
+ Although the common setup is to write your specs in JavaScript or TypeScript,
469
+ you can actually write your End to End tests in Ruby / Rspec by utilizing the
470
+ [playwright-ruby-client](https://playwright-ruby-client.vercel.app/)!
471
+
472
+ We'll have some guides and examples for this coming soon!
466
473
 
467
474
  > [!NOTE]
468
- > One thing to note about Cypress, however, is that it is Javascript-based and
469
- > thus requires you to write tests in Javascript. If you are only famililar with
470
- > Ruby, you might want to stick with Rspec or Minitest when you first start your
471
- > project, and expand into using Cypress once you are comfortable learning a new
472
- > lanugage / framework.
475
+ > We used to recommend [Cypress](https://www.cypress.io) for End-to-End tests,
476
+ > but it's reliance on JavaScript and sometimes flakey tests caused us to search
477
+ > out a new solution / recommendation.
478
+ >
479
+ > We plan to have a writeup soon (an ADR specifically) on exactly why we made
480
+ > the switch.
473
481
 
474
482
  ## Authentication
475
483
 
@@ -670,9 +678,9 @@ a full set of UI components to help you build robust and full-featured apps.
670
678
 
671
679
  > [!CAUTION]
672
680
  > The LocoMotion components are being actively developed and are NOT ready for
673
- > production / public use (currently they are just some example components while
674
- > I get everything setup). I'm mainly adding the docs here so that I remember
675
- > how to set them up properly when they are ready for release.
681
+ > production / public use! We have finished basic versions of the DaisyUI
682
+ > Actions, DataDisplay, Navigation, and Feedback components, but we expect these
683
+ > to change (possibly quite a bit) as we begin to use them in projects.
676
684
 
677
685
  ### Install
678
686
 
@@ -685,7 +693,7 @@ gem "loco_motion", github: "profoundry-us/loco_motion", branch: "main", require:
685
693
 
686
694
  # or
687
695
 
688
- gem "loco_motion-rails", "0.0.6", require: "loco_motion"
696
+ gem "loco_motion-rails", "0.0.7", require: "loco_motion"
689
697
  ```
690
698
 
691
699
  Next add the following lines to the `contents` section of your
@@ -707,8 +715,8 @@ Next add the following lines to the `contents` section of your
707
715
 
708
716
  > [!WARNING]
709
717
  > Note that this will not output anything if it fails to find the right
710
- > directory, so your CSS may stop working if you update the gem and forget to
711
- > update this setting.
718
+ > directory, so your CSS may not compile properly if this command fails or finds
719
+ > the wrong gem or an older gem.
712
720
 
713
721
  Next, if you're using any of the components that require JavaScript (like the
714
722
  Countdown component), you'll need to add the library as a dependency and include
@@ -762,57 +770,35 @@ the following code and refresh your page.
762
770
  You should see a few buttons and the user info that we saved from OmniAuth
763
771
  represented as a Ruby hash! Any other content you have will be rendered below.
764
772
 
765
- ### Setting a Base Component Class
766
-
767
- Sometimes, you may want to override the way that LocoMotion handles things, or
768
- provide some functionality yourself in a sub-class of our components. Since you
769
- can't have a class inherit from two classes, we give you a way to override the
770
- base class that all of our components inherit from.
771
-
772
- This allows you to define a class that inherits from `LocoMotion::BaseComponent`
773
- and then adds any special methods or overrides to our default components.
774
-
775
- Create a file called `app/components/application_component.rb` with the following
776
- contents:
777
-
778
- ```ruby
779
- class ApplicationComponent < LocoMotion::BaseComponent
780
- end
781
- ```
782
-
783
- Then add the following to `config/initializers/loco_motion.rb`.
784
-
785
-
786
- ```ruby
787
- LocoMotion.configure do |config|
788
-
789
- # Override the base component class to inherit from our ApplicationComponent
790
- # so that we can add our own overrides / methods.
791
- Rails.application.config.after_initialize do
792
- config.base_component_class = ApplicationComponent
793
- end
794
-
795
- end
796
- ```
797
-
798
- > [!NOTE]
799
- > It doesn't have to inherit from `ApplicationComponent`, you can use any class
800
- > you want, so you could create a separate `CustomizedLocoMotionComponent` class
801
- > so that you don't have any conflicts with your `ApplicationComponent`.
802
-
803
773
  ## Developing
804
774
 
805
775
  To work on LocoMotion, first clone the repository and make sure you have Docker
806
776
  installed and running on your machine.
807
777
 
778
+ Next, create a `.env.local` file with the following contents, making sure to
779
+ replace the Unsplash keys with real ones (you can create your own account or ask
780
+ Topher for his keys).
781
+
782
+ ```.env
783
+ # .env.local
784
+ UNSPLASH_ACCESS_KEY="<< INSERT ACCESS KEY >>"
785
+ UNSPLASH_SECRET_KEY="<< INSERT SECRET KEY >>"
786
+ ```
787
+
808
788
  You should then be able to run `make rebuild` in the project directory and then
809
789
  `make all-quick` to start the services.
810
790
 
811
791
  > [!NOTE]
812
792
  >
813
- > We use `npm link` within the `docs/demo/bin/dev` script to enable quick
814
- > editing of the JavaScript library files so you don't have to publish a new
815
- > package during testing.
793
+ > We use `yarn link` in the `docs/demo/bin/setup` script to enable quick editing
794
+ > of the Javascript files so you don't have to publish new packages during
795
+ > testing.
796
+ >
797
+ > For the Ruby gem, we point directly to it via the `:path` option in the
798
+ > `Gemfile`. This means that we have a custom Heroku buildpack when we publish
799
+ > the demo site to move the files into the appropriate places.
800
+ >
801
+ > See https://github.com/profoundry-us/loco_motion-buildpack for more info.
816
802
 
817
803
  From here, you can access the demo site at http://localhost:3000 and the YARD
818
804
  docs at http://localhost:8808/docs/yard
@@ -854,6 +840,37 @@ TailwindCSS Intellisense working properly.
854
840
  ],
855
841
  ```
856
842
 
843
+ And because whitespace is important when developing inline components, you
844
+ should also add the following which prevents VSCode from adding a newline to the
845
+ bottom of your HAML files. This helps ensure that inline components don't have
846
+ trailing whitespace when using something like the `succeed` helper.
847
+
848
+ ```json
849
+ "[haml]": {
850
+ "editor.formatOnSave": false
851
+ }
852
+ ```
853
+
854
+ Alternatively, if your component is simple enough, moving the template inside
855
+ the `_component.rb` file's `call` method can also alleviate this problem.
856
+
857
+ So instead of
858
+
859
+ ```haml
860
+ - # This file has a newline at the bottom which can cause problems
861
+ = part(:component) do
862
+ = content
863
+
864
+ ```
865
+
866
+ you could do something like this:
867
+
868
+ ```ruby
869
+ def call
870
+ part(:component) { content }
871
+ end
872
+ ```
873
+
857
874
  ## TODO / Next Steps
858
875
 
859
876
  There is a LOT left to be done. We're not currently seeking assistance, but if
@@ -863,18 +880,29 @@ the GitHub Discussions feature and let us know!
863
880
  - [x] Basic versions of DaisyUI Actions
864
881
  - [x] Basic versions of DaisyUI Data Display
865
882
  - [x] Basic versions of DaisyUI Navigation
866
- - [ ] Basic versions of DaisyUI Feedback
883
+ - [x] Basic versions of DaisyUI Feedback
867
884
  - [ ] Basic versions of DaisyUI Data Input
868
885
  - [ ] Basic versions of DaisyUI Layout
869
886
  - [ ] Basic versions of DaisyUI Mockup
870
- - [ ] Get YARD docs rendering with (better) Markdown
887
+ - [ ] ~~Get YARD docs rendering with (better) Markdown~~ _**Working for now**_
871
888
  - [x] Extract relevant pieces into a yard-loco_motion plugin
872
- - [ ] Publish Gem
889
+ - [x] Publish Gem
873
890
  - [x] Publish NPM package
874
- - [ ] Update YARD plugin to add `@part`s
891
+ - [x] Update YARD plugin to add `@part`s
892
+ - [x] Update YARD plugin to add `@loco_example`s with language support
875
893
  - [x] Extract doc callouts into a doc component (and / or the Daisy component)
876
- - [ ] Choose and recommend / document a pagination gem
894
+ - [ ] Choose, recommend, and document a pagination gem
877
895
  - [ ] Discuss caching techniques / setup
896
+ - [x] Create / publish a staging version of the demo site ([Demo Staging][2])
897
+ - [ ] Create / publish a staging version of the docs site
878
898
  - [ ] Create / publish a production version of the demo site
879
899
  - [ ] Create / publish a production version of the docs site
880
- - [ ] Update demo site to allow for a different docs site using ENV var
900
+ - [x] Update demo site to allow for a different docs site using ENV var
901
+ - [x] Update README to suggest Playwright
902
+ - [ ] Build some have docs / guides / examples for using playwright-ruby-client
903
+ - [x] See if we can build a `Tippable` concern that relevant components can
904
+ include to automatically add the tooltip param and classes where possible
905
+
906
+ [1]: https://loco-motion.profoundry.us/
907
+ [2]: https://loco-motion-demo-staging.profoundry.us/
908
+ [3]: https://loco-motion-demo-staging.profoundry.us/api-docs
@@ -1,5 +1,7 @@
1
1
  # Here are the Button docs!
2
- class Daisy::Actions::ButtonComponent < LocoMotion.configuration.base_component_class
2
+ class Daisy::Actions::ButtonComponent < LocoMotion::BaseComponent
3
+ prepend LocoMotion::Concerns::TippableComponent
4
+
3
5
  set_component_name :btn
4
6
 
5
7
  def initialize(*args, **kws, &block)
@@ -20,7 +22,8 @@ class Daisy::Actions::ButtonComponent < LocoMotion.configuration.base_component_
20
22
  @right_icon_css = config_option(:right_icon_css, @icon_css)
21
23
  @right_icon_html = config_option(:right_icon_html, @icon_html)
22
24
 
23
- @simple_title = config_option(:title, @left_icon || @right_icon ? nil : "Submit")
25
+ default_title = @left_icon || @right_icon ? nil : "Submit"
26
+ @simple_title = config_option(:title, args[0] || default_title)
24
27
  end
25
28
 
26
29
  def before_render
@@ -1,5 +1,5 @@
1
1
  # Here are the Button docs!
2
- class Daisy::Actions::DropdownComponent < LocoMotion.configuration.base_component_class
2
+ class Daisy::Actions::DropdownComponent < LocoMotion::BaseComponent
3
3
 
4
4
  TitleComponent = LocoMotion::BasicComponent.build do
5
5
  def before_render
@@ -1,12 +1,49 @@
1
- # This is a Modal component.
2
- # @!parse class Daisy::Actions::ModalComponent < LocoMotion::BaseComponent; end
3
- class Daisy::Actions::ModalComponent < LocoMotion.configuration.base_component_class
1
+ #
2
+ # The Modal component renders a modal dialog that can be opened and closed. It
3
+ # includes a backdrop, a close icon, a title, and actions.
4
+ #
5
+ # @part dialog The main `<dialog>` container.
6
+ # @part box The container for the modal content.
7
+ # @part activator The container for the activator which opens the modal.
8
+ # @part close_icon_wrapper The container for the close icon.
9
+ # @part close_icon The default close icon.
10
+ # @part backdrop The backdrop that covers the rest of the screen.
11
+ # @part title Container for the default title for the modal.
12
+ # @part actions Container for all modal actions.
13
+ # @part start_actions Container for the left (start) aligned actions for the modal.
14
+ # @part end_actions The end actions for the modal.
15
+ #
16
+ # @slot activator The activator for the modal.
17
+ # @slot close_icon A custom close icon for the modal.
18
+ # @slot title A custom title for the modal.
19
+ # @slot start_actions Left (or start) aligned actions for the modal.
20
+ # @slot end_actions Right (or end) aligned actions for the modal.
21
+ #
22
+ # @loco_example Basic Usage
23
+ # = daisy_modal(title: "Simple Modal") do |modal|
24
+ # - modal.with_activator do
25
+ # - onclick = "document.getElementById('#{modal.dialog_id}').showModal()"
26
+ # = daisy_button(css: 'btn-primary', html: { onclick: onclick }) do
27
+ # Open Modal
28
+ #
29
+ # Here is some really long modal content that should go well past the
30
+ # spot where the close icon appears...
31
+ #
32
+ # - modal.with_end_actions(css: "flex flex-row items-center gap-2") do
33
+ # %form{ method: :dialog }
34
+ # = daisy_button do
35
+ # Cancel
36
+ # %form{ action: "", method: :get }
37
+ # %input{ type: "hidden", name: "submitted", value: "true" }
38
+ # = daisy_button(css: "btn-primary") do
39
+ # Submit
40
+ #
41
+ class Daisy::Actions::ModalComponent < LocoMotion::BaseComponent
4
42
  set_component_name :modal
5
43
 
6
44
  define_parts :dialog, :box, :actions,
7
45
  :activator, :close_icon_wrapper, :close_icon,
8
- :backdrop,
9
- :title, :start_actions, :end_actions
46
+ :backdrop, :title, :start_actions, :end_actions
10
47
 
11
48
  renders_one :activator
12
49
  renders_one :close_icon
@@ -29,24 +66,29 @@ class Daisy::Actions::ModalComponent < LocoMotion.configuration.base_component_c
29
66
  # Instantiate a new Modal component. All options are expected to be passed as
30
67
  # keyword arguments.
31
68
  #
32
- # @overload initialize(dialog_id: nil, closable: true, title: nil)
33
- # @param dialog_id [String] A specific ID you would like the dialog to use.
34
- # Auto-generates a random ID using `SecureRandom.uuid` if not provided.
69
+ # @param args [Array] Currently unused and passed through to the
70
+ # BaseComponent.
71
+ # @param kws [Hash] The keyword arguments for the component.
35
72
  #
36
- # @param closable [Boolean] Whether or not the modal should allow closing.
37
- #
38
- # @param title [String] A simple title that you would like the component to
39
- # render above the main content of the modal. Accessible through the
40
- # {simple_title} accessor.
73
+ # @option kws dialog_id [String] A specific ID you would like the dialog to
74
+ # use. Auto-generates a random ID using `SecureRandom.uuid` if not provided.
75
+ # @option kws closable [Boolean] Whether or not the modal should allow
76
+ # closing.
77
+ # @option kws title [String] A simple title that you would like the
78
+ # component to render above the main content of the modal (see
79
+ # {simple_title}).
41
80
  #
42
81
  def initialize(*args, **kws, &block)
43
82
  super
44
83
 
45
- @dialog_id ||= SecureRandom.uuid
84
+ @dialog_id = config_option(:dialog_id, SecureRandom.uuid)
46
85
  @closable = config_option(:closable, true)
47
86
  @simple_title = config_option(:title)
48
87
  end
49
88
 
89
+ #
90
+ # Sets up the component with various CSS classes and HTML attributes.
91
+ #
50
92
  def before_render
51
93
  setup_component
52
94
  setup_backdrop
@@ -1,4 +1,6 @@
1
- class Daisy::Actions::SwapComponent < LocoMotion.configuration.base_component_class
1
+ class Daisy::Actions::SwapComponent < LocoMotion::BaseComponent
2
+ prepend LocoMotion::Concerns::TippableComponent
3
+
2
4
  class SwapOn < LocoMotion::BasicComponent
3
5
  def before_render
4
6
  add_css(:component, "swap-on")
@@ -1,5 +1,5 @@
1
1
  # Renders a very basic radio-button theme controller.
2
- class Daisy::Actions::ThemeControllerComponent < LocoMotion.configuration.base_component_class
2
+ class Daisy::Actions::ThemeControllerComponent < LocoMotion::BaseComponent
3
3
  SOME_THEMES = ["light", "dark", "synthwave", "retro", "cyberpunk", "wireframe"].freeze
4
4
 
5
5
  def before_render
@@ -1,5 +1,6 @@
1
1
  # The Accordion component shows sections that can be expanded or collapsed.
2
- class Daisy::DataDisplay::AccordionComponent < LocoMotion.configuration.base_component_class
2
+ class Daisy::DataDisplay::AccordionComponent < LocoMotion::BaseComponent
3
+ prepend LocoMotion::Concerns::TippableComponent
3
4
 
4
5
  # Renders a single section of the accordion.
5
6
  class AccordionSectionComponent < LocoMotion::BasicComponent
@@ -23,7 +23,9 @@
23
23
  # = daisy_avatar icon: "user", icon_css: "text-yellow-400"
24
24
  # ```
25
25
  #
26
- class Daisy::DataDisplay::AvatarComponent < LocoMotion.configuration.base_component_class
26
+ class Daisy::DataDisplay::AvatarComponent < LocoMotion::BaseComponent
27
+ prepend LocoMotion::Concerns::TippableComponent
28
+
27
29
  set_component_name :avatar
28
30
 
29
31
  define_parts :wrapper, :img, :icon, :placeholder
@@ -3,7 +3,9 @@
3
3
  # background colors.
4
4
  #
5
5
  # @!parse class Daisy::DataDisplay::BadgeComponent < LocoMotion::BaseComponent; end
6
- class Daisy::DataDisplay::BadgeComponent < LocoMotion.configuration.base_component_class
6
+ class Daisy::DataDisplay::BadgeComponent < LocoMotion::BaseComponent
7
+ prepend LocoMotion::Concerns::TippableComponent
8
+
7
9
  set_component_name :badge
8
10
 
9
11
  #
@@ -12,16 +14,28 @@ class Daisy::DataDisplay::BadgeComponent < LocoMotion.configuration.base_compone
12
14
  def initialize(*args, **kws, &block)
13
15
  super
14
16
 
15
- set_tag_name(:component, :span)
17
+ @title = config_option(:title, args[0])
16
18
  end
17
19
 
18
20
  def before_render
19
21
  setup_component
20
22
  end
21
23
 
24
+ #
25
+ # Renders the badge component.
26
+ #
27
+ # Because this is an inline component which might be utlized alongside text,
28
+ # we utilize the `call` method instead of a template to ensure that no
29
+ # additional whitespace gets added to the output.
30
+ #
31
+ def call
32
+ part(:component) { @title || content }
33
+ end
34
+
22
35
  private
23
36
 
24
37
  def setup_component
38
+ set_tag_name(:component, :span)
25
39
  add_css(:component, "badge")
26
40
  end
27
41
  end
@@ -1,4 +1,5 @@
1
- class Daisy::DataDisplay::CardComponent < LocoMotion.configuration.base_component_class
1
+ class Daisy::DataDisplay::CardComponent < LocoMotion::BaseComponent
2
+ prepend LocoMotion::Concerns::TippableComponent
2
3
 
3
4
  Figure = LocoMotion::BasicComponent.build do
4
5
  define_part :image, tag_name: :img, css: "card-image"
@@ -1,4 +1,4 @@
1
- class Daisy::DataDisplay::CarouselComponent < LocoMotion.configuration.base_component_class
1
+ class Daisy::DataDisplay::CarouselComponent < LocoMotion::BaseComponent
2
2
  class ItemComponent < LocoMotion::BasicComponent
3
3
  def before_render
4
4
  add_css(:component, "carousel-item")
@@ -10,15 +10,12 @@
10
10
  # @slot footer [LocoMotion::BasicComponent] Renders a single footer.
11
11
  # @slot bubble [LocoMotion::BasicComponent] Renders one or more bubbles.
12
12
  #
13
- # ## Examples
13
+ # @loco_example Basic Usage
14
+ # = daisy_chat(css: "border rounded-lg", html: { title: message.short_desc }) do |chat|
15
+ # - chat.with_bubble do
16
+ # I can't believe it's not the weekend yet!
14
17
  #
15
- # ```language-haml
16
- # = daisy_chat(css: "border rounded-lg", html: { title: message.short_desc }) do |chat|
17
- # - chat.with_bubble do
18
- # I can't believe it's not the weekend yet!
19
- # ```
20
- #
21
- class Daisy::DataDisplay::ChatComponent < LocoMotion.configuration.base_component_class
18
+ class Daisy::DataDisplay::ChatComponent < LocoMotion::BaseComponent
22
19
  renders_one :avatar, Daisy::DataDisplay::AvatarComponent.build(css: "chat-image", icon_css: "size-6 text-base-100", wrapper_css: "w-10 rounded-full")
23
20
  renders_one :header, LocoMotion::BasicComponent.build(css: "chat-header [:where(&)]:text-neutral-500")
24
21
  renders_one :footer, LocoMotion::BasicComponent.build(css: "chat-footer [:where(&)]:text-neutral-500")
@@ -1,4 +1,6 @@
1
- class Daisy::DataDisplay::CollapseComponent < LocoMotion.configuration.base_component_class
1
+ class Daisy::DataDisplay::CollapseComponent < LocoMotion::BaseComponent
2
+ prepend LocoMotion::Concerns::TippableComponent
3
+
2
4
  define_parts :title, :wrapper
3
5
 
4
6
  renders_one :title
@@ -1,4 +1,5 @@
1
- class Daisy::DataDisplay::CountdownComponent < LocoMotion.configuration.base_component_class
1
+ class Daisy::DataDisplay::CountdownComponent < LocoMotion::BaseComponent
2
+ prepend LocoMotion::Concerns::TippableComponent
2
3
 
3
4
  define_parts :days, :hours, :minutes, :seconds
4
5
  define_modifiers :words, :letters
@@ -1,4 +1,4 @@
1
- class Daisy::DataDisplay::DiffComponent < LocoMotion.configuration.base_component_class
1
+ class Daisy::DataDisplay::DiffComponent < LocoMotion::BaseComponent
2
2
  class ItemComponent < LocoMotion::BasicComponent
3
3
  def set_index(index)
4
4
  @index = index
@@ -1,5 +1,7 @@
1
1
  # This is the Kbd (Keyboard) component.
2
- class Daisy::DataDisplay::KbdComponent < LocoMotion.configuration.base_component_class
2
+ class Daisy::DataDisplay::KbdComponent < LocoMotion::BaseComponent
3
+ prepend LocoMotion::Concerns::TippableComponent
4
+
3
5
  set_component_name :kbd
4
6
 
5
7
  # Create a new kbd component.
@@ -13,6 +15,17 @@ class Daisy::DataDisplay::KbdComponent < LocoMotion.configuration.base_component
13
15
  setup_component
14
16
  end
15
17
 
18
+ #
19
+ # Renders the kbd (Keyboard) component.
20
+ #
21
+ # Because this is an inline component which might be utlized alongside text,
22
+ # we utilize the `call` method instead of a template to ensure that no
23
+ # additional whitespace gets added to the output.
24
+ #
25
+ def call
26
+ part(:component) { content }
27
+ end
28
+
16
29
  private
17
30
 
18
31
  def setup_component
@@ -1,5 +1,7 @@
1
1
  # This is the stats component.
2
- class Daisy::DataDisplay::StatComponent < LocoMotion.configuration.base_component_class
2
+ class Daisy::DataDisplay::StatComponent < LocoMotion::BaseComponent
3
+ prepend LocoMotion::Concerns::TippableComponent
4
+
3
5
  set_component_name :stat
4
6
 
5
7
  define_parts :title, :value, :description, :figure
@@ -2,7 +2,7 @@
2
2
  # The Table component is used to render HTML tables with rows, columns, and headers.
3
3
  #
4
4
  # @!parse class Daisy::DataDisplay::TableComponent < LocoMotion::BaseComponent; end
5
- class Daisy::DataDisplay::TableComponent < LocoMotion.configuration.base_component_class
5
+ class Daisy::DataDisplay::TableComponent < LocoMotion::BaseComponent
6
6
 
7
7
  class HeadColumnComponent < LocoMotion::BasicComponent
8
8
  def before_render
@@ -1,4 +1,4 @@
1
- class Daisy::DataDisplay::TimelineComponent < LocoMotion.configuration.base_component_class
1
+ class Daisy::DataDisplay::TimelineComponent < LocoMotion::BaseComponent
2
2
  renders_many :events, Daisy::DataDisplay::TimelineEventComponent
3
3
 
4
4
  def before_render
@@ -1,4 +1,4 @@
1
- class Daisy::DataDisplay::TimelineEventComponent < LocoMotion.configuration.base_component_class
1
+ class Daisy::DataDisplay::TimelineEventComponent < LocoMotion::BaseComponent
2
2
  renders_one :start, LocoMotion::BasicComponent.build(css: "timeline-start")
3
3
  renders_one :middle, LocoMotion::BasicComponent.build(css: "timeline-middle")
4
4
  renders_one :end, LocoMotion::BasicComponent.build(css: "timeline-end")
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # The AlertComponent displays an important message to users.
3
3
  #
4
- class Daisy::Feedback::AlertComponent < LocoMotion.configuration.base_component_class
4
+ class Daisy::Feedback::AlertComponent < LocoMotion::BaseComponent
5
5
  define_parts :icon, :content_wrapper
6
6
 
7
7
  def initialize(*args, **kws, &block)
@@ -0,0 +1,11 @@
1
+ class Daisy::Feedback::LoadingComponent < LocoMotion::BaseComponent
2
+ prepend LocoMotion::Concerns::TippableComponent
3
+
4
+ def before_render
5
+ add_css(:component, "loading")
6
+ end
7
+
8
+ def call
9
+ part(:component)
10
+ end
11
+ end
@@ -0,0 +1,20 @@
1
+ class Daisy::Feedback::ProgressComponent < LocoMotion::BaseComponent
2
+
3
+ def initialize(*args, **kws, &block)
4
+ super
5
+
6
+ @value = config_option(:value, nil)
7
+ @max = config_option(:max, 100)
8
+ end
9
+
10
+ def before_render
11
+ set_tag_name(:component, :progress)
12
+ add_css(:component, "progress")
13
+ add_html(:component, { value: @value, max: @max }) if @value != nil
14
+ end
15
+
16
+ def call
17
+ part(:component)
18
+ end
19
+
20
+ end