mirror of
https://github.com/we-promise/sure.git
synced 2026-05-09 13:45:01 +00:00
* chore(design-system): swap raw gray classes for semantic tokens in settings/
Pilot for the broader raw-color sweep. Maps 21 occurrences across 11
files to design-system equivalents:
- text-white bg-gray-900 hover:bg-gray-800 (CTA buttons)
-> text-inverse button-bg-primary hover:button-bg-primary-hover
- bg-gray-25 / bg-gray-50 / bg-gray-100 (subtle surface backgrounds)
-> bg-surface-inset
- bg-gray-800 (tooltip pills) -> bg-inverse
- text-white inside tooltips -> text-inverse
- text-gray-300 (muted tooltip labels) -> text-inverse opacity-70
- text-gray-600 (muted body text) -> text-secondary
- hover:text-gray-700 -> hover:text-primary
- focus:ring-gray-900 -> focus:ring-button-bg-primary
The 7 status-indicator dots (`bg-gray-400`) are intentionally left
as raw classes. Gray-400 against both light and dark container bgs
gives reasonable contrast either way, and there's no semantic token
that fits a "neutral inactive indicator" use case yet. Worth a
follow-up if a `bg-subdued` token would benefit other places.
* fix(design-system): use theme-aware focus ring on provider submit buttons
Two issues caught in code review:
1. focus:ring-button-bg-primary silently emits no CSS (CodeRabbit, Codex).
button-bg-primary is a custom @utility, not a theme color, so Tailwind's
ring-{name} resolution finds no --color-button-bg-primary and falls
back to the default. Replaces with focus:ring-gray-900
theme-dark:focus:ring-white — same color flip as the button bg, but
resolved through theme colors so ring-{name} actually generates CSS.
2. _enable_banking_panel.html.erb dropped focus-ring + transition entirely
in the original sweep (CodeRabbit). Restores parity with the other
provider panels using the corrected ring classes.
Long-term cleanup: tracked under issue #1653 (modifier-aware utilities)
to make button-bg-primary also a theme color so ring-button-bg-primary
becomes valid.
63 lines
3.1 KiB
Plaintext
63 lines
3.1 KiB
Plaintext
<div class="space-y-4">
|
|
<div class="prose prose-sm text-secondary">
|
|
<p class="text-primary font-medium">Setup instructions:</p>
|
|
<ol>
|
|
<li>Visit <a href="https://www.lunchflow.app/?atp=BiDIYS" target="_blank" rel="noopener noreferrer" class="link">Lunch Flow</a> to get your API key</li>
|
|
<li>Paste your API key below and click the Save button</li>
|
|
<li>After a successful connection, go to the Accounts tab to set up new accounts and link them to your existing ones</li>
|
|
</ol>
|
|
|
|
<p class="text-primary font-medium">Field descriptions:</p>
|
|
<ul>
|
|
<li><strong>API Key:</strong> Your Lunch Flow API key for authentication (required)</li>
|
|
<li><strong>Base URL:</strong> Base URL for Lunch Flow API (optional, defaults to https://lunchflow.app/api/v1)</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<% error_msg = local_assigns[:error_message] || @error_message %>
|
|
<% if error_msg.present? %>
|
|
<div class="p-2 rounded-md bg-destructive/10 text-destructive text-sm overflow-hidden">
|
|
<p class="line-clamp-3" title="<%= error_msg %>"><%= error_msg %></p>
|
|
</div>
|
|
<% end %>
|
|
|
|
<%
|
|
# Get or initialize a lunchflow_item for this family
|
|
lunchflow_item = Current.family.lunchflow_items.first_or_initialize(name: "Lunch Flow Connection")
|
|
is_new_record = lunchflow_item.new_record?
|
|
%>
|
|
|
|
<%= styled_form_with model: lunchflow_item,
|
|
url: is_new_record ? lunchflow_items_path : lunchflow_item_path(lunchflow_item),
|
|
scope: :lunchflow_item,
|
|
method: is_new_record ? :post : :patch,
|
|
data: { turbo: true },
|
|
class: "space-y-3" do |form| %>
|
|
<%= form.text_field :api_key,
|
|
label: "API Key",
|
|
placeholder: is_new_record ? "Paste API key here" : "Enter new API key to update",
|
|
type: :password %>
|
|
|
|
<%= form.text_field :base_url,
|
|
label: "Base URL (Optional)",
|
|
placeholder: "https://lunchflow.app/api/v1 (default)",
|
|
value: lunchflow_item.base_url %>
|
|
|
|
<div class="flex justify-end">
|
|
<%= form.submit is_new_record ? "Save Configuration" : "Update Configuration",
|
|
class: "inline-flex items-center justify-center rounded-lg px-4 py-2 text-sm font-medium text-inverse button-bg-primary hover:button-bg-primary-hover focus:outline-none focus:ring-2 focus:ring-gray-900 theme-dark:focus:ring-white focus:ring-offset-2 transition-colors" %>
|
|
</div>
|
|
<% end %>
|
|
|
|
<% items = local_assigns[:lunchflow_items] || @lunchflow_items || Current.family.lunchflow_items.where.not(api_key: nil) %>
|
|
<div class="flex items-center gap-2">
|
|
<% if items&.any? %>
|
|
<div class="w-2 h-2 bg-success rounded-full"></div>
|
|
<p class="text-sm text-secondary">Configured and ready to use. Visit the <a href="<%= accounts_path %>" class="link">Accounts</a> tab to manage and set up accounts.</p>
|
|
<% else %>
|
|
<div class="w-2 h-2 bg-gray-400 rounded-full"></div>
|
|
<p class="text-sm text-secondary">Not configured</p>
|
|
<% end %>
|
|
</div>
|
|
</div>
|