neiam
/lambent_ex
Lambent Aether 5
public · Issues · Pulls 1 · Labels · Forks · Compare · Actions success · Badges · Packages
⭐
Log in to mark this repository.
scape/rocker forms, maybe ci will login to DH
a2b10db · gmorell · 2023-01-03 05:51
Files changed
modified
.gitlab-ci.yml
+2
−1
@@ -10,7 +10,8 @@ build-master:
| 10 | 10 | - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json |
| 11 | 11 | - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $CI_REGISTRY_IMAGE --registry-mirror eu0.regi.kube.gmp.io |
| 12 | 12 | |
| 13 | − - echo "{\"auths\":{\"$CI_REGISTRY_DH\":{\"username\":\"$CI_REGISTRY_USER_DH\",\"password\":\"$CI_REGISTRY_PASSWORD_DH\"}}}" > /kaniko/.docker/config.json | |
| 13 | + - DHAUTH=`"${CI_REGISTRY_USER_DH}:${$CI_REGISTRY_PASSWORD_DH}" | openssl base64 -A` | |
| 14 | + - echo "{\"auths\":{\"$CI_REGISTRY_DH\":{\"auth\":\"DHAUTH\"}}}" > /kaniko/.docker/config.json | |
| 14 | 15 | - cat /kaniko/.docker/config.json |
| 15 | 16 | - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $CI_REGISTRY_IMAGE_DH:latest |
| 16 | 17 |
modified
README.md
+1
−0
@@ -9,6 +9,7 @@ A Reimplementation of Lambent Aether 4, in Elixir
| 9 | 9 | - Device implementation is 100x more robust in device discovery on-net |
| 10 | 10 | - ~Devices can be virtually grouped~ |
| 11 | 11 | - Individual Machine Brightness Controls |
| 12 | +- Machine Persistence / ~TODO Link Persistence~ | |
| 12 | 13 | - ~Links can target groups~ |
| 13 | 14 | |
| 14 | 15 | ### Device Support |
modified
lib/lambent_ex/schema/machines.ex
+21
−9
@@ -8,18 +8,20 @@ defmodule LambentEx.Schema.Machines do
| 8 | 8 | alias LambentEx.Schema.Machines |
| 9 | 9 | |
| 10 | 10 | @values %{ |
| 11 | − gen_solid: "Solid", | |
| 12 | − gen_solid_h: "Solid (HSV)", | |
| 13 | − gen_color_cycle: "Color Cycler", | |
| 14 | − gen_chaser: "Chaser", | |
| 15 | − gen_chaser_h: "Chaser (HSV)", | |
| 11 | + gen_solid: "Solid", # | |
| 12 | + gen_solid_h: "Solid (HSV)", # | |
| 13 | + gen_color_cycle: "Color Cycler", # | |
| 14 | + gen_chaser: "Chaser", # | |
| 15 | + gen_chaser_h: "Chaser (HSV)", # | |
| 16 | 16 | gen_chaser_m: "Multi-Chaser", |
| 17 | 17 | gen_chaser_mh: "Multi-Chaser (HSV)", |
| 18 | 18 | gen_growth: "Growth", |
| 19 | − gen_rocker: "Rocker", | |
| 20 | − gen_rainbow: "Rainbow", | |
| 21 | − gen_rainbow_s: "Rainbow (Solid)", | |
| 22 | − gen_scape: "Scape", | |
| 19 | + gen_rocker: "Rocker", # | |
| 20 | + gen_rocker_s: "Rocker (Solid)", # | |
| 21 | + gen_rainbow: "Rainbow", # | |
| 22 | + gen_rainbow_s: "Rainbow (Solid)", # | |
| 23 | + gen_scape: "Scape", # | |
| 24 | + gen_scape_s: "Scape (Solid)", # | |
| 23 | 25 | gen_twinkler: "LA3PortTwinler", |
| 24 | 26 | rcv_fft: "FFT Receiver", |
| 25 | 27 | rcv_gsi: "GSI Receiver", |
@@ -34,6 +36,10 @@ defmodule LambentEx.Schema.Machines do
| 34 | 36 | gen_chaser_h: LambentEx.Machine.Steps.Chase, |
| 35 | 37 | gen_rainbow: LambentEx.Machine.Steps.Rainbow, |
| 36 | 38 | gen_rainbow_s: LambentEx.Machine.Steps.Rainbow, |
| 39 | + gen_rocker: LambentEx.Machine.Steps.Rocker, | |
| 40 | + gen_rocker_s: LambentEx.Machine.Steps.Rocker, | |
| 41 | + gen_scape: LambentEx.Machine.Steps.Scape, | |
| 42 | + gen_scape_s: LambentEx.Machine.Steps.Scape, | |
| 37 | 43 | } |
| 38 | 44 | |
| 39 | 45 | embedded_schema do |
@@ -47,6 +53,10 @@ defmodule LambentEx.Schema.Machines do
| 47 | 53 | gen_solid_h: LambentEx.Schema.Steps.Solid, |
| 48 | 54 | gen_chaser: LambentEx.Schema.Steps.Chase, |
| 49 | 55 | gen_chaser_h: LambentEx.Schema.Steps.Chase, |
| 56 | + gen_rocker: LambentEx.Schema.Steps.Rocker, | |
| 57 | + gen_rocker_s: LambentEx.Schema.Steps.Rocker, | |
| 58 | + gen_scape: LambentEx.Schema.Steps.Scape, | |
| 59 | + gen_scape_s: LambentEx.Schema.Steps.Scape, | |
| 50 | 60 | gen_rainbow: LambentEx.Schema.Steps.Rainbow, |
| 51 | 61 | gen_rainbow_s: LambentEx.Schema.Steps.Rainbow |
| 52 | 62 | ], |
@@ -79,6 +89,8 @@ defmodule LambentEx.Schema.Machines do
| 79 | 89 | :gen_solid -> [single: true] |
| 80 | 90 | :gen_solid_h -> [single: true] |
| 81 | 91 | :gen_rainbow_s -> [single: true] |
| 92 | + :gen_rocker_s -> [single: true] | |
| 93 | + :gen_scape_s -> [single: true] | |
| 82 | 94 | _otherwise -> [] |
| 83 | 95 | end |> IO.inspect() |
| 84 | 96 |
added
lib/lambent_ex/schema/steps/rocker.ex
+21
−0
@@ -0,0 +1,21 @@
| 1 | +defmodule LambentEx.Schema.Steps.Rocker do | |
| 2 | + use Ecto.Schema | |
| 3 | + import Ecto.Changeset | |
| 4 | + | |
| 5 | + @primary_key false | |
| 6 | + | |
| 7 | + embedded_schema do | |
| 8 | + field :h, {:array, :integer}, default: [] | |
| 9 | + field :h_sel, :integer | |
| 10 | + field :s, :integer, default: 255 | |
| 11 | + field :v, :integer, default: 255 | |
| 12 | + field :linger, :integer, default: 1000 | |
| 13 | + field :dark, :boolean, default: true | |
| 14 | + end | |
| 15 | + | |
| 16 | + def changeset(source, params) do | |
| 17 | + source | |
| 18 | + |> cast(params, ~w(h h_sel s v linger dark)a) | |
| 19 | + |> validate_required([:h, :h_sel, :s, :v, :linger, :dark]) | |
| 20 | + end | |
| 21 | +end |
added
lib/lambent_ex/schema/steps/scapes.ex
+21
−0
@@ -0,0 +1,21 @@
| 1 | +defmodule LambentEx.Schema.Steps.Scape do | |
| 2 | + use Ecto.Schema | |
| 3 | + import Ecto.Changeset | |
| 4 | + | |
| 5 | + @primary_key false | |
| 6 | + | |
| 7 | + embedded_schema do | |
| 8 | + field :h_h, :integer | |
| 9 | + field :h_l, :integer | |
| 10 | + field :s, :integer, default: 255 | |
| 11 | + field :v, :integer, default: 255 | |
| 12 | + field :linger, :integer, default: 1000 | |
| 13 | + field :dark, :boolean, default: true | |
| 14 | + end | |
| 15 | + | |
| 16 | + def changeset(source, params) do | |
| 17 | + source | |
| 18 | + |> cast(params, ~w(h_h h_l s v linger dark)a) | |
| 19 | + |> validate_required([:h_h, :h_l, :s, :v, :linger, :dark]) | |
| 20 | + end | |
| 21 | +end |
modified
lib/lambent_ex_web/live/machines/form_component.ex
+108
−28
@@ -9,37 +9,82 @@ defmodule LambentEx.MachinesLive.FormComponent do
| 9 | 9 | changeset = Machines.change_machine(machine) |
| 10 | 10 | |
| 11 | 11 | {:ok, |
| 12 | − socket | |
| 13 | − |> assign(assigns) | |
| 14 | − |> assign(:changeset, changeset) | |
| 15 | − |> assign(:rgb, nil) | |
| 16 | − |> assign(:h, nil) | |
| 17 | − |> assign(:s, nil) | |
| 18 | − |> assign(:v, nil) | |
| 19 | − |> assign(:r, nil) | |
| 20 | − |> assign(:g, nil) | |
| 21 | − |> assign(:b, nil) | |
| 22 | − } | |
| 12 | + socket | |
| 13 | + |> assign(assigns) | |
| 14 | + |> assign(:changeset, changeset) | |
| 15 | + |> assign(:rgb, nil) | |
| 16 | + |> assign(:rgbs, []) | |
| 17 | + |> assign(:hs, []) | |
| 18 | + |> assign(:h, nil) | |
| 19 | + |> assign(:s, nil) | |
| 20 | + |> assign(:v, nil) | |
| 21 | + |> assign(:r, nil) | |
| 22 | + |> assign(:g, nil) | |
| 23 | + |> assign(:b, nil)} | |
| 24 | + end | |
| 25 | + | |
| 26 | + defp rocker_params(%{"name" => name, "type" => type}), do: %{"name" => name, "type" => type} | |
| 27 | + | |
| 28 | + defp rocker_params(params) do | |
| 29 | + IO.inspect(params) | |
| 30 | + currhs = Kernel.get_in(params, ["class", "h"]) || [] | |
| 31 | + | |
| 32 | + case params |> Map.get("h_sel") do | |
| 33 | + nil -> params |> Kernel.put_in(["class", "h"], currhs) |> IO.inspect() | |
| 34 | + val -> params |> Kernel.put_in(["class", "h"], currhs + [val]) |> IO.inspect() | |
| 35 | + end | |
| 23 | 36 | end |
| 24 | 37 | |
| 25 | 38 | @impl true |
| 26 | 39 | def handle_event("validate", %{"machines" => machine_params}, socket) do |
| 40 | + # machine_params = case machine_params["type"] do | |
| 41 | + # "gen_rocker" -> rocker_params(machine_params) | |
| 42 | + # "gen_rocker_s" -> rocker_params(machine_params) | |
| 43 | + # _otherwise -> machine_params | |
| 44 | + # end | |
| 45 | + | |
| 27 | 46 | changeset = |
| 28 | 47 | socket.assigns.machine |
| 29 | 48 | |> Machines.change_machine(machine_params) |
| 49 | + |> IO.inspect() | |
| 30 | 50 | |> Map.put(:action, :validate) |
| 31 | 51 | |
| 32 | − keys = case changeset.changes[:type] do | |
| 33 | − :gen_chaser_h -> changeset.changes[:class] |> hue_keys | |
| 34 | − :gen_solid_h -> changeset.changes[:class] |> hue_keys | |
| 35 | − _otherwise -> [] | |
| 36 | − end | |
| 52 | + IO.inspect({changeset.changes[:type], changeset.changes[:class]}) | |
| 37 | 53 | |
| 38 | − socket = case keys do | |
| 39 | − [r: r, g: g, b: b] -> socket |> assign(:rgb, "rgb(#{r}, #{g}, #{b})") | |
| 40 | − [r: r, g: g, b: b, h: h] -> socket |> assign(:rgb, "rgb(#{r}, #{g}, #{b})") |> assign(:h, h) | |
| 41 | − [] -> socket | |
| 42 | − end | |
| 54 | + keys = | |
| 55 | + case changeset.changes[:type] do | |
| 56 | + :gen_chaser_h -> changeset.changes[:class] |> hue_keys | |
| 57 | + :gen_solid_h -> changeset.changes[:class] |> hue_keys | |
| 58 | + :gen_rocker -> changeset.changes[:class] |> rocker_keys | |
| 59 | + :gen_rocker_s -> changeset.changes[:class] |> rocker_keys | |
| 60 | + :gen_scape -> changeset.changes[:class] |> scape_keys | |
| 61 | + :gen_scape_s -> changeset.changes[:class] |> scape_keys | |
| 62 | + _otherwise -> [] | |
| 63 | + end | |
| 64 | + |> IO.inspect() | |
| 65 | + | |
| 66 | + socket = | |
| 67 | + case keys do | |
| 68 | + [r: r, g: g, b: b, h: h, hs: hs] -> | |
| 69 | + IO.puts("qqq") | |
| 70 | + | |
| 71 | + socket | |
| 72 | + |> assign(:rgb, rgb(r, g, b)) | |
| 73 | + |> assign(:rgbs, hs |> Enum.map(fn [r_, g_, b_] -> rgb(r_, g_, b_) end)) | |
| 74 | + |> assign(:h, h) | |
| 75 | + | |
| 76 | + [r: r, g: g, b: b] -> | |
| 77 | + socket |> assign(:rgb, rgb(r, g, b)) | |
| 78 | + | |
| 79 | + [r: r, g: g, b: b, h: h] -> | |
| 80 | + socket |> assign(:rgb, rgb(r, g, b)) |> assign(:h, h) | |
| 81 | + | |
| 82 | + [rh: rh, gh: gh, bh: bh, rl: rl, gl: gl, bl: bl, h_h: h_h, h_l: h_l] -> | |
| 83 | + socket |> assign(:rgbs, [rgb(rh, gh, bh), rgb(rl, gl, bl)]) |> assign(:hs, [h_h, h_l]) | |
| 84 | + | |
| 85 | + [] -> | |
| 86 | + socket | |
| 87 | + end | |
| 43 | 88 | |
| 44 | 89 | {:noreply, assign(socket, :changeset, changeset)} |
| 45 | 90 | end |
@@ -48,9 +93,9 @@ defmodule LambentEx.MachinesLive.FormComponent do
| 48 | 93 | case Machines.update_machines(socket.assigns.machine, machines_params) do |
| 49 | 94 | {:ok, _machine} -> |
| 50 | 95 | {:noreply, |
| 51 | − socket | |
| 52 | − |> put_flash(:info, "Machine Created Successfully") | |
| 53 | − |> push_navigate(to: socket.assigns.navigate)} | |
| 96 | + socket | |
| 97 | + |> put_flash(:info, "Machine Created Successfully") | |
| 98 | + |> push_navigate(to: socket.assigns.navigate)} | |
| 54 | 99 | |
| 55 | 100 | {:error, %Ecto.Changeset{} = changeset} -> |
| 56 | 101 | {:noreply, assign(socket, :changeset, changeset)} |
@@ -62,13 +107,48 @@ defmodule LambentEx.MachinesLive.FormComponent do
| 62 | 107 | {:noreply, assign(socket, :changeset, changeset)} |
| 63 | 108 | end |
| 64 | 109 | |
| 65 | − defp values, do: LambentEx.Schema.Machines.values |> Enum.map(fn {k,v} -> {v,k} end) |> Map.new | |
| 110 | + def handle_event("add-sel", %{"data" => data}, socket) do | |
| 111 | + curr_h = Ecto.Changeset.get_change(socket.assigns.changeset, :h) || [] | |
| 112 | + changeset = socket.assigns.changeset |> Ecto.Changeset.change(h: curr_h ++ [data]) | |
| 113 | + {:noreply, socket} | |
| 114 | + end | |
| 115 | + | |
| 116 | + defp values, | |
| 117 | + do: LambentEx.Schema.Machines.values() |> Enum.map(fn {k, v} -> {v, k} end) |> Map.new() | |
| 118 | + | |
| 66 | 119 | defp expand(int) do |
| 67 | 120 | (int / 255 * 360) |> round |
| 68 | 121 | end |
| 122 | + | |
| 69 | 123 | defp hue_keys(nil), do: [] |
| 70 | − defp hue_keys(%{h: h, s: s, v: v}) do | |
| 71 | − [r,g,b] = LambentEx.Utils.Color.hsv2rgb([h,s,v]) | |
| 124 | + | |
| 125 | + defp hue_keys(%{h: h, s: s, v: v, h_sel: h_sel}) do | |
| 126 | + [r, g, b] = LambentEx.Utils.Color.hsv2rgb([h, s, v]) | |
| 72 | 127 | [r: r, g: g, b: b, h: h] |
| 73 | 128 | end |
| 74 | −end | |
| 129 | + | |
| 130 | + defp rocker_keys(nil), do: [] |> IO.inspect() | |
| 131 | + | |
| 132 | + defp rocker_keys(%{h_sel: h_sel, h: h, s: s, v: v}) do | |
| 133 | + [r, g, b] = LambentEx.Utils.Color.hsv2rgb([h_sel, s, v]) | |
| 134 | + | |
| 135 | + [ | |
| 136 | + r: r, | |
| 137 | + g: g, | |
| 138 | + b: b, | |
| 139 | + h: h_sel, | |
| 140 | + hs: h |> Enum.map(fn hh -> LambentEx.Utils.Color.hsv2rgb([hh, s, v]) end) | |
| 141 | + ] | |
| 142 | + |> IO.inspect() | |
| 143 | + end | |
| 144 | + | |
| 145 | + defp scape_keys(nil), do: [] | |
| 146 | + | |
| 147 | + defp scape_keys(%{h_h: h_h, h_l: h_l, s: s, v: v}) do | |
| 148 | + [rh, gh, bh] = LambentEx.Utils.Color.hsv2rgb([h_h, s, v]) | |
| 149 | + [rl, gl, bl] = LambentEx.Utils.Color.hsv2rgb([h_l, s, v]) | |
| 150 | + [rh: rh, gh: gh, bh: bh, rl: rl, gl: gl, bl: bl, h_h: h_h, h_l: h_l] | |
| 151 | + end | |
| 152 | + | |
| 153 | + defp rgb(r, g, b), do: "rgb(#{r}, #{g}, #{b})" | |
| 154 | +end |
modified
lib/lambent_ex_web/live/machines/form_component.html.heex
+170
−2
@@ -96,7 +96,7 @@
| 96 | 96 | </div> |
| 97 | 97 | <div class="collapse-content"> |
| 98 | 98 | <p> |
| 99 | − <.input field={{gr, :modulo}} type="range" min="0" max="255" label="Saturation" class="range range-priamry range-lg" /> | |
| 99 | + <.input field={{gr, :modulo}} type="range" min="0" max="255" label="Modulo" class="range range-priamry range-lg" /> | |
| 100 | 100 | </p> |
| 101 | 101 | </div> |
| 102 | 102 | </div> |
@@ -111,7 +111,175 @@
| 111 | 111 | </div> |
| 112 | 112 | <div class="collapse-content"> |
| 113 | 113 | <p> |
| 114 | − <.input field={{grs, :modulo}} type="range" min="0" max="255" label="Saturation" class="range range-priamry range-lg" /> | |
| 114 | + <.input field={{grs, :modulo}} type="range" min="0" max="255" label="Modulo" class="range range-priamry range-lg" /> | |
| 115 | + </p> | |
| 116 | + </div> | |
| 117 | + </div> | |
| 118 | + <% end %> | |
| 119 | + | |
| 120 | + | |
| 121 | + <%= :gen_rocker -> %> | |
| 122 | + <%= polymorphic_embed_inputs_for f, :class, :gen_rocker, fn grr -> %> | |
| 123 | + <div class="flex"> | |
| 124 | + <div class="flex-auto"> | |
| 125 | + <.input field={{grr, :h}} type="hidden" value={[]} /> | |
| 126 | + <.input field={{grr, :h_sel}} type="range" min="0" max="255" label="Hue (Selecting)" class="range range-priamry range-lg" /> | |
| 127 | + <div class="w-full flex justify-between text-xs px-2 mb-4" style={"color: #{@rgb}"}> | |
| 128 | + <span>█</span> | |
| 129 | + <span>█</span> | |
| 130 | + <span>█</span> | |
| 131 | + <span>█</span> | |
| 132 | + <span>█</span> | |
| 133 | + <span>█</span> | |
| 134 | + <span>█</span> | |
| 135 | + </div> | |
| 136 | + </div> | |
| 137 | + <div class="flex-none text-5xl p-8"><%= @h %></div> | |
| 138 | + <div class="flex-none py-10"> | |
| 139 | + <btn class="btn btn-accent btn-lg" phx-click="add-sel" phx-target={@myself} phx-value-data={grr.data.h_sel}> | |
| 140 | + <i class="fa-solid fa-plus"></i> | |
| 141 | + </btn> | |
| 142 | + </div> | |
| 143 | + </div> | |
| 144 | + <div tabindex="0" class="collapse collapse-arrow border border-base-300 bg-base-100 rounded-box"> | |
| 145 | + <div class="collapse-title text-xl font-medium"> | |
| 146 | + Extra Configuration Values | |
| 147 | + </div> | |
| 148 | + <div class="collapse-content"> | |
| 149 | + <p> | |
| 150 | + <.input field={{grr, :dark}} type="checkbox" label="Linger" class="range range-priamry range-lg" /> | |
| 151 | + <.input field={{grr, :linger}} type="number" min="0" max="20000" label="Linger" class="range range-priamry range-lg" /> | |
| 152 | + <.input field={{grr, :s}} type="range" min="0" max="255" label="Saturation" class="range range-priamry range-lg" /> | |
| 153 | + <.input field={{grr, :v}} type="range" min="0" max="255" label="Value" class="range range-priamry range-lg" /> | |
| 154 | + </p> | |
| 155 | + </div> | |
| 156 | + </div> | |
| 157 | + <% end %> | |
| 158 | + | |
| 159 | + <%= :gen_rocker_s -> %> | |
| 160 | + <%= polymorphic_embed_inputs_for f, :class, :gen_rocker_s, fn grrs -> %> | |
| 161 | + <div class="flex"> | |
| 162 | + <div class="flex-auto"> | |
| 163 | + <.input field={{grrs, :h}} type="hidden" value={[]} /> | |
| 164 | + <.input field={{grrs, :h_sel}} type="range" min="0" max="255" label="Hue (Selecting)" class="range range-priamry range-lg" /> | |
| 165 | + <div class="w-full flex justify-between text-xs px-2 mb-4" style={"color: #{@rgbs}"}> | |
| 166 | + <span>█</span> | |
| 167 | + <span>█</span> | |
| 168 | + <span>█</span> | |
| 169 | + <span>█</span> | |
| 170 | + <span>█</span> | |
| 171 | + <span>█</span> | |
| 172 | + <span>█</span> | |
| 173 | + </div> | |
| 174 | + </div> | |
| 175 | + <div class="flex-none text-5xl p-8"><%= @h %></div> | |
| 176 | + </div> | |
| 177 | + <div tabindex="0" class="collapse collapse-arrow border border-base-300 bg-base-100 rounded-box"> | |
| 178 | + <div class="collapse-title text-xl font-medium"> | |
| 179 | + Extra Configuration Values | |
| 180 | + </div> | |
| 181 | + <div class="collapse-content"> | |
| 182 | + <p> | |
| 183 | + <.input field={{grrs, :dark}} type="checkbox" min="0" max="20000" label="Linger" class="range range-priamry range-lg" /> | |
| 184 | + <.input field={{grrs, :linger}} type="number" min="0" max="20000" label="Linger" class="range range-priamry range-lg" /> | |
| 185 | + <.input field={{grrs, :s}} type="range" min="0" max="255" label="Saturation" class="range range-priamry range-lg" /> | |
| 186 | + <.input field={{grrs, :v}} type="range" min="0" max="255" label="Value" class="range range-priamry range-lg" /> | |
| 187 | + </p> | |
| 188 | + </div> | |
| 189 | + </div> | |
| 190 | + <% end %> | |
| 191 | + | |
| 192 | + | |
| 193 | + <%= :gen_scape -> %> | |
| 194 | + <%= polymorphic_embed_inputs_for f, :class, :gen_scape, fn gsc -> %> | |
| 195 | + <div class="flex"> | |
| 196 | + <div class="flex-auto"> | |
| 197 | + <.input field={{gsc, :h_sel}} type="range" min="0" max="255" label="Hue (Low)" class="range range-priamry range-lg" /> | |
| 198 | + <div class="w-full flex justify-between text-xs px-2 mb-4" style={"color: #{@rgbs |> Enum.at(1)}"}> | |
| 199 | + <span>█</span> | |
| 200 | + <span>█</span> | |
| 201 | + <span>█</span> | |
| 202 | + <span>█</span> | |
| 203 | + <span>█</span> | |
| 204 | + <span>█</span> | |
| 205 | + <span>█</span> | |
| 206 | + </div> | |
| 207 | + </div> | |
| 208 | + <div class="flex-none text-5xl p-8"><%= @hs |> Enum.at(1) %></div> | |
| 209 | + </div> | |
| 210 | + <div class="flex"> | |
| 211 | + <div class="flex-auto"> | |
| 212 | + <.input field={{gsc, :h_h}} type="range" min="0" max="255" label="Hue (High)" class="range range-priamry range-lg" /> | |
| 213 | + <div class="w-full flex justify-between text-xs px-2 mb-4" style={"color: #{@rgbs |> Enum.at(0)}"}> | |
| 214 | + <span>█</span> | |
| 215 | + <span>█</span> | |
| 216 | + <span>█</span> | |
| 217 | + <span>█</span> | |
| 218 | + <span>█</span> | |
| 219 | + <span>█</span> | |
| 220 | + <span>█</span> | |
| 221 | + </div> | |
| 222 | + </div> | |
| 223 | + <div class="flex-none text-5xl p-8"><%= @hs |> Enum.at(0) %></div> | |
| 224 | + </div> | |
| 225 | + <div tabindex="0" class="collapse collapse-arrow border border-base-300 bg-base-100 rounded-box"> | |
| 226 | + <div class="collapse-title text-xl font-medium"> | |
| 227 | + Extra Configuration Values | |
| 228 | + </div> | |
| 229 | + <div class="collapse-content"> | |
| 230 | + <p> | |
| 231 | + <.input field={{gsc, :dark}} type="checkbox" min="0" max="20000" label="Linger" class="range range-priamry range-lg" /> | |
| 232 | + <.input field={{gsc, :linger}} type="number" min="0" max="20000" label="Linger" class="range range-priamry range-lg" /> | |
| 233 | + <.input field={{gsc, :s}} type="range" min="0" max="255" label="Saturation" class="range range-priamry range-lg" /> | |
| 234 | + <.input field={{gsc, :v}} type="range" min="0" max="255" label="Value" class="range range-priamry range-lg" /> | |
| 235 | + </p> | |
| 236 | + </div> | |
| 237 | + </div> | |
| 238 | + <% end %> | |
| 239 | + | |
| 240 | + | |
| 241 | + <%= :gen_scape_s -> %> | |
| 242 | + <%= polymorphic_embed_inputs_for f, :class, :gen_scape_s, fn gscs -> %> | |
| 243 | + <div class="flex"> | |
| 244 | + <div class="flex-auto"> | |
| 245 | + <.input field={{gscs, :h_l}} type="range" min="0" max="255" label="Hue (Low)" class="range range-priamry range-lg" /> | |
| 246 | + <div class="w-full flex justify-between text-xs px-2 mb-4" style={"color: #{@rgbs |> Enum.at(1)}"}> | |
| 247 | + <span>█</span> | |
| 248 | + <span>█</span> | |
| 249 | + <span>█</span> | |
| 250 | + <span>█</span> | |
| 251 | + <span>█</span> | |
| 252 | + <span>█</span> | |
| 253 | + <span>█</span> | |
| 254 | + </div> | |
| 255 | + </div> | |
| 256 | + <div class="flex-none text-5xl p-8"><%= @hs |> Enum.at(1) %></div> | |
| 257 | + </div> | |
| 258 | + <div class="flex"> | |
| 259 | + <div class="flex-auto"> | |
| 260 | + <.input field={{gscs, :h_h}} type="range" min="0" max="255" label="Hue (High)" class="range range-priamry range-lg" /> | |
| 261 | + <div class="w-full flex justify-between text-xs px-2 mb-4" style={"color: #{@rgbs |> Enum.at(0)}"}> | |
| 262 | + <span>█</span> | |
| 263 | + <span>█</span> | |
| 264 | + <span>█</span> | |
| 265 | + <span>█</span> | |
| 266 | + <span>█</span> | |
| 267 | + <span>█</span> | |
| 268 | + <span>█</span> | |
| 269 | + </div> | |
| 270 | + </div> | |
| 271 | + <div class="flex-none text-5xl p-8"><%= @hs |> Enum.at(0) %></div> | |
| 272 | + </div> | |
| 273 | + <div tabindex="0" class="collapse collapse-arrow border border-base-300 bg-base-100 rounded-box"> | |
| 274 | + <div class="collapse-title text-xl font-medium"> | |
| 275 | + Extra Configuration Values | |
| 276 | + </div> | |
| 277 | + <div class="collapse-content"> | |
| 278 | + <p> | |
| 279 | + <.input field={{gscs, :dark}} type="checkbox" min="0" max="20000" label="Linger" class="range range-priamry range-lg" /> | |
| 280 | + <.input field={{gscs, :linger}} type="number" min="0" max="20000" label="Linger" class="range range-priamry range-lg" /> | |
| 281 | + <.input field={{gscs, :s}} type="range" min="0" max="255" label="Saturation" class="range range-priamry range-lg" /> | |
| 282 | + <.input field={{gscs, :v}} type="range" min="0" max="255" label="Value" class="range range-priamry range-lg" /> | |
| 115 | 283 | </p> |
| 116 | 284 | </div> |
| 117 | 285 | </div> |
Parents: 67ff785