phlex_kit 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +103 -10
  3. data/THIRD_PARTY_LICENSES +104 -0
  4. data/app/assets/stylesheets/phlex_kit/_tokens.css +72 -0
  5. data/app/assets/stylesheets/phlex_kit/phlex_kit.css +1 -1
  6. data/app/assets/stylesheets/phlex_kit/themes/claude.css +86 -0
  7. data/app/assets/stylesheets/phlex_kit/themes/neutral.css +95 -0
  8. data/app/assets/stylesheets/phlex_kit/themes/zinc.css +85 -0
  9. data/app/components/phlex_kit/accordion/accordion.css +13 -0
  10. data/app/components/phlex_kit/accordion/accordion.rb +11 -2
  11. data/app/{javascript/phlex_kit/controllers → components/phlex_kit/accordion}/accordion_controller.js +17 -1
  12. data/app/components/phlex_kit/accordion/accordion_icon.rb +1 -3
  13. data/app/components/phlex_kit/accordion/accordion_item.rb +5 -2
  14. data/app/components/phlex_kit/alert_dialog/alert_dialog.css +45 -4
  15. data/app/components/phlex_kit/alert_dialog/alert_dialog_action.rb +3 -2
  16. data/app/components/phlex_kit/alert_dialog/alert_dialog_content.rb +6 -2
  17. data/app/components/phlex_kit/alert_dialog/alert_dialog_media.rb +14 -0
  18. data/app/components/phlex_kit/attachment/attachment.css +102 -2
  19. data/app/components/phlex_kit/attachment/attachment.rb +18 -6
  20. data/app/components/phlex_kit/attachment/attachment_action.rb +1 -6
  21. data/app/components/phlex_kit/attachment/attachment_group.rb +21 -0
  22. data/app/components/phlex_kit/attachment/attachment_media.rb +13 -4
  23. data/app/components/phlex_kit/attachment/attachment_trigger.rb +22 -0
  24. data/app/components/phlex_kit/attachment/scroll_fade_controller.js +31 -0
  25. data/app/components/phlex_kit/breadcrumb/breadcrumb_ellipsis.rb +1 -5
  26. data/app/components/phlex_kit/breadcrumb/breadcrumb_separator.rb +1 -1
  27. data/app/components/phlex_kit/calendar/calendar_next.rb +1 -15
  28. data/app/components/phlex_kit/calendar/calendar_prev.rb +1 -15
  29. data/app/components/phlex_kit/card/card.css +50 -14
  30. data/app/components/phlex_kit/card/card.rb +6 -2
  31. data/app/components/phlex_kit/card/card_action.rb +14 -0
  32. data/app/components/phlex_kit/carousel/carousel_next.rb +1 -15
  33. data/app/components/phlex_kit/carousel/carousel_previous.rb +1 -15
  34. data/app/components/phlex_kit/codeblock/codeblock.css +1 -1
  35. data/app/components/phlex_kit/combobox/combobox_clear_button.rb +1 -15
  36. data/app/components/phlex_kit/combobox/combobox_input_trigger.rb +1 -12
  37. data/app/components/phlex_kit/combobox/combobox_item_indicator.rb +1 -15
  38. data/app/components/phlex_kit/combobox/combobox_search_input.rb +1 -14
  39. data/app/components/phlex_kit/combobox/combobox_trigger.rb +1 -14
  40. data/app/components/phlex_kit/command/command.css +2 -2
  41. data/app/components/phlex_kit/command/command_input.rb +1 -13
  42. data/app/components/phlex_kit/context_menu/context_menu_item.rb +1 -3
  43. data/app/components/phlex_kit/data_table/data_table_column_toggle.rb +1 -13
  44. data/app/components/phlex_kit/data_table/data_table_expand_toggle.rb +1 -12
  45. data/app/components/phlex_kit/data_table/data_table_sort_head.rb +2 -28
  46. data/app/components/phlex_kit/dialog/dialog.css +8 -2
  47. data/app/components/phlex_kit/dialog/dialog_content.rb +1 -3
  48. data/app/components/phlex_kit/drawer/drawer.css +1 -0
  49. data/app/components/phlex_kit/dropdown_menu/dropdown_menu.css +64 -0
  50. data/app/components/phlex_kit/dropdown_menu/dropdown_menu_checkbox_item.rb +31 -0
  51. data/app/components/phlex_kit/dropdown_menu/dropdown_menu_group.rb +11 -0
  52. data/app/components/phlex_kit/dropdown_menu/dropdown_menu_item.rb +5 -2
  53. data/app/components/phlex_kit/dropdown_menu/dropdown_menu_radio_group.rb +10 -0
  54. data/app/components/phlex_kit/dropdown_menu/dropdown_menu_radio_item.rb +31 -0
  55. data/app/components/phlex_kit/dropdown_menu/dropdown_menu_shortcut.rb +10 -0
  56. data/app/components/phlex_kit/dropdown_menu/dropdown_menu_sub.rb +11 -0
  57. data/app/components/phlex_kit/dropdown_menu/dropdown_menu_sub_content.rb +12 -0
  58. data/app/components/phlex_kit/dropdown_menu/dropdown_menu_sub_trigger.rb +18 -0
  59. data/app/components/phlex_kit/icon/icon.rb +51 -0
  60. data/app/components/phlex_kit/marker/marker.css +25 -0
  61. data/app/components/phlex_kit/marker/marker.rb +18 -0
  62. data/app/components/phlex_kit/marker/marker_content.rb +7 -0
  63. data/app/components/phlex_kit/marker/marker_icon.rb +7 -0
  64. data/app/components/phlex_kit/native_select/native_select_icon.rb +1 -10
  65. data/app/components/phlex_kit/navigation_menu/navigation_menu_trigger.rb +1 -5
  66. data/app/components/phlex_kit/pagination/pagination_ellipsis.rb +1 -5
  67. data/app/components/phlex_kit/select/select_item.rb +1 -11
  68. data/app/components/phlex_kit/select/select_trigger.rb +1 -14
  69. data/app/components/phlex_kit/sheet/sheet.css +1 -1
  70. data/app/components/phlex_kit/sheet/sheet_content.rb +1 -3
  71. data/app/components/phlex_kit/sidebar/sidebar.css +129 -11
  72. data/app/components/phlex_kit/sidebar/sidebar.rb +19 -6
  73. data/app/components/phlex_kit/sidebar/sidebar_group_action.rb +14 -0
  74. data/app/components/phlex_kit/sidebar/sidebar_group_content.rb +13 -0
  75. data/app/components/phlex_kit/sidebar/sidebar_group_label.rb +13 -0
  76. data/app/components/phlex_kit/sidebar/sidebar_input.rb +14 -0
  77. data/app/components/phlex_kit/sidebar/sidebar_menu_action.rb +13 -0
  78. data/app/components/phlex_kit/sidebar/sidebar_menu_badge.rb +13 -0
  79. data/app/components/phlex_kit/sidebar/sidebar_menu_skeleton.rb +19 -0
  80. data/app/components/phlex_kit/sidebar/sidebar_menu_sub.rb +13 -0
  81. data/app/components/phlex_kit/sidebar/sidebar_menu_sub_button.rb +18 -0
  82. data/app/components/phlex_kit/sidebar/sidebar_menu_sub_item.rb +13 -0
  83. data/app/components/phlex_kit/sidebar/sidebar_separator.rb +14 -0
  84. data/app/components/phlex_kit/spinner/spinner.rb +5 -10
  85. data/app/components/phlex_kit/toast/toast_close.rb +1 -15
  86. data/app/components/phlex_kit/toast/toast_icon.rb +12 -36
  87. data/app/components/phlex_kit/typography/heading.rb +1 -1
  88. data/app/components/phlex_kit/typography/typography.css +7 -3
  89. data/app/javascript/phlex_kit/controllers/index.js +2 -0
  90. data/config/importmap.rb +17 -3
  91. data/lib/generators/phlex_kit/component/component_generator.rb +42 -10
  92. data/lib/phlex_kit/configuration.rb +7 -0
  93. data/lib/phlex_kit/engine.rb +7 -2
  94. data/lib/phlex_kit/icons/lucide.rb +88 -0
  95. data/lib/phlex_kit/icons/phosphor.rb +88 -0
  96. data/lib/phlex_kit/icons/remix.rb +88 -0
  97. data/lib/phlex_kit/icons/tabler.rb +88 -0
  98. data/lib/phlex_kit/icons.rb +40 -0
  99. data/lib/phlex_kit/version.rb +1 -1
  100. data/lib/phlex_kit.rb +1 -0
  101. metadata +82 -45
  102. data/app/components/phlex_kit/stars/stars.css +0 -4
  103. data/app/components/phlex_kit/stars/stars.rb +0 -19
  104. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/alert_dialog}/alert_dialog_controller.js +0 -0
  105. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/avatar}/avatar_controller.js +0 -0
  106. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/calendar}/calendar_controller.js +0 -0
  107. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/calendar}/calendar_input_controller.js +0 -0
  108. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/carousel}/carousel_controller.js +0 -0
  109. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/chart}/chart_controller.js +0 -0
  110. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/clipboard}/clipboard_controller.js +0 -0
  111. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/collapsible}/collapsible_controller.js +0 -0
  112. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/combobox}/combobox_controller.js +0 -0
  113. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/command}/command_controller.js +0 -0
  114. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/command}/command_dialog_controller.js +0 -0
  115. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/context_menu}/context_menu_controller.js +0 -0
  116. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/data_table}/data_table_column_visibility_controller.js +0 -0
  117. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/data_table}/data_table_controller.js +0 -0
  118. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/data_table}/data_table_search_controller.js +0 -0
  119. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/dialog}/dialog_controller.js +0 -0
  120. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/dropdown_menu}/dropdown_menu_controller.js +0 -0
  121. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/form_field}/form_field_controller.js +0 -0
  122. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/hover_card}/hover_card_controller.js +0 -0
  123. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/input_otp}/input_otp_controller.js +0 -0
  124. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/masked_input}/masked_input_controller.js +0 -0
  125. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/menubar}/menubar_controller.js +0 -0
  126. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/message_scroller}/message_scroller_controller.js +0 -0
  127. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/popover}/popover_controller.js +0 -0
  128. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/resizable}/resizable_controller.js +0 -0
  129. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/select}/select_controller.js +0 -0
  130. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/select}/select_item_controller.js +0 -0
  131. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/sheet}/sheet_content_controller.js +0 -0
  132. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/sheet}/sheet_controller.js +0 -0
  133. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/slider}/slider_controller.js +0 -0
  134. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/tabs}/tabs_controller.js +0 -0
  135. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/theme_toggle}/theme_toggle_controller.js +0 -0
  136. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/toast}/toast_controller.js +0 -0
  137. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/toast}/toaster_controller.js +0 -0
  138. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/toggle}/toggle_controller.js +0 -0
  139. /data/app/{javascript/phlex_kit/controllers → components/phlex_kit/toggle_group}/toggle_group_controller.js +0 -0
@@ -0,0 +1,88 @@
1
+ # frozen_string_literal: true
2
+
3
+ # GENERATED by scripts/generate_icons.rb — do not hand-edit; re-run the
4
+ # generator to refresh or expand. Path data (c) Tabler contributors,
5
+ # MIT — see THIRD_PARTY_LICENSES. Source: github.com/tabler/tabler-icons.
6
+ module PhlexKit
7
+ module Icons
8
+ module Tabler
9
+ VIEW_BOX = "0 0 24 24"
10
+ MODE = :stroke
11
+ STROKE_WIDTH = 2
12
+ ICONS = {
13
+ chevron_down: [ [ :path, { d: "M6 9l6 6l6 -6" } ] ],
14
+ chevron_up: [ [ :path, { d: "M6 15l6 -6l6 6" } ] ],
15
+ chevron_left: [ [ :path, { d: "M15 6l-6 6l6 6" } ] ],
16
+ chevron_right: [ [ :path, { d: "M9 6l6 6l-6 6" } ] ],
17
+ chevrons_up_down: [ [ :path, { d: "M8 9l4 -4l4 4" } ], [ :path, { d: "M16 15l-4 4l-4 -4" } ] ],
18
+ check: [ [ :path, { d: "M5 12l5 5l10 -10" } ] ],
19
+ x: [ [ :path, { d: "M18 6l-12 12" } ], [ :path, { d: "M6 6l12 12" } ] ],
20
+ search: [ [ :path, { d: "M3 10a7 7 0 1 0 14 0a7 7 0 1 0 -14 0" } ], [ :path, { d: "M21 21l-6 -6" } ] ],
21
+ ellipsis: [ [ :path, { d: "M4 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" } ], [ :path, { d: "M11 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" } ], [ :path, { d: "M18 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" } ] ],
22
+ arrow_left: [ [ :path, { d: "M5 12l14 0" } ], [ :path, { d: "M5 12l6 6" } ], [ :path, { d: "M5 12l6 -6" } ] ],
23
+ arrow_right: [ [ :path, { d: "M5 12l14 0" } ], [ :path, { d: "M13 18l6 -6" } ], [ :path, { d: "M13 6l6 6" } ] ],
24
+ loader: [ [ :path, { d: "M12 3a9 9 0 1 0 9 9" } ] ],
25
+ circle_check: [ [ :path, { d: "M3 12a9 9 0 1 0 18 0a9 9 0 1 0 -18 0" } ], [ :path, { d: "M9 12l2 2l4 -4" } ] ],
26
+ circle_x: [ [ :path, { d: "M3 12a9 9 0 1 0 18 0a9 9 0 1 0 -18 0" } ], [ :path, { d: "M10 10l4 4m0 -4l-4 4" } ] ],
27
+ triangle_alert: [ [ :path, { d: "M12 9v4" } ], [ :path, { d: "M10.363 3.591l-8.106 13.534a1.914 1.914 0 0 0 1.636 2.871h16.214a1.914 1.914 0 0 0 1.636 -2.87l-8.106 -13.536a1.914 1.914 0 0 0 -3.274 0" } ], [ :path, { d: "M12 16h.01" } ] ],
28
+ info: [ [ :path, { d: "M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0" } ], [ :path, { d: "M12 9h.01" } ], [ :path, { d: "M11 12h1v4h1" } ] ],
29
+ calendar: [ [ :path, { d: "M4 7a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12" } ], [ :path, { d: "M16 3v4" } ], [ :path, { d: "M8 3v4" } ], [ :path, { d: "M4 11h16" } ], [ :path, { d: "M11 15h1" } ], [ :path, { d: "M12 15v3" } ] ],
30
+ user: [ [ :path, { d: "M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0" } ], [ :path, { d: "M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2" } ] ],
31
+ users: [ [ :path, { d: "M5 7a4 4 0 1 0 8 0a4 4 0 1 0 -8 0" } ], [ :path, { d: "M3 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2" } ], [ :path, { d: "M16 3.13a4 4 0 0 1 0 7.75" } ], [ :path, { d: "M21 21v-2a4 4 0 0 0 -3 -3.85" } ] ],
32
+ settings: [ [ :path, { d: "M10.325 4.317c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756 .426 1.756 2.924 0 3.35a1.724 1.724 0 0 0 -1.066 2.573c.94 1.543 -.826 3.31 -2.37 2.37a1.724 1.724 0 0 0 -2.572 1.065c-.426 1.756 -2.924 1.756 -3.35 0a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065" } ], [ :path, { d: "M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0" } ] ],
33
+ trash: [ [ :path, { d: "M4 7l16 0" } ], [ :path, { d: "M10 11l0 6" } ], [ :path, { d: "M14 11l0 6" } ], [ :path, { d: "M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12" } ], [ :path, { d: "M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3" } ] ],
34
+ plus: [ [ :path, { d: "M12 5l0 14" } ], [ :path, { d: "M5 12l14 0" } ] ],
35
+ minus: [ [ :path, { d: "M5 12l14 0" } ] ],
36
+ home: [ [ :path, { d: "M5 12l-2 0l9 -9l9 9l-2 0" } ], [ :path, { d: "M5 12v7a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-7" } ], [ :path, { d: "M9 21v-6a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v6" } ] ],
37
+ mail: [ [ :path, { d: "M3 7a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-10" } ], [ :path, { d: "M3 7l9 6l9 -6" } ] ],
38
+ bell: [ [ :path, { d: "M10 5a2 2 0 1 1 4 0a7 7 0 0 1 4 6v3a4 4 0 0 0 2 3h-16a4 4 0 0 0 2 -3v-3a7 7 0 0 1 4 -6" } ], [ :path, { d: "M9 17v1a3 3 0 0 0 6 0v-1" } ] ],
39
+ eye: [ [ :path, { d: "M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" } ], [ :path, { d: "M21 12c-2.4 4 -5.4 6 -9 6c-3.6 0 -6.6 -2 -9 -6c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6" } ] ],
40
+ eye_off: [ [ :path, { d: "M10.585 10.587a2 2 0 0 0 2.829 2.828" } ], [ :path, { d: "M16.681 16.673a8.717 8.717 0 0 1 -4.681 1.327c-3.6 0 -6.6 -2 -9 -6c1.272 -2.12 2.712 -3.678 4.32 -4.674m2.86 -1.146a9.055 9.055 0 0 1 1.82 -.18c3.6 0 6.6 2 9 6c-.666 1.11 -1.379 2.067 -2.138 2.87" } ], [ :path, { d: "M3 3l18 18" } ] ],
41
+ lock: [ [ :path, { d: "M5 13a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v6a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-6" } ], [ :path, { d: "M11 16a1 1 0 1 0 2 0a1 1 0 0 0 -2 0" } ], [ :path, { d: "M8 11v-4a4 4 0 1 1 8 0v4" } ] ],
42
+ unlock: [ [ :path, { d: "M5 13a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v6a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2l0 -6" } ], [ :path, { d: "M11 16a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" } ], [ :path, { d: "M8 11v-5a4 4 0 0 1 8 0" } ] ],
43
+ star: [ [ :path, { d: "M12 17.75l-6.172 3.245l1.179 -6.873l-5 -4.867l6.9 -1l3.086 -6.253l3.086 6.253l6.9 1l-5 4.867l1.179 6.873l-6.158 -3.245" } ] ],
44
+ heart: [ [ :path, { d: "M19.5 12.572l-7.5 7.428l-7.5 -7.428a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572" } ] ],
45
+ download: [ [ :path, { d: "M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2" } ], [ :path, { d: "M7 11l5 5l5 -5" } ], [ :path, { d: "M12 4l0 12" } ] ],
46
+ upload: [ [ :path, { d: "M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2" } ], [ :path, { d: "M7 9l5 -5l5 5" } ], [ :path, { d: "M12 4l0 12" } ] ],
47
+ external_link: [ [ :path, { d: "M12 6h-6a2 2 0 0 0 -2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-6" } ], [ :path, { d: "M11 13l9 -9" } ], [ :path, { d: "M15 4h5v5" } ] ],
48
+ copy: [ [ :path, { d: "M7 9.667a2.667 2.667 0 0 1 2.667 -2.667h8.666a2.667 2.667 0 0 1 2.667 2.667v8.666a2.667 2.667 0 0 1 -2.667 2.667h-8.666a2.667 2.667 0 0 1 -2.667 -2.667l0 -8.666" } ], [ :path, { d: "M4.012 16.737a2.005 2.005 0 0 1 -1.012 -1.737v-10c0 -1.1 .9 -2 2 -2h10c.75 0 1.158 .385 1.5 1" } ] ],
49
+ pencil: [ [ :path, { d: "M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" } ], [ :path, { d: "M13.5 6.5l4 4" } ] ],
50
+ filter: [ [ :path, { d: "M4 4h16v2.172a2 2 0 0 1 -.586 1.414l-4.414 4.414v7l-6 2v-8.5l-4.48 -4.928a2 2 0 0 1 -.52 -1.345v-2.227" } ] ],
51
+ menu: [ [ :path, { d: "M4 6l16 0" } ], [ :path, { d: "M4 12l16 0" } ], [ :path, { d: "M4 18l16 0" } ] ],
52
+ sun: [ [ :path, { d: "M8 12a4 4 0 1 0 8 0a4 4 0 1 0 -8 0" } ], [ :path, { d: "M3 12h1m8 -9v1m8 8h1m-9 8v1m-6.4 -15.4l.7 .7m12.1 -.7l-.7 .7m0 11.4l.7 .7m-12.1 -.7l-.7 .7" } ] ],
53
+ moon: [ [ :path, { d: "M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454l0 .008" } ] ],
54
+ file: [ [ :path, { d: "M14 3v4a1 1 0 0 0 1 1h4" } ], [ :path, { d: "M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2" } ] ],
55
+ folder: [ [ :path, { d: "M5 4h4l3 3h7a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-11a2 2 0 0 1 2 -2" } ] ],
56
+ image: [ [ :path, { d: "M15 8h.01" } ], [ :path, { d: "M3 6a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3v-12" } ], [ :path, { d: "M3 16l5 -5c.928 -.893 2.072 -.893 3 0l5 5" } ], [ :path, { d: "M14 14l1 -1c.928 -.893 2.072 -.893 3 0l3 3" } ] ],
57
+ link: [ [ :path, { d: "M9 15l6 -6" } ], [ :path, { d: "M11 6l.463 -.536a5 5 0 0 1 7.071 7.072l-.534 .464" } ], [ :path, { d: "M13 18l-.397 .534a5.068 5.068 0 0 1 -7.127 0a4.972 4.972 0 0 1 0 -7.071l.524 -.463" } ] ],
58
+ globe: [ [ :path, { d: "M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0" } ], [ :path, { d: "M3.6 9h16.8" } ], [ :path, { d: "M3.6 15h16.8" } ], [ :path, { d: "M11.5 3a17 17 0 0 0 0 18" } ], [ :path, { d: "M12.5 3a17 17 0 0 1 0 18" } ] ],
59
+ clock: [ [ :path, { d: "M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0" } ], [ :path, { d: "M12 7v5l3 3" } ] ],
60
+ refresh: [ [ :path, { d: "M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4" } ], [ :path, { d: "M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4" } ] ],
61
+ log_in: [ [ :path, { d: "M15 8v-2a2 2 0 0 0 -2 -2h-7a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h7a2 2 0 0 0 2 -2v-2" } ], [ :path, { d: "M21 12h-13l3 -3" } ], [ :path, { d: "M11 15l-3 -3" } ] ],
62
+ log_out: [ [ :path, { d: "M14 8v-2a2 2 0 0 0 -2 -2h-7a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h7a2 2 0 0 0 2 -2v-2" } ], [ :path, { d: "M9 12h12l-3 -3" } ], [ :path, { d: "M18 15l3 -3" } ] ],
63
+ send: [ [ :path, { d: "M10 14l11 -11" } ], [ :path, { d: "M21 3l-6.5 18a.55 .55 0 0 1 -1 0l-3.5 -7l-7 -3.5a.55 .55 0 0 1 0 -1l18 -6.5" } ] ],
64
+ share: [ [ :path, { d: "M3 12a3 3 0 1 0 6 0a3 3 0 1 0 -6 0" } ], [ :path, { d: "M15 6a3 3 0 1 0 6 0a3 3 0 1 0 -6 0" } ], [ :path, { d: "M15 18a3 3 0 1 0 6 0a3 3 0 1 0 -6 0" } ], [ :path, { d: "M8.7 10.7l6.6 -3.4" } ], [ :path, { d: "M8.7 13.3l6.6 3.4" } ] ],
65
+ bookmark: [ [ :path, { d: "M18 7v14l-6 -4l-6 4v-14a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4" } ] ],
66
+ tag: [ [ :path, { d: "M6.5 7.5a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" } ], [ :path, { d: "M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592 -5.592a2.41 2.41 0 0 0 0 -3.408l-7.71 -7.71a2 2 0 0 0 -1.414 -.586h-5.172a3 3 0 0 0 -3 3" } ] ],
67
+ shopping_cart: [ [ :path, { d: "M4 19a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" } ], [ :path, { d: "M15 19a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" } ], [ :path, { d: "M17 17h-11v-14h-2" } ], [ :path, { d: "M6 5l14 1l-1 7h-13" } ] ],
68
+ credit_card: [ [ :path, { d: "M3 8a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3l0 -8" } ], [ :path, { d: "M3 10l18 0" } ], [ :path, { d: "M7 15l.01 0" } ], [ :path, { d: "M11 15l2 0" } ] ],
69
+ chart: [ [ :path, { d: "M3 13a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v6a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -6" } ], [ :path, { d: "M15 9a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v10a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -10" } ], [ :path, { d: "M9 5a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v14a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -14" } ], [ :path, { d: "M4 20h14" } ] ],
70
+ database: [ [ :path, { d: "M4 6a8 3 0 1 0 16 0a8 3 0 1 0 -16 0" } ], [ :path, { d: "M4 6v6a8 3 0 0 0 16 0v-6" } ], [ :path, { d: "M4 12v6a8 3 0 0 0 16 0v-6" } ] ],
71
+ terminal: [ [ :path, { d: "M5 7l5 5l-5 5" } ], [ :path, { d: "M12 19l7 0" } ] ],
72
+ code: [ [ :path, { d: "M7 8l-4 4l4 4" } ], [ :path, { d: "M17 8l4 4l-4 4" } ], [ :path, { d: "M14 4l-4 16" } ] ],
73
+ cloud: [ [ :path, { d: "M6.657 18c-2.572 0 -4.657 -2.007 -4.657 -4.483c0 -2.475 2.085 -4.482 4.657 -4.482c.393 -1.762 1.794 -3.2 3.675 -3.773c1.88 -.572 3.956 -.193 5.444 1c1.488 1.19 2.162 3.007 1.77 4.769h.99c1.913 0 3.464 1.56 3.464 3.486c0 1.927 -1.551 3.487 -3.465 3.487h-11.878" } ] ],
74
+ shield: [ [ :path, { d: "M12 3a12 12 0 0 0 8.5 3a12 12 0 0 1 -8.5 15a12 12 0 0 1 -8.5 -15a12 12 0 0 0 8.5 -3" } ] ],
75
+ circle_alert: [ [ :path, { d: "M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0" } ], [ :path, { d: "M12 8v4" } ], [ :path, { d: "M12 16h.01" } ] ],
76
+ thumbs_up: [ [ :path, { d: "M7 11v8a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1v-7a1 1 0 0 1 1 -1h3a4 4 0 0 0 4 -4v-1a2 2 0 0 1 4 0v5h3a2 2 0 0 1 2 2l-1 5a2 3 0 0 1 -2 2h-7a3 3 0 0 1 -3 -3" } ] ],
77
+ message: [ [ :path, { d: "M8 9h8" } ], [ :path, { d: "M8 13h6" } ], [ :path, { d: "M18 4a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-5l-5 3v-3h-2a3 3 0 0 1 -3 -3v-8a3 3 0 0 1 3 -3h12" } ] ],
78
+ phone: [ [ :path, { d: "M5 4h4l2 5l-2.5 1.5a11 11 0 0 0 5 5l1.5 -2.5l5 2v4a2 2 0 0 1 -2 2a16 16 0 0 1 -15 -15a2 2 0 0 1 2 -2" } ] ],
79
+ map_pin: [ [ :path, { d: "M9 11a3 3 0 1 0 6 0a3 3 0 0 0 -6 0" } ], [ :path, { d: "M17.657 16.657l-4.243 4.243a2 2 0 0 1 -2.827 0l-4.244 -4.243a8 8 0 1 1 11.314 0" } ] ],
80
+ camera: [ [ :path, { d: "M5 7h1a2 2 0 0 0 2 -2a1 1 0 0 1 1 -1h6a1 1 0 0 1 1 1a2 2 0 0 0 2 2h1a2 2 0 0 1 2 2v9a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-9a2 2 0 0 1 2 -2" } ], [ :path, { d: "M9 13a3 3 0 1 0 6 0a3 3 0 0 0 -6 0" } ] ],
81
+ mic: [ [ :path, { d: "M9 5a3 3 0 0 1 3 -3a3 3 0 0 1 3 3v5a3 3 0 0 1 -3 3a3 3 0 0 1 -3 -3l0 -5" } ], [ :path, { d: "M5 10a7 7 0 0 0 14 0" } ], [ :path, { d: "M8 21l8 0" } ], [ :path, { d: "M12 17l0 4" } ] ],
82
+ play: [ [ :path, { d: "M7 4v16l13 -8l-13 -8" } ] ],
83
+ pause: [ [ :path, { d: "M6 6a1 1 0 0 1 1 -1h2a1 1 0 0 1 1 1v12a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1l0 -12" } ], [ :path, { d: "M14 6a1 1 0 0 1 1 -1h2a1 1 0 0 1 1 1v12a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1l0 -12" } ] ],
84
+ grip: [ [ :path, { d: "M8 5a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" } ], [ :path, { d: "M8 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" } ], [ :path, { d: "M8 19a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" } ], [ :path, { d: "M14 5a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" } ], [ :path, { d: "M14 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" } ], [ :path, { d: "M14 19a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" } ] ],
85
+ }.freeze
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "phlex_kit/icons/lucide"
4
+ require "phlex_kit/icons/tabler"
5
+ require "phlex_kit/icons/phosphor"
6
+ require "phlex_kit/icons/remix"
7
+
8
+ module PhlexKit
9
+ # Registry over the vendored icon data modules. Components (and hosts, via
10
+ # PhlexKit::Icon) look glyphs up by canonical semantic name — the per-library
11
+ # vocabulary mapping (Phosphor "caret-down", Remix "arrow-down-s-line", …)
12
+ # was resolved at generation time by scripts/generate_icons.rb.
13
+ #
14
+ # HugeIcons is deliberately absent: its free set's terms forbid editing and
15
+ # redistribution of the artwork, so it cannot ship inside this MIT gem.
16
+ module Icons
17
+ MODULES = {
18
+ lucide: Lucide,
19
+ tabler: Tabler,
20
+ phosphor: Phosphor,
21
+ remix: Remix
22
+ }.freeze
23
+
24
+ # => { elements:, view_box:, mode: :stroke|:fill, stroke_width: }
25
+ # Fails loud (KeyError) on an unknown library or glyph.
26
+ def self.fetch(name, library: PhlexKit.config.icon_library)
27
+ mod = MODULES.fetch(library.to_sym) do
28
+ raise KeyError, "Unknown icon library #{library.inspect} — available: #{MODULES.keys.join(', ')}"
29
+ end
30
+ elements = mod::ICONS.fetch(name.to_sym) do
31
+ raise KeyError, "Unknown icon #{name.inspect} in #{library} — available: #{mod::ICONS.keys.join(', ')}"
32
+ end
33
+ { elements: elements, view_box: mod::VIEW_BOX, mode: mod::MODE, stroke_width: mod::STROKE_WIDTH }
34
+ end
35
+
36
+ def self.names
37
+ MODULES.fetch(:lucide)::ICONS.keys
38
+ end
39
+ end
40
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PhlexKit
4
- VERSION = "0.2.1"
4
+ VERSION = "0.3.0"
5
5
  end
data/lib/phlex_kit.rb CHANGED
@@ -8,6 +8,7 @@ require "phlex-rails"
8
8
 
9
9
  require "phlex_kit/version"
10
10
  require "phlex_kit/configuration"
11
+ require "phlex_kit/icons"
11
12
  require "phlex_kit/base_component"
12
13
 
13
14
  # The Rails engine (asset path, Zeitwerk collapse, Propshaft guard, JS) is only
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phlex_kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Kennedy
@@ -105,10 +105,10 @@ dependencies:
105
105
  - - ">="
106
106
  - !ruby/object:Gem::Version
107
107
  version: '0'
108
- description: PhlexKit ports ruby_ui's components to Phlex, replacing Tailwind with
109
- co-located vanilla CSS per component plus a global :root design-token theme. phlex-reactive
110
- is an optional, per-component integration — never a required dependency. Assets
111
- ship precompiled-static, so no host build step.
108
+ description: PhlexKit brings the shadcn/ui component catalog to Phlex and Rails, replacing
109
+ Tailwind with co-located vanilla CSS per component plus a global :root design-token
110
+ theme. phlex-reactive is an optional, per-component integration — never a required
111
+ dependency. Assets ship precompiled-static, so no host build step.
112
112
  email:
113
113
  - m.kennedy@aypex.io
114
114
  executables: []
@@ -117,11 +117,16 @@ extra_rdoc_files: []
117
117
  files:
118
118
  - MIT-LICENSE
119
119
  - README.md
120
+ - THIRD_PARTY_LICENSES
120
121
  - app/assets/stylesheets/phlex_kit/_tokens.css
121
122
  - app/assets/stylesheets/phlex_kit/phlex_kit.css
123
+ - app/assets/stylesheets/phlex_kit/themes/claude.css
124
+ - app/assets/stylesheets/phlex_kit/themes/neutral.css
125
+ - app/assets/stylesheets/phlex_kit/themes/zinc.css
122
126
  - app/components/phlex_kit/accordion/accordion.css
123
127
  - app/components/phlex_kit/accordion/accordion.rb
124
128
  - app/components/phlex_kit/accordion/accordion_content.rb
129
+ - app/components/phlex_kit/accordion/accordion_controller.js
125
130
  - app/components/phlex_kit/accordion/accordion_default_content.rb
126
131
  - app/components/phlex_kit/accordion/accordion_default_trigger.rb
127
132
  - app/components/phlex_kit/accordion/accordion_icon.rb
@@ -136,9 +141,11 @@ files:
136
141
  - app/components/phlex_kit/alert_dialog/alert_dialog_action.rb
137
142
  - app/components/phlex_kit/alert_dialog/alert_dialog_cancel.rb
138
143
  - app/components/phlex_kit/alert_dialog/alert_dialog_content.rb
144
+ - app/components/phlex_kit/alert_dialog/alert_dialog_controller.js
139
145
  - app/components/phlex_kit/alert_dialog/alert_dialog_description.rb
140
146
  - app/components/phlex_kit/alert_dialog/alert_dialog_footer.rb
141
147
  - app/components/phlex_kit/alert_dialog/alert_dialog_header.rb
148
+ - app/components/phlex_kit/alert_dialog/alert_dialog_media.rb
142
149
  - app/components/phlex_kit/alert_dialog/alert_dialog_title.rb
143
150
  - app/components/phlex_kit/alert_dialog/alert_dialog_trigger.rb
144
151
  - app/components/phlex_kit/aspect_ratio/aspect_ratio.css
@@ -149,10 +156,14 @@ files:
149
156
  - app/components/phlex_kit/attachment/attachment_actions.rb
150
157
  - app/components/phlex_kit/attachment/attachment_content.rb
151
158
  - app/components/phlex_kit/attachment/attachment_description.rb
159
+ - app/components/phlex_kit/attachment/attachment_group.rb
152
160
  - app/components/phlex_kit/attachment/attachment_media.rb
153
161
  - app/components/phlex_kit/attachment/attachment_title.rb
162
+ - app/components/phlex_kit/attachment/attachment_trigger.rb
163
+ - app/components/phlex_kit/attachment/scroll_fade_controller.js
154
164
  - app/components/phlex_kit/avatar/avatar.css
155
165
  - app/components/phlex_kit/avatar/avatar.rb
166
+ - app/components/phlex_kit/avatar/avatar_controller.js
156
167
  - app/components/phlex_kit/avatar/avatar_fallback.rb
157
168
  - app/components/phlex_kit/avatar/avatar_group.rb
158
169
  - app/components/phlex_kit/avatar/avatar_image.rb
@@ -178,14 +189,17 @@ files:
178
189
  - app/components/phlex_kit/calendar/calendar.css
179
190
  - app/components/phlex_kit/calendar/calendar.rb
180
191
  - app/components/phlex_kit/calendar/calendar_body.rb
192
+ - app/components/phlex_kit/calendar/calendar_controller.js
181
193
  - app/components/phlex_kit/calendar/calendar_days.rb
182
194
  - app/components/phlex_kit/calendar/calendar_header.rb
195
+ - app/components/phlex_kit/calendar/calendar_input_controller.js
183
196
  - app/components/phlex_kit/calendar/calendar_next.rb
184
197
  - app/components/phlex_kit/calendar/calendar_prev.rb
185
198
  - app/components/phlex_kit/calendar/calendar_title.rb
186
199
  - app/components/phlex_kit/calendar/calendar_weekdays.rb
187
200
  - app/components/phlex_kit/card/card.css
188
201
  - app/components/phlex_kit/card/card.rb
202
+ - app/components/phlex_kit/card/card_action.rb
189
203
  - app/components/phlex_kit/card/card_content.rb
190
204
  - app/components/phlex_kit/card/card_description.rb
191
205
  - app/components/phlex_kit/card/card_footer.rb
@@ -194,15 +208,18 @@ files:
194
208
  - app/components/phlex_kit/carousel/carousel.css
195
209
  - app/components/phlex_kit/carousel/carousel.rb
196
210
  - app/components/phlex_kit/carousel/carousel_content.rb
211
+ - app/components/phlex_kit/carousel/carousel_controller.js
197
212
  - app/components/phlex_kit/carousel/carousel_item.rb
198
213
  - app/components/phlex_kit/carousel/carousel_next.rb
199
214
  - app/components/phlex_kit/carousel/carousel_previous.rb
200
215
  - app/components/phlex_kit/chart/chart.css
201
216
  - app/components/phlex_kit/chart/chart.rb
217
+ - app/components/phlex_kit/chart/chart_controller.js
202
218
  - app/components/phlex_kit/checkbox/checkbox.css
203
219
  - app/components/phlex_kit/checkbox/checkbox.rb
204
220
  - app/components/phlex_kit/clipboard/clipboard.css
205
221
  - app/components/phlex_kit/clipboard/clipboard.rb
222
+ - app/components/phlex_kit/clipboard/clipboard_controller.js
206
223
  - app/components/phlex_kit/clipboard/clipboard_popover.rb
207
224
  - app/components/phlex_kit/clipboard/clipboard_source.rb
208
225
  - app/components/phlex_kit/clipboard/clipboard_trigger.rb
@@ -211,6 +228,7 @@ files:
211
228
  - app/components/phlex_kit/collapsible/collapsible.css
212
229
  - app/components/phlex_kit/collapsible/collapsible.rb
213
230
  - app/components/phlex_kit/collapsible/collapsible_content.rb
231
+ - app/components/phlex_kit/collapsible/collapsible_controller.js
214
232
  - app/components/phlex_kit/collapsible/collapsible_trigger.rb
215
233
  - app/components/phlex_kit/combobox/combobox.css
216
234
  - app/components/phlex_kit/combobox/combobox.rb
@@ -218,6 +236,7 @@ files:
218
236
  - app/components/phlex_kit/combobox/combobox_badge_trigger.rb
219
237
  - app/components/phlex_kit/combobox/combobox_checkbox.rb
220
238
  - app/components/phlex_kit/combobox/combobox_clear_button.rb
239
+ - app/components/phlex_kit/combobox/combobox_controller.js
221
240
  - app/components/phlex_kit/combobox/combobox_empty_state.rb
222
241
  - app/components/phlex_kit/combobox/combobox_input_trigger.rb
223
242
  - app/components/phlex_kit/combobox/combobox_item.rb
@@ -231,8 +250,10 @@ files:
231
250
  - app/components/phlex_kit/combobox/combobox_trigger.rb
232
251
  - app/components/phlex_kit/command/command.css
233
252
  - app/components/phlex_kit/command/command.rb
253
+ - app/components/phlex_kit/command/command_controller.js
234
254
  - app/components/phlex_kit/command/command_dialog.rb
235
255
  - app/components/phlex_kit/command/command_dialog_content.rb
256
+ - app/components/phlex_kit/command/command_dialog_controller.js
236
257
  - app/components/phlex_kit/command/command_dialog_trigger.rb
237
258
  - app/components/phlex_kit/command/command_empty.rb
238
259
  - app/components/phlex_kit/command/command_group.rb
@@ -242,6 +263,7 @@ files:
242
263
  - app/components/phlex_kit/context_menu/context_menu.css
243
264
  - app/components/phlex_kit/context_menu/context_menu.rb
244
265
  - app/components/phlex_kit/context_menu/context_menu_content.rb
266
+ - app/components/phlex_kit/context_menu/context_menu_controller.js
245
267
  - app/components/phlex_kit/context_menu/context_menu_item.rb
246
268
  - app/components/phlex_kit/context_menu/context_menu_label.rb
247
269
  - app/components/phlex_kit/context_menu/context_menu_separator.rb
@@ -250,6 +272,8 @@ files:
250
272
  - app/components/phlex_kit/data_table/data_table.rb
251
273
  - app/components/phlex_kit/data_table/data_table_bulk_actions.rb
252
274
  - app/components/phlex_kit/data_table/data_table_column_toggle.rb
275
+ - app/components/phlex_kit/data_table/data_table_column_visibility_controller.js
276
+ - app/components/phlex_kit/data_table/data_table_controller.js
253
277
  - app/components/phlex_kit/data_table/data_table_expand_toggle.rb
254
278
  - app/components/phlex_kit/data_table/data_table_form.rb
255
279
  - app/components/phlex_kit/data_table/data_table_kaminari_adapter.rb
@@ -260,6 +284,7 @@ files:
260
284
  - app/components/phlex_kit/data_table/data_table_per_page_select.rb
261
285
  - app/components/phlex_kit/data_table/data_table_row_checkbox.rb
262
286
  - app/components/phlex_kit/data_table/data_table_search.rb
287
+ - app/components/phlex_kit/data_table/data_table_search_controller.js
263
288
  - app/components/phlex_kit/data_table/data_table_select_all_checkbox.rb
264
289
  - app/components/phlex_kit/data_table/data_table_selection_summary.rb
265
290
  - app/components/phlex_kit/data_table/data_table_sort_head.rb
@@ -269,6 +294,7 @@ files:
269
294
  - app/components/phlex_kit/dialog/dialog.css
270
295
  - app/components/phlex_kit/dialog/dialog.rb
271
296
  - app/components/phlex_kit/dialog/dialog_content.rb
297
+ - app/components/phlex_kit/dialog/dialog_controller.js
272
298
  - app/components/phlex_kit/dialog/dialog_description.rb
273
299
  - app/components/phlex_kit/dialog/dialog_footer.rb
274
300
  - app/components/phlex_kit/dialog/dialog_header.rb
@@ -286,10 +312,19 @@ files:
286
312
  - app/components/phlex_kit/drawer/drawer_trigger.rb
287
313
  - app/components/phlex_kit/dropdown_menu/dropdown_menu.css
288
314
  - app/components/phlex_kit/dropdown_menu/dropdown_menu.rb
315
+ - app/components/phlex_kit/dropdown_menu/dropdown_menu_checkbox_item.rb
289
316
  - app/components/phlex_kit/dropdown_menu/dropdown_menu_content.rb
317
+ - app/components/phlex_kit/dropdown_menu/dropdown_menu_controller.js
318
+ - app/components/phlex_kit/dropdown_menu/dropdown_menu_group.rb
290
319
  - app/components/phlex_kit/dropdown_menu/dropdown_menu_item.rb
291
320
  - app/components/phlex_kit/dropdown_menu/dropdown_menu_label.rb
321
+ - app/components/phlex_kit/dropdown_menu/dropdown_menu_radio_group.rb
322
+ - app/components/phlex_kit/dropdown_menu/dropdown_menu_radio_item.rb
292
323
  - app/components/phlex_kit/dropdown_menu/dropdown_menu_separator.rb
324
+ - app/components/phlex_kit/dropdown_menu/dropdown_menu_shortcut.rb
325
+ - app/components/phlex_kit/dropdown_menu/dropdown_menu_sub.rb
326
+ - app/components/phlex_kit/dropdown_menu/dropdown_menu_sub_content.rb
327
+ - app/components/phlex_kit/dropdown_menu/dropdown_menu_sub_trigger.rb
293
328
  - app/components/phlex_kit/dropdown_menu/dropdown_menu_trigger.rb
294
329
  - app/components/phlex_kit/empty/empty.css
295
330
  - app/components/phlex_kit/empty/empty.rb
@@ -302,13 +337,16 @@ files:
302
337
  - app/components/phlex_kit/form/form.rb
303
338
  - app/components/phlex_kit/form_field/form_field.css
304
339
  - app/components/phlex_kit/form_field/form_field.rb
340
+ - app/components/phlex_kit/form_field/form_field_controller.js
305
341
  - app/components/phlex_kit/form_field/form_field_error.rb
306
342
  - app/components/phlex_kit/form_field/form_field_hint.rb
307
343
  - app/components/phlex_kit/form_field/form_field_label.rb
308
344
  - app/components/phlex_kit/hover_card/hover_card.css
309
345
  - app/components/phlex_kit/hover_card/hover_card.rb
310
346
  - app/components/phlex_kit/hover_card/hover_card_content.rb
347
+ - app/components/phlex_kit/hover_card/hover_card_controller.js
311
348
  - app/components/phlex_kit/hover_card/hover_card_trigger.rb
349
+ - app/components/phlex_kit/icon/icon.rb
312
350
  - app/components/phlex_kit/input/input.css
313
351
  - app/components/phlex_kit/input/input.rb
314
352
  - app/components/phlex_kit/input_group/input_group.css
@@ -317,6 +355,7 @@ files:
317
355
  - app/components/phlex_kit/input_group/input_group_text.rb
318
356
  - app/components/phlex_kit/input_otp/input_otp.css
319
357
  - app/components/phlex_kit/input_otp/input_otp.rb
358
+ - app/components/phlex_kit/input_otp/input_otp_controller.js
320
359
  - app/components/phlex_kit/input_otp/input_otp_group.rb
321
360
  - app/components/phlex_kit/input_otp/input_otp_separator.rb
322
361
  - app/components/phlex_kit/input_otp/input_otp_slot.rb
@@ -335,10 +374,16 @@ files:
335
374
  - app/components/phlex_kit/label/label.rb
336
375
  - app/components/phlex_kit/link/link.css
337
376
  - app/components/phlex_kit/link/link.rb
377
+ - app/components/phlex_kit/marker/marker.css
378
+ - app/components/phlex_kit/marker/marker.rb
379
+ - app/components/phlex_kit/marker/marker_content.rb
380
+ - app/components/phlex_kit/marker/marker_icon.rb
338
381
  - app/components/phlex_kit/masked_input/masked_input.rb
382
+ - app/components/phlex_kit/masked_input/masked_input_controller.js
339
383
  - app/components/phlex_kit/menubar/menubar.css
340
384
  - app/components/phlex_kit/menubar/menubar.rb
341
385
  - app/components/phlex_kit/menubar/menubar_content.rb
386
+ - app/components/phlex_kit/menubar/menubar_controller.js
342
387
  - app/components/phlex_kit/menubar/menubar_item.rb
343
388
  - app/components/phlex_kit/menubar/menubar_menu.rb
344
389
  - app/components/phlex_kit/menubar/menubar_separator.rb
@@ -352,6 +397,7 @@ files:
352
397
  - app/components/phlex_kit/message/message_header.rb
353
398
  - app/components/phlex_kit/message_scroller/message_scroller.css
354
399
  - app/components/phlex_kit/message_scroller/message_scroller.rb
400
+ - app/components/phlex_kit/message_scroller/message_scroller_controller.js
355
401
  - app/components/phlex_kit/native_select/native_select.css
356
402
  - app/components/phlex_kit/native_select/native_select.rb
357
403
  - app/components/phlex_kit/native_select/native_select_group.rb
@@ -372,6 +418,7 @@ files:
372
418
  - app/components/phlex_kit/popover/popover.css
373
419
  - app/components/phlex_kit/popover/popover.rb
374
420
  - app/components/phlex_kit/popover/popover_content.rb
421
+ - app/components/phlex_kit/popover/popover_controller.js
375
422
  - app/components/phlex_kit/popover/popover_trigger.rb
376
423
  - app/components/phlex_kit/progress/progress.css
377
424
  - app/components/phlex_kit/progress/progress.rb
@@ -380,6 +427,7 @@ files:
380
427
  - app/components/phlex_kit/radio_group/radio_group.css
381
428
  - app/components/phlex_kit/radio_group/radio_group.rb
382
429
  - app/components/phlex_kit/resizable/resizable.css
430
+ - app/components/phlex_kit/resizable/resizable_controller.js
383
431
  - app/components/phlex_kit/resizable/resizable_handle.rb
384
432
  - app/components/phlex_kit/resizable/resizable_panel.rb
385
433
  - app/components/phlex_kit/resizable/resizable_panel_group.rb
@@ -388,9 +436,11 @@ files:
388
436
  - app/components/phlex_kit/select/select.css
389
437
  - app/components/phlex_kit/select/select.rb
390
438
  - app/components/phlex_kit/select/select_content.rb
439
+ - app/components/phlex_kit/select/select_controller.js
391
440
  - app/components/phlex_kit/select/select_group.rb
392
441
  - app/components/phlex_kit/select/select_input.rb
393
442
  - app/components/phlex_kit/select/select_item.rb
443
+ - app/components/phlex_kit/select/select_item_controller.js
394
444
  - app/components/phlex_kit/select/select_label.rb
395
445
  - app/components/phlex_kit/select/select_trigger.rb
396
446
  - app/components/phlex_kit/select/select_value.rb
@@ -399,6 +449,8 @@ files:
399
449
  - app/components/phlex_kit/sheet/sheet.css
400
450
  - app/components/phlex_kit/sheet/sheet.rb
401
451
  - app/components/phlex_kit/sheet/sheet_content.rb
452
+ - app/components/phlex_kit/sheet/sheet_content_controller.js
453
+ - app/components/phlex_kit/sheet/sheet_controller.js
402
454
  - app/components/phlex_kit/sheet/sheet_description.rb
403
455
  - app/components/phlex_kit/sheet/sheet_footer.rb
404
456
  - app/components/phlex_kit/sheet/sheet_header.rb
@@ -412,20 +464,30 @@ files:
412
464
  - app/components/phlex_kit/sidebar/sidebar_content.rb
413
465
  - app/components/phlex_kit/sidebar/sidebar_footer.rb
414
466
  - app/components/phlex_kit/sidebar/sidebar_group.rb
467
+ - app/components/phlex_kit/sidebar/sidebar_group_action.rb
468
+ - app/components/phlex_kit/sidebar/sidebar_group_content.rb
469
+ - app/components/phlex_kit/sidebar/sidebar_group_label.rb
415
470
  - app/components/phlex_kit/sidebar/sidebar_header.rb
471
+ - app/components/phlex_kit/sidebar/sidebar_input.rb
416
472
  - app/components/phlex_kit/sidebar/sidebar_inset.rb
417
473
  - app/components/phlex_kit/sidebar/sidebar_menu.rb
474
+ - app/components/phlex_kit/sidebar/sidebar_menu_action.rb
475
+ - app/components/phlex_kit/sidebar/sidebar_menu_badge.rb
418
476
  - app/components/phlex_kit/sidebar/sidebar_menu_button.rb
419
477
  - app/components/phlex_kit/sidebar/sidebar_menu_item.rb
478
+ - app/components/phlex_kit/sidebar/sidebar_menu_skeleton.rb
479
+ - app/components/phlex_kit/sidebar/sidebar_menu_sub.rb
480
+ - app/components/phlex_kit/sidebar/sidebar_menu_sub_button.rb
481
+ - app/components/phlex_kit/sidebar/sidebar_menu_sub_item.rb
482
+ - app/components/phlex_kit/sidebar/sidebar_separator.rb
420
483
  - app/components/phlex_kit/sidebar/sidebar_wrapper.rb
421
484
  - app/components/phlex_kit/skeleton/skeleton.css
422
485
  - app/components/phlex_kit/skeleton/skeleton.rb
423
486
  - app/components/phlex_kit/slider/slider.css
424
487
  - app/components/phlex_kit/slider/slider.rb
488
+ - app/components/phlex_kit/slider/slider_controller.js
425
489
  - app/components/phlex_kit/spinner/spinner.css
426
490
  - app/components/phlex_kit/spinner/spinner.rb
427
- - app/components/phlex_kit/stars/stars.css
428
- - app/components/phlex_kit/stars/stars.rb
429
491
  - app/components/phlex_kit/switch/switch.css
430
492
  - app/components/phlex_kit/switch/switch.rb
431
493
  - app/components/phlex_kit/table/table.css
@@ -440,25 +502,31 @@ files:
440
502
  - app/components/phlex_kit/tabs/tabs.css
441
503
  - app/components/phlex_kit/tabs/tabs.rb
442
504
  - app/components/phlex_kit/tabs/tabs_content.rb
505
+ - app/components/phlex_kit/tabs/tabs_controller.js
443
506
  - app/components/phlex_kit/tabs/tabs_list.rb
444
507
  - app/components/phlex_kit/tabs/tabs_trigger.rb
445
508
  - app/components/phlex_kit/textarea/textarea.css
446
509
  - app/components/phlex_kit/textarea/textarea.rb
447
510
  - app/components/phlex_kit/theme_toggle/theme_toggle.rb
511
+ - app/components/phlex_kit/theme_toggle/theme_toggle_controller.js
448
512
  - app/components/phlex_kit/toast/toast.css
449
513
  - app/components/phlex_kit/toast/toast.rb
450
514
  - app/components/phlex_kit/toast/toast_action.rb
451
515
  - app/components/phlex_kit/toast/toast_cancel.rb
452
516
  - app/components/phlex_kit/toast/toast_close.rb
517
+ - app/components/phlex_kit/toast/toast_controller.js
453
518
  - app/components/phlex_kit/toast/toast_description.rb
454
519
  - app/components/phlex_kit/toast/toast_icon.rb
455
520
  - app/components/phlex_kit/toast/toast_item.rb
456
521
  - app/components/phlex_kit/toast/toast_region.rb
457
522
  - app/components/phlex_kit/toast/toast_title.rb
523
+ - app/components/phlex_kit/toast/toaster_controller.js
458
524
  - app/components/phlex_kit/toggle/toggle.css
459
525
  - app/components/phlex_kit/toggle/toggle.rb
526
+ - app/components/phlex_kit/toggle/toggle_controller.js
460
527
  - app/components/phlex_kit/toggle_group/toggle_group.css
461
528
  - app/components/phlex_kit/toggle_group/toggle_group.rb
529
+ - app/components/phlex_kit/toggle_group/toggle_group_controller.js
462
530
  - app/components/phlex_kit/toggle_group/toggle_group_item.rb
463
531
  - app/components/phlex_kit/tooltip/tooltip.css
464
532
  - app/components/phlex_kit/tooltip/tooltip.rb
@@ -470,44 +538,7 @@ files:
470
538
  - app/components/phlex_kit/typography/inline_link.rb
471
539
  - app/components/phlex_kit/typography/text.rb
472
540
  - app/components/phlex_kit/typography/typography.css
473
- - app/javascript/phlex_kit/controllers/accordion_controller.js
474
- - app/javascript/phlex_kit/controllers/alert_dialog_controller.js
475
- - app/javascript/phlex_kit/controllers/avatar_controller.js
476
- - app/javascript/phlex_kit/controllers/calendar_controller.js
477
- - app/javascript/phlex_kit/controllers/calendar_input_controller.js
478
- - app/javascript/phlex_kit/controllers/carousel_controller.js
479
- - app/javascript/phlex_kit/controllers/chart_controller.js
480
- - app/javascript/phlex_kit/controllers/clipboard_controller.js
481
- - app/javascript/phlex_kit/controllers/collapsible_controller.js
482
- - app/javascript/phlex_kit/controllers/combobox_controller.js
483
- - app/javascript/phlex_kit/controllers/command_controller.js
484
- - app/javascript/phlex_kit/controllers/command_dialog_controller.js
485
- - app/javascript/phlex_kit/controllers/context_menu_controller.js
486
- - app/javascript/phlex_kit/controllers/data_table_column_visibility_controller.js
487
- - app/javascript/phlex_kit/controllers/data_table_controller.js
488
- - app/javascript/phlex_kit/controllers/data_table_search_controller.js
489
- - app/javascript/phlex_kit/controllers/dialog_controller.js
490
- - app/javascript/phlex_kit/controllers/dropdown_menu_controller.js
491
- - app/javascript/phlex_kit/controllers/form_field_controller.js
492
- - app/javascript/phlex_kit/controllers/hover_card_controller.js
493
541
  - app/javascript/phlex_kit/controllers/index.js
494
- - app/javascript/phlex_kit/controllers/input_otp_controller.js
495
- - app/javascript/phlex_kit/controllers/masked_input_controller.js
496
- - app/javascript/phlex_kit/controllers/menubar_controller.js
497
- - app/javascript/phlex_kit/controllers/message_scroller_controller.js
498
- - app/javascript/phlex_kit/controllers/popover_controller.js
499
- - app/javascript/phlex_kit/controllers/resizable_controller.js
500
- - app/javascript/phlex_kit/controllers/select_controller.js
501
- - app/javascript/phlex_kit/controllers/select_item_controller.js
502
- - app/javascript/phlex_kit/controllers/sheet_content_controller.js
503
- - app/javascript/phlex_kit/controllers/sheet_controller.js
504
- - app/javascript/phlex_kit/controllers/slider_controller.js
505
- - app/javascript/phlex_kit/controllers/tabs_controller.js
506
- - app/javascript/phlex_kit/controllers/theme_toggle_controller.js
507
- - app/javascript/phlex_kit/controllers/toast_controller.js
508
- - app/javascript/phlex_kit/controllers/toaster_controller.js
509
- - app/javascript/phlex_kit/controllers/toggle_controller.js
510
- - app/javascript/phlex_kit/controllers/toggle_group_controller.js
511
542
  - config/importmap.rb
512
543
  - lib/generators/phlex_kit/component/component_generator.rb
513
544
  - lib/generators/phlex_kit/install/install_generator.rb
@@ -516,6 +547,11 @@ files:
516
547
  - lib/phlex_kit/base_component.rb
517
548
  - lib/phlex_kit/configuration.rb
518
549
  - lib/phlex_kit/engine.rb
550
+ - lib/phlex_kit/icons.rb
551
+ - lib/phlex_kit/icons/lucide.rb
552
+ - lib/phlex_kit/icons/phosphor.rb
553
+ - lib/phlex_kit/icons/remix.rb
554
+ - lib/phlex_kit/icons/tabler.rb
519
555
  - lib/phlex_kit/propshaft_skip_source.rb
520
556
  - lib/phlex_kit/version.rb
521
557
  homepage: https://github.com/MatthewKennedy/phlex_kit
@@ -541,5 +577,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
541
577
  requirements: []
542
578
  rubygems_version: 4.0.15
543
579
  specification_version: 4
544
- summary: A ruby_ui-style Phlex component kit styled with vanilla CSS and design tokens.
580
+ summary: shadcn/ui-style component system for Phlex, styled with vanilla CSS and design
581
+ tokens.
545
582
  test_files: []
@@ -1,4 +0,0 @@
1
- /* Co-located with stars.rb — UI::Stars. The gold rating glyphs; self-colours so
2
- product cards / summaries get amber stars too (the old `.review .stars` rule
3
- only coloured stars inside a review). Theme tokens come from the global stylesheet. */
4
- .pk-stars { color: var(--pk-amber); letter-spacing: 1px; }
@@ -1,19 +0,0 @@
1
- module PhlexKit
2
- # Star rating (CUSTOM — ruby_ui has no rating component). Replaces the `stars`
3
- # view helper: renders `rating` filled stars + the remainder empty, out of
4
- # `max`. Presentational; attrs pass through via mix. Self-colours (amber) so it
5
- # works anywhere, not just inside a review.
6
- class Stars < BaseComponent
7
- def initialize(rating:, max: 5, **attrs)
8
- @rating = rating.to_i.clamp(0, max)
9
- @max = max
10
- @attrs = attrs
11
- end
12
-
13
- def view_template
14
- span(**mix({ class: "pk-stars", title: "#{@rating}/#{@max}" }, @attrs)) do
15
- plain(("★" * @rating) + ("☆" * (@max - @rating)))
16
- end
17
- end
18
- end
19
- end