diff --git a/assets/js/components/Battery/BatterySettingsModal.vue b/assets/js/components/Battery/BatterySettingsModal.vue index 489d5cafe..5c3a981c6 100644 --- a/assets/js/components/Battery/BatterySettingsModal.vue +++ b/assets/js/components/Battery/BatterySettingsModal.vue @@ -262,7 +262,7 @@ import collector from "../../mixins/collector.js"; import api from "../../api.js"; import smartCostAvailable from "../../utils/smartCostAvailable.js"; import { defineComponent, type PropType } from "vue"; -import type { Battery, SelectOption } from "assets/js/types/evcc.js"; +import type { Battery, SelectOption } from "../../types/evcc.js"; export default defineComponent({ name: "BatterySettingsModal", diff --git a/assets/js/components/ChargingPlans/ChargingPlan.vue b/assets/js/components/ChargingPlans/ChargingPlan.vue index 250b5145e..ec7c26f8a 100644 --- a/assets/js/components/ChargingPlans/ChargingPlan.vue +++ b/assets/js/components/ChargingPlans/ChargingPlan.vue @@ -113,9 +113,9 @@ import collector from "../../mixins/collector.js"; import api from "../../api.js"; import { optionStep, fmtEnergy } from "../../utils/energyOptions.js"; import { defineComponent, type PropType } from "vue"; -import type { CURRENCY, Timeout, Vehicle } from "assets/js/types/evcc.js"; +import type { CURRENCY, Timeout, Vehicle } from "../../types/evcc.js"; import type { StaticPlan, StaticSocPlan, StaticEnergyPlan, RepeatingPlan } from "./types.js"; -import type { Forecast } from "../../utils/forecast.ts"; +import type { Forecast } from "../../types/evcc.ts"; const ONE_MINUTE = 60 * 1000; export default defineComponent({ diff --git a/assets/js/components/ChargingPlans/PlansSettings.vue b/assets/js/components/ChargingPlans/PlansSettings.vue index ade01e458..504f64175 100644 --- a/assets/js/components/ChargingPlans/PlansSettings.vue +++ b/assets/js/components/ChargingPlans/PlansSettings.vue @@ -88,7 +88,7 @@ import type { StaticEnergyPlan, PlanResponse, } from "./types.js"; -import type { Forecast } from "../../utils/forecast.ts"; +import type { Forecast } from "../../types/evcc.ts"; export default defineComponent({ name: "ChargingPlansSettings", diff --git a/assets/js/components/ChargingPlans/Warnings.vue b/assets/js/components/ChargingPlans/Warnings.vue index 44ad0e872..39284f382 100644 --- a/assets/js/components/ChargingPlans/Warnings.vue +++ b/assets/js/components/ChargingPlans/Warnings.vue @@ -22,7 +22,7 @@ import { defineComponent, type PropType } from "vue"; import formatter from "../../mixins/formatter.js"; import type { PlanWrapper } from "./types.js"; -import type { Tariff } from "assets/js/types/evcc.js"; +import type { Tariff } from "../../types/evcc.js"; export default defineComponent({ name: "ChargingPlanWarnings", diff --git a/assets/js/components/ChargingPlans/types.d.ts b/assets/js/components/ChargingPlans/types.d.ts index 6fed83a5d..4400c0b82 100644 --- a/assets/js/components/ChargingPlans/types.d.ts +++ b/assets/js/components/ChargingPlans/types.d.ts @@ -1,4 +1,4 @@ -import type { Rate } from "assets/js/types/evcc"; +import type { Rate } from "../../types/evcc"; export interface RepeatingPlan { weekdays: number[]; diff --git a/assets/js/components/Energyflow/BatteryIcon.stories.js b/assets/js/components/Energyflow/BatteryIcon.stories.js deleted file mode 100644 index 4093f2bf6..000000000 --- a/assets/js/components/Energyflow/BatteryIcon.stories.js +++ /dev/null @@ -1,34 +0,0 @@ -import BatteryIcon from "./BatteryIcon.vue"; - -export default { - title: "Energyflow/BatteryIcon", - component: BatteryIcon, - parameters: { - layout: "centered", - }, -}; - -const createStory = (args) => { - const story = () => ({ - components: { BatteryIcon }, - setup() { - return { args }; - }, - template: '', - }); - story.args = args; - return story; -}; - -export const Empty = createStory({ soc: 0 }); -export const Soc10 = createStory({ soc: 10 }); -export const Soc20 = createStory({ soc: 20 }); -export const Soc30 = createStory({ soc: 30 }); -export const Soc40 = createStory({ soc: 40 }); -export const Soc50 = createStory({ soc: 50 }); -export const Soc60 = createStory({ soc: 60 }); -export const Soc70 = createStory({ soc: 70 }); -export const Soc80 = createStory({ soc: 80 }); -export const Soc90 = createStory({ soc: 90 }); -export const Hold = createStory({ hold: true }); -export const GridCharge = createStory({ gridCharge: true }); diff --git a/assets/js/components/Energyflow/BatteryIcon.stories.ts b/assets/js/components/Energyflow/BatteryIcon.stories.ts new file mode 100644 index 000000000..9c8d0e67a --- /dev/null +++ b/assets/js/components/Energyflow/BatteryIcon.stories.ts @@ -0,0 +1,58 @@ +import BatteryIcon from "./BatteryIcon.vue"; +import type { Meta, StoryFn } from "@storybook/vue3"; + +export default { + title: "Energyflow/BatteryIcon", + component: BatteryIcon, + parameters: { + layout: "centered", + }, +} as Meta; + +const Template: StoryFn = (args) => { + const story = () => ({ + components: { BatteryIcon }, + setup() { + return { args }; + }, + template: '', + }); + story.args = args; + return story; +}; + +export const Empty = Template.bind({}); +Empty.args = { soc: 0 }; + +export const Soc10 = Template.bind({}); +Soc10.args = { soc: 10 }; + +export const Soc20 = Template.bind({}); +Soc20.args = { soc: 20 }; + +export const Soc30 = Template.bind({}); +Soc30.args = { soc: 30 }; + +export const Soc40 = Template.bind({}); +Soc40.args = { soc: 40 }; + +export const Soc50 = Template.bind({}); +Soc50.args = { soc: 50 }; + +export const Soc60 = Template.bind({}); +Soc60.args = { soc: 60 }; + +export const Soc70 = Template.bind({}); +Soc70.args = { soc: 70 }; + +export const Soc80 = Template.bind({}); +Soc80.args = { soc: 80 }; + +export const Soc90 = Template.bind({}); +Soc90.args = { soc: 90 }; + +export const Hold = Template.bind({}); +Hold.args = { hold: true }; + +export const GridCharge = Template.bind({}); +GridCharge.args = { gridCharge: true }; diff --git a/assets/js/components/Energyflow/BatteryIcon.vue b/assets/js/components/Energyflow/BatteryIcon.vue index 78df10793..e03a7c826 100644 --- a/assets/js/components/Energyflow/BatteryIcon.vue +++ b/assets/js/components/Energyflow/BatteryIcon.vue @@ -19,10 +19,11 @@ - diff --git a/assets/js/components/Energyflow/Energyflow.stories.js b/assets/js/components/Energyflow/Energyflow.stories.js deleted file mode 100644 index d7481728f..000000000 --- a/assets/js/components/Energyflow/Energyflow.stories.js +++ /dev/null @@ -1,215 +0,0 @@ -import Energyflow from "./Energyflow.vue"; - -export default { - title: "Energyflow/Energyflow", - component: Energyflow, -}; - -const Template = (args) => ({ - components: { Energyflow }, - setup() { - return { args }; - }, - template: '', -}); - -export const GridAndPV = Template.bind({}); -GridAndPV.args = { - gridConfigured: true, - pvConfigured: true, - pvPower: 7300, - gridPower: -2300, - homePower: 800, - loadpointsCompact: [ - { power: 1000, icon: "car", charging: true }, - { power: 1000, icon: "bike", charging: true }, - { power: 2200, icon: "car", charging: true }, - ], - tariffGrid: 0.25, - tariffFeedIn: 0.08, - tariffEffectivePrice: 0.08, - smartCostType: "price", - smartCostAvailable: true, - currency: "EUR", - siteTitle: "Home", - pv: [{ power: 5000 }, { power: 2300 }], -}; - -export const BatteryAndGrid = Template.bind({}); -BatteryAndGrid.args = { - gridConfigured: true, - pvConfigured: true, - batteryConfigured: true, - pvPower: 0, - gridPower: 1200, - homePower: 2000, - batteryPower: 800, - batterySoc: 77, - tariffGrid: 0.25, - tariffFeedIn: 0.08, - tariffEffectivePrice: 0.08, - currency: "EUR", - siteTitle: "Home", - battery: [ - { soc: 44.999, capacity: 13.3, power: 350 }, - { soc: 82.3331, capacity: 21, power: 450 }, - ], -}; - -export const BatteryCharging = Template.bind({}); -BatteryCharging.args = { - gridConfigured: true, - pvConfigured: true, - batteryConfigured: true, - pvPower: 5000, - gridPower: -1300, - homePower: 800, - loadpointsCompact: [{ power: 1400, icon: "car", charging: true }], - batteryPower: -1500, - batterySoc: 75, - siteTitle: "Home", -}; - -export const GridPVAndBattery = Template.bind({}); -GridPVAndBattery.args = { - gridConfigured: true, - pvConfigured: true, - batteryConfigured: true, - pvPower: 1000, - gridPower: 700, - homePower: 3300, - batteryPower: 1500, - batterySoc: 30, - siteTitle: "Home", -}; - -export const BatteryThresholds = Template.bind({}); -BatteryThresholds.args = { - gridConfigured: true, - pvConfigured: true, - batteryConfigured: true, - pvPower: 8700, - gridPower: -500, - loadpointsCompact: [ - { power: 5000, icon: "car", charging: true }, - { power: 2500, icon: "bus", charging: true }, - ], - batteryPower: -700, - batterySoc: 95, - siteTitle: "Home", -}; - -export const PVThresholds = Template.bind({}); -PVThresholds.args = { - gridConfigured: true, - pvConfigured: true, - batteryConfigured: true, - pvPower: 300, - gridPower: 6500, - homePower: 1000, - loadpointsCompact: [ - { power: 5000, icon: "car", charging: true }, - { power: 1600, icon: "car", charging: true }, - ], - batteryPower: 800, - batterySoc: 76, - siteTitle: "Home", -}; - -export const GridOnly = Template.bind({}); -GridOnly.args = { - gridConfigured: true, - pvConfigured: true, - batteryConfigured: true, - pvPower: 0, - gridPower: 6500, - homePower: 1000, - loadpointsCompact: [ - { power: 5500, icon: "car", charging: true }, - { power: 0, icon: "car", charging: false }, - { power: 0, icon: "car", charging: false }, - { power: 0, icon: "car", charging: false }, - ], - batteryPower: 0, - batterySoc: 0, - siteTitle: "Home", -}; - -export const LowPower = Template.bind({}); -LowPower.args = { - gridConfigured: true, - pvConfigured: true, - batteryConfigured: true, - pvPower: 700, - gridPower: -300, - homePower: 300, - batteryPower: -100, - batterySoc: 55, - tariffGrid: 0.25, - tariffFeedIn: 0.08, - tariffEffectivePrice: 0.08, - currency: "EUR", - siteTitle: "Home", -}; - -export const CO2 = Template.bind({}); -CO2.args = { - gridConfigured: true, - pvConfigured: true, - pvPower: 7300, - gridPower: -2300, - homePower: 800, - loadpointsCompact: [ - { power: 1000, icon: "car", charging: true }, - { power: 1000, icon: "car", charging: true }, - { power: 2200, icon: "car", charging: true }, - ], - tariffGrid: 0.25, - tariffFeedIn: 0.08, - tariffEffectivePrice: 0.08, - tariffCo2: 723, - tariffEffectiveCo2: 0, - smartCostType: "co2", - smartCostAvailable: true, - currency: "EUR", - siteTitle: "Home", - pv: [{ power: 5000 }, { power: 2300 }], -}; - -export const UnknownInput = Template.bind({}); -UnknownInput.args = { - gridConfigured: true, - pvConfigured: true, - pvPower: 2000, - gridPower: -2000, - loadpointsCompact: [{ power: 1000, icon: "car", charging: true }], -}; - -export const UnknownInputFill = Template.bind({}); -UnknownInputFill.args = { - gridConfigured: true, - pvConfigured: true, - batteryConfigured: true, - pvPower: 500, - gridPower: 0, - batteryPower: -1000, - loadpointsCompact: [], -}; - -export const UnknownOutput = Template.bind({}); -UnknownOutput.args = { - gridConfigured: true, - pvConfigured: true, - pvPower: 3000, - gridPower: -1000, - loadpointsCompact: [{ power: 1700, icon: "car", charging: true }], -}; - -export const UnknownOutputLessThan10Percent = Template.bind({}); -UnknownOutputLessThan10Percent.args = { - gridConfigured: true, - pvConfigured: true, - pvPower: 3000, - gridPower: -1000, - loadpointsCompact: [{ power: 1800, icon: "car", charging: true }], -}; diff --git a/assets/js/components/Energyflow/Energyflow.stories.ts b/assets/js/components/Energyflow/Energyflow.stories.ts new file mode 100644 index 000000000..71309fa71 --- /dev/null +++ b/assets/js/components/Energyflow/Energyflow.stories.ts @@ -0,0 +1,201 @@ +import type { Meta, StoryFn } from "@storybook/vue3"; +import Energyflow from "./Energyflow.vue"; +import { CURRENCY } from "../../types/evcc"; + +export default { + title: "Energyflow/Energyflow", + component: Energyflow, +} as Meta; + +const Template: StoryFn = (args) => ({ + components: { Energyflow }, + setup() { + return { args }; + }, + template: '', +}); + +export const GridAndPV = Template.bind({}); +GridAndPV.args = { + gridConfigured: true, + pvConfigured: true, + pvPower: 7300, + gridPower: -2300, + homePower: 800, + loadpointsCompact: [ + { power: 1000, icon: "car", charging: true, title: "Garage" }, + { power: 1000, icon: "bike", charging: true, title: "Garage" }, + { power: 2200, icon: "car", charging: true, title: "Garage" }, + ], + tariffGrid: 0.25, + tariffFeedIn: 0.08, + smartCostType: "price", + currency: CURRENCY.EUR, + pv: [{ power: 5000 }, { power: 2300 }], +}; + +export const BatteryAndGrid = Template.bind({}); +BatteryAndGrid.args = { + gridConfigured: true, + pvConfigured: true, + batteryConfigured: true, + pvPower: 0, + gridPower: 1200, + homePower: 2000, + batteryPower: 800, + batterySoc: 77, + tariffGrid: 0.25, + tariffFeedIn: 0.08, + currency: CURRENCY.EUR, + battery: [ + { soc: 44.999, capacity: 13.3, power: 350, controllable: true }, + { soc: 82.3331, capacity: 21, power: 450, controllable: false }, + ], +}; + +export const BatteryCharging = Template.bind({}); +BatteryCharging.args = { + gridConfigured: true, + pvConfigured: true, + batteryConfigured: true, + pvPower: 5000, + gridPower: -1300, + homePower: 800, + loadpointsCompact: [{ power: 1400, icon: "car", charging: true, title: "Garage" }], + batteryPower: -1500, + batterySoc: 75, +}; + +export const GridPVAndBattery = Template.bind({}); +GridPVAndBattery.args = { + gridConfigured: true, + pvConfigured: true, + batteryConfigured: true, + pvPower: 1000, + gridPower: 700, + homePower: 3300, + batteryPower: 1500, + batterySoc: 30, +}; + +export const BatteryThresholds = Template.bind({}); +BatteryThresholds.args = { + gridConfigured: true, + pvConfigured: true, + batteryConfigured: true, + pvPower: 8700, + gridPower: -500, + loadpointsCompact: [ + { power: 5000, icon: "car", charging: true, title: "Garage" }, + { power: 2500, icon: "bus", charging: true, title: "Garage" }, + ], + batteryPower: -700, + batterySoc: 95, +}; + +export const PVThresholds = Template.bind({}); +PVThresholds.args = { + gridConfigured: true, + pvConfigured: true, + batteryConfigured: true, + pvPower: 300, + gridPower: 6500, + homePower: 1000, + loadpointsCompact: [ + { power: 5000, icon: "car", charging: true, title: "Garage" }, + { power: 1600, icon: "car", charging: true, title: "Garage" }, + ], + batteryPower: 800, + batterySoc: 76, +}; + +export const GridOnly = Template.bind({}); +GridOnly.args = { + gridConfigured: true, + pvConfigured: true, + batteryConfigured: true, + pvPower: 0, + gridPower: 6500, + homePower: 1000, + loadpointsCompact: [ + { power: 5500, icon: "car", charging: true, title: "Garage" }, + { power: 0, icon: "car", charging: false, title: "Garage" }, + { power: 0, icon: "car", charging: false, title: "Garage" }, + { power: 0, icon: "car", charging: false, title: "Garage" }, + ], + batteryPower: 0, + batterySoc: 0, +}; + +export const LowPower = Template.bind({}); +LowPower.args = { + gridConfigured: true, + pvConfigured: true, + batteryConfigured: true, + pvPower: 700, + gridPower: -300, + homePower: 300, + batteryPower: -100, + batterySoc: 55, + tariffGrid: 0.25, + tariffFeedIn: 0.08, + currency: CURRENCY.EUR, +}; + +export const CO2 = Template.bind({}); +CO2.args = { + gridConfigured: true, + pvConfigured: true, + pvPower: 7300, + gridPower: -2300, + homePower: 800, + loadpointsCompact: [ + { power: 1000, icon: "car", charging: true, title: "Garage" }, + { power: 1000, icon: "car", charging: true, title: "Garage" }, + { power: 2200, icon: "car", charging: true, title: "Garage" }, + ], + tariffGrid: 0.25, + tariffFeedIn: 0.08, + tariffCo2: 723, + smartCostType: "co2", + currency: CURRENCY.EUR, + pv: [{ power: 5000 }, { power: 2300 }], +}; + +export const UnknownInput = Template.bind({}); +UnknownInput.args = { + gridConfigured: true, + pvConfigured: true, + pvPower: 2000, + gridPower: -2000, + loadpointsCompact: [{ power: 1000, icon: "car", charging: true, title: "Garage" }], +}; + +export const UnknownInputFill = Template.bind({}); +UnknownInputFill.args = { + gridConfigured: true, + pvConfigured: true, + batteryConfigured: true, + pvPower: 500, + gridPower: 0, + batteryPower: -1000, + loadpointsCompact: [], +}; + +export const UnknownOutput = Template.bind({}); +UnknownOutput.args = { + gridConfigured: true, + pvConfigured: true, + pvPower: 3000, + gridPower: -1000, + loadpointsCompact: [{ power: 1700, icon: "car", charging: true, title: "Garage" }], +}; + +export const UnknownOutputLessThan10Percent = Template.bind({}); +UnknownOutputLessThan10Percent.args = { + gridConfigured: true, + pvConfigured: true, + pvPower: 3000, + gridPower: -1000, + loadpointsCompact: [{ power: 1800, icon: "car", charging: true, title: "Garage" }], +}; diff --git a/assets/js/components/Energyflow/Energyflow.vue b/assets/js/components/Energyflow/Energyflow.vue index f986f715b..e58f3e9f3 100644 --- a/assets/js/components/Energyflow/Energyflow.vue +++ b/assets/js/components/Energyflow/Energyflow.vue @@ -94,7 +94,7 @@ @details-clicked="openForecastModal" @toggle="togglePv" > -