diff --git a/CODEOWNERS b/CODEOWNERS index 34d22c20d53..0ae04f10b1c 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -10,6 +10,7 @@ # Pages source/_integrations/3_day_blinds.markdown @starkillerOG source/_integrations/abode.markdown @shred86 +source/_integrations/acaia.markdown @zweckj source/_integrations/accuweather.markdown @bieniu source/_integrations/acmeda.markdown @atmurray source/_integrations/acomax.markdown @starkillerOG @@ -288,7 +289,7 @@ source/_integrations/fortios.markdown @kimfrellsen source/_integrations/foscam.markdown @krmarien source/_integrations/freebox.markdown @hacf-fr @Quentame source/_integrations/freedompro.markdown @stefano055415 -source/_integrations/fritz.markdown @mammuth @AaronDavidSchneider @chemelli74 @mib1185 +source/_integrations/fritz.markdown @AaronDavidSchneider @chemelli74 @mib1185 source/_integrations/fritzbox.markdown @mib1185 @flabbamann source/_integrations/fritzbox_callmonitor.markdown @cdce8p source/_integrations/fronius.markdown @farmio @@ -314,6 +315,7 @@ source/_integrations/geonetnz_volcano.markdown @exxamalte source/_integrations/gios.markdown @bieniu source/_integrations/github.markdown @timmo001 @ludeeus source/_integrations/glances.markdown @engrbm87 +source/_integrations/go2rtc.markdown @home-assistant/core source/_integrations/goalzero.markdown @tkdrob source/_integrations/gogogate2.markdown @vangorra source/_integrations/goodwe.markdown @mletenay @starkillerOG @@ -334,7 +336,7 @@ source/_integrations/gree.markdown @cmroche source/_integrations/greeneye_monitor.markdown @jkeljo source/_integrations/group.markdown @home-assistant/core source/_integrations/guardian.markdown @bachya -source/_integrations/habitica.markdown @ASMfreaK @leikoilja @tr4nt0r +source/_integrations/habitica.markdown @tr4nt0r source/_integrations/hardware.markdown @home-assistant/core source/_integrations/harmony.markdown @ehendrix23 @bdraco @mkeesey @Aohzan source/_integrations/hassio.markdown @home-assistant/supervisor @@ -377,6 +379,7 @@ source/_integrations/humidifier.markdown @home-assistant/core @Shulyaka source/_integrations/hunterdouglas_powerview.markdown @bdraco @kingy444 @trullock source/_integrations/hurrican_shutters_wholesale.markdown @starkillerOG source/_integrations/husqvarna_automower.markdown @Thomas55555 +source/_integrations/husqvarna_automower_ble.markdown @alistair23 source/_integrations/huum.markdown @frwickst source/_integrations/hvv_departures.markdown @vigonotion source/_integrations/hydrawise.markdown @dknowles2 @thomaskistler @ptcryan @@ -466,6 +469,7 @@ source/_integrations/legrand.markdown @cgtobi source/_integrations/lektrico.markdown @lektrico source/_integrations/leviton_z_wave.markdown @home-assistant/z-wave source/_integrations/lg_netcast.markdown @Drafteed @splinter98 +source/_integrations/lg_thinq.markdown @LG-ThinQ-Integration source/_integrations/lidarr.markdown @tkdrob source/_integrations/lifx.markdown @Djelibeybi source/_integrations/light.markdown @home-assistant/core @@ -549,7 +553,7 @@ source/_integrations/mystrom.markdown @fabaff source/_integrations/myuplink.markdown @pajzo @astrandb source/_integrations/nam.markdown @bieniu source/_integrations/nanoleaf.markdown @milanmeu @joostlek -source/_integrations/neato.markdown @Santobert +source/_integrations/nasweb.markdown @nasWebio source/_integrations/nederlandse_spoorwegen.markdown @YarmoM source/_integrations/ness_alarm.markdown @nickw444 source/_integrations/nest.markdown @allenporter @@ -573,6 +577,7 @@ source/_integrations/nissan_leaf.markdown @filcole source/_integrations/nmbs.markdown @thibmaek source/_integrations/noaa_tides.markdown @jdelaney72 source/_integrations/nobo_hub.markdown @echoromeo @oyvindwe +source/_integrations/nordpool.markdown @gjohansson-ST source/_integrations/notify.markdown @home-assistant/core source/_integrations/notify_events.markdown @matrozov @papajojo source/_integrations/notion.markdown @bachya @@ -712,7 +717,6 @@ source/_integrations/roomba.markdown @pschmitt @cyr-ius @shenxn @Orhideous source/_integrations/roon.markdown @pavoni source/_integrations/rpi_power.markdown @shenxn @swetoast source/_integrations/rss_feed_template.markdown @home-assistant/core -source/_integrations/rtsp_to_webrtc.markdown @allenporter source/_integrations/ruckus_unleashed.markdown @lanrat @ms264556 @gabe565 source/_integrations/russound_rio.markdown @noahhusby source/_integrations/ruuvi_gateway.markdown @akx @@ -765,6 +769,7 @@ source/_integrations/sinch.markdown @bendikrb source/_integrations/siren.markdown @home-assistant/core @raman325 source/_integrations/sisyphus.markdown @jkeljo source/_integrations/sky_hub.markdown @rogerselwyn +source/_integrations/sky_remote.markdown @dunnmj @saty9 source/_integrations/skybell.markdown @tkdrob source/_integrations/slack.markdown @tkdrob @fletcherau source/_integrations/sleepiq.markdown @mfugate1 @kbickar @@ -848,7 +853,7 @@ source/_integrations/tautulli.markdown @ludeeus @tkdrob source/_integrations/technove.markdown @Moustachauve source/_integrations/tedee.markdown @patrickhilker @zweckj source/_integrations/tellduslive.markdown @fredrike -source/_integrations/template.markdown @PhracturedBlue @tetienne @home-assistant/core +source/_integrations/template.markdown @PhracturedBlue @home-assistant/core source/_integrations/tesla_fleet.markdown @Bre77 source/_integrations/tesla_wall_connector.markdown @einarhauks source/_integrations/teslemetry.markdown @Bre77 @@ -895,6 +900,7 @@ source/_integrations/ukraine_alarm.markdown @PaulAnnekov source/_integrations/unifi.markdown @Kane610 source/_integrations/unifi_direct.markdown @tofuSCHNITZEL source/_integrations/unifiled.markdown @florisvdk +source/_integrations/unifiprotect.markdown @RaHehl source/_integrations/upb.markdown @gwww source/_integrations/upc_connect.markdown @pvizeli @fabaff source/_integrations/upcloud.markdown @scop diff --git a/Gemfile b/Gemfile index e3070db77ee..7020f561721 100644 --- a/Gemfile +++ b/Gemfile @@ -10,8 +10,8 @@ group :development do gem 'stringex', '2.8.6' # > 2.1.0 causes slowdowns https://github.com/sass/sassc-ruby/issues/189 gem 'sassc', '2.1.0' - gem 'sass-embedded', '1.81.0' - gem 'rubocop', '1.69.0' + gem 'sass-embedded', '1.83.0' + gem 'rubocop', '1.69.2' gem 'ruby-lsp', '0.22.1' gem 'rackup', '2.2.1' end @@ -24,7 +24,7 @@ group :jekyll_plugins do end gem 'sinatra', '4.1.1' -gem 'nokogiri', '1.16.7' +gem 'nokogiri', '1.17.2' # Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem # and associated library diff --git a/Gemfile.lock b/Gemfile.lock index 9ea94ce523b..f5b3458f2e6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -29,10 +29,10 @@ GEM ffi (1.17.0-arm64-darwin) ffi (1.17.0-x86_64-linux-gnu) forwardable-extended (2.6.0) - google-protobuf (4.29.0-arm64-darwin) + google-protobuf (4.29.1-arm64-darwin) bigdecimal rake (>= 13) - google-protobuf (4.29.0-x86_64-linux) + google-protobuf (4.29.1-x86_64-linux) bigdecimal rake (>= 13) http_parser.rb (0.8.0) @@ -66,7 +66,7 @@ GEM nokogiri (~> 1.12) jekyll-watch (2.2.1) listen (~> 3.0) - json (2.8.2) + json (2.9.0) kramdown (2.5.1) rexml (>= 3.3.9) kramdown-parser-gfm (1.1.0) @@ -76,14 +76,14 @@ GEM listen (3.9.0) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) - logger (1.6.1) + logger (1.6.3) mercenary (0.4.0) multi_json (1.15.0) mustermann (3.0.3) ruby2_keywords (~> 0.0.1) - nokogiri (1.16.7-arm64-darwin) + nokogiri (1.17.2-arm64-darwin) racc (~> 1.4) - nokogiri (1.16.7-x86_64-linux) + nokogiri (1.17.2-x86_64-linux) racc (~> 1.4) parallel (1.26.3) parser (3.3.6.0) @@ -108,22 +108,22 @@ GEM rb-fsevent (0.11.2) rb-inotify (0.11.1) ffi (~> 1.0) - rbs (3.6.1) + rbs (3.7.0) logger - regexp_parser (2.9.2) - rexml (3.3.9) + regexp_parser (2.9.3) + rexml (3.4.0) rouge (4.5.1) - rubocop (1.69.0) + rubocop (1.69.2) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) - regexp_parser (>= 2.4, < 3.0) - rubocop-ast (>= 1.36.1, < 2.0) + regexp_parser (>= 2.9.3, < 3.0) + rubocop-ast (>= 1.36.2, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 4.0) - rubocop-ast (1.36.2) + rubocop-ast (1.37.0) parser (>= 3.3.1.0) ruby-lsp (0.22.1) language_server-protocol (~> 3.17.0) @@ -134,9 +134,9 @@ GEM ruby2_keywords (0.0.5) safe_yaml (1.0.5) sass (3.4.25) - sass-embedded (1.81.0-arm64-darwin) + sass-embedded (1.83.0-arm64-darwin) google-protobuf (~> 4.28) - sass-embedded (1.81.0-x86_64-linux-gnu) + sass-embedded (1.83.0-x86_64-linux-gnu) google-protobuf (~> 4.28) sass-globbing (1.1.5) sass (>= 3.1) @@ -151,7 +151,7 @@ GEM rack-protection (= 4.1.1) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) - sorbet-runtime (0.5.11670) + sorbet-runtime (0.5.11694) stringex (2.8.6) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) @@ -161,7 +161,7 @@ GEM tzinfo-data (1.2024.2) tzinfo (>= 1.0.0) unicode-display_width (2.6.0) - webrick (1.9.0) + webrick (1.9.1) PLATFORMS arm64-darwin-23 @@ -174,12 +174,12 @@ DEPENDENCIES jekyll-paginate (= 1.1.0) jekyll-sitemap (= 1.4.0) jekyll-toc (= 0.19.0) - nokogiri (= 1.16.7) + nokogiri (= 1.17.2) rackup (= 2.2.1) rake (= 13.2.1) - rubocop (= 1.69.0) + rubocop (= 1.69.2) ruby-lsp (= 0.22.1) - sass-embedded (= 1.81.0) + sass-embedded (= 1.83.0) sass-globbing (= 1.1.5) sassc (= 2.1.0) sinatra (= 4.1.1) diff --git a/_config.yml b/_config.yml index d0a1062a21a..e187cd1b1cd 100644 --- a/_config.yml +++ b/_config.yml @@ -107,9 +107,9 @@ social: # Home Assistant release details current_major_version: 2024 -current_minor_version: 11 +current_minor_version: 12 current_patch_version: 3 -date_released: 2024-11-22 +date_released: 2024-12-13 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. @@ -221,7 +221,7 @@ toc: installation: container: "ghcr.io/home-assistant/home-assistant" versions: - python: "3.12" + python: "3.13" types: odroid: board: ODROID diff --git a/package-lock.json b/package-lock.json index 9c831732bf4..f3f4f98e859 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "remark-lint-prohibited-strings": "^4.0.0", "remark-lint-unordered-list-marker-style": "^4.0.0", "remark-stringify": "^11.0.0", - "textlint": "^14.3.0", + "textlint": "^14.4.0", "textlint-filter-rule-comments": "^1.2.2", "textlint-rule-common-misspellings": "^1.0.1", "textlint-rule-terminology": "^5.0.13" @@ -416,66 +416,66 @@ "dev": true }, "node_modules/@textlint/ast-tester": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-14.3.0.tgz", - "integrity": "sha512-K1TbF1Kko1XAKCWuFY/TkZO521ZWv2DAHu4JYsqqY/PnqqySHZorjSG78EfYBhkVq1E3ktprlAJmp8GNmpoYWQ==", + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-14.4.0.tgz", + "integrity": "sha512-pCKEUDaZVvvj/uZOTTUgU1tTkNsK+ufNs4Xx5BsBAqy+E0aAJJ47c8h2WIoL/MJniK6ZLctsDIwaZ4z9rUvrsQ==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^14.3.0", + "@textlint/ast-node-types": "^14.4.0", "debug": "^4.3.4" } }, "node_modules/@textlint/ast-tester/node_modules/@textlint/ast-node-types": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.3.0.tgz", - "integrity": "sha512-baDgKcA8MeO55I2+LNc9FTAJ/aUKlxN6DgM5B511tT9kDwECXRk+iYi/H+oaP25z5Zq3FqrL6n7mmyfFWDUWkQ==", + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.0.tgz", + "integrity": "sha512-tEZbu6dMU8lysTpFrrW9WzN/hWnfGoanOX1WmdKZ7LgqUVDdsd9Q8RNLlQLOgl7ev1C7O3T4ruzl4rdYI5he1g==", "dev": true }, "node_modules/@textlint/ast-traverse": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-14.3.0.tgz", - "integrity": "sha512-1YA5M2T+KeIHC0br5FwhkTwuLEUxkf5K5QtXJmXSF0Mf06ZlLfZ44RMlKYD3ElmzG+TmpmFdKIs4FzFSJRtslw==", + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-14.4.0.tgz", + "integrity": "sha512-P6UrqKlXd9Lm0kJ1O8vyQU0/btXULiUHhE5nLZMnTNfgZYG3VasQ9BUyDHJn19O4PhUrIzZJusMi1XFcb3Y46Q==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^14.3.0" + "@textlint/ast-node-types": "^14.4.0" } }, "node_modules/@textlint/ast-traverse/node_modules/@textlint/ast-node-types": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.3.0.tgz", - "integrity": "sha512-baDgKcA8MeO55I2+LNc9FTAJ/aUKlxN6DgM5B511tT9kDwECXRk+iYi/H+oaP25z5Zq3FqrL6n7mmyfFWDUWkQ==", + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.0.tgz", + "integrity": "sha512-tEZbu6dMU8lysTpFrrW9WzN/hWnfGoanOX1WmdKZ7LgqUVDdsd9Q8RNLlQLOgl7ev1C7O3T4ruzl4rdYI5he1g==", "dev": true }, "node_modules/@textlint/config-loader": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-14.3.0.tgz", - "integrity": "sha512-z7g3dArU7EhWHHy0lvMDQF+6TWDppvqkXh7J6YRTXnq00ftEC1MbHGfrsZNJF1av6rBJ8r8nquKyCoeYZBz7cw==", + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-14.4.0.tgz", + "integrity": "sha512-TCYVhQ+wP/Gs7P5BDAfyRpLJ5tohicTSwQapd/xPjByXFtGx8xlsbLQHTWcodFFpty1O57KRPRsRDhvuTAA2bQ==", "dev": true, "dependencies": { - "@textlint/kernel": "^14.3.0", - "@textlint/module-interop": "^14.3.0", - "@textlint/resolver": "^14.3.0", - "@textlint/types": "^14.3.0", - "@textlint/utils": "^14.3.0", + "@textlint/kernel": "^14.4.0", + "@textlint/module-interop": "^14.4.0", + "@textlint/resolver": "^14.4.0", + "@textlint/types": "^14.4.0", + "@textlint/utils": "^14.4.0", "debug": "^4.3.4", "rc-config-loader": "^4.1.3" } }, "node_modules/@textlint/feature-flag": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-14.3.0.tgz", - "integrity": "sha512-wWKbyHpmwxEEcyoBMd2u6GB5bw7vJ2a68HmBRknUABFL7vvp8JAzf4D/I2cLXgV06OoMbWE+hnV2CInayJiCpA==", + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-14.4.0.tgz", + "integrity": "sha512-aSphE9jw4QTjiCOe1tbtZ2NZpMRbYoUTi2E62KQ/mcVnwGC+Jk671wNSoUJzR/YNaLo63cQ7OKhHrBEb55t+Iw==", "dev": true }, "node_modules/@textlint/fixer-formatter": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-14.3.0.tgz", - "integrity": "sha512-xbSH4vb1wdjJngHxpfBu65Y+uTZdU/w0b7Hd6TJ7Q5FaZD1pftyUHGisLMN+xX3V56t28e+qAkSBTQ4Mq4UdYQ==", + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-14.4.0.tgz", + "integrity": "sha512-DijDPVZgHkHKAEsYVXFZaP0TJGLDtirok/hgi1N1N3MW5ZtQpIHOW8DgKaJcmDZvPQjkTxzBaUp8rzBxHG8MaQ==", "dev": true, "dependencies": { - "@textlint/module-interop": "^14.3.0", - "@textlint/resolver": "^14.3.0", - "@textlint/types": "^14.3.0", + "@textlint/module-interop": "^14.4.0", + "@textlint/resolver": "^14.4.0", + "@textlint/types": "^14.4.0", "chalk": "^4.1.2", "debug": "^4.3.4", "diff": "^5.2.0", @@ -485,40 +485,40 @@ } }, "node_modules/@textlint/kernel": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-14.3.0.tgz", - "integrity": "sha512-RLkIJjP+GtrLmjLtAYSCORKF55z5wtw2E9Vb4h3RSQLjzYopQ3s9N1LbUwLJDr8tz0AphtOb6t1efF3d+NIemw==", + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-14.4.0.tgz", + "integrity": "sha512-zH19vQ0ns4n8kPr+csjPnV5yPip6gKs08GvDJBQlX3AEbRQkaSw4H5kBCE+R0D9qDkuqt7xe8Z8Tdm7E7aUvGw==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^14.3.0", - "@textlint/ast-tester": "^14.3.0", - "@textlint/ast-traverse": "^14.3.0", - "@textlint/feature-flag": "^14.3.0", - "@textlint/source-code-fixer": "^14.3.0", - "@textlint/types": "^14.3.0", - "@textlint/utils": "^14.3.0", + "@textlint/ast-node-types": "^14.4.0", + "@textlint/ast-tester": "^14.4.0", + "@textlint/ast-traverse": "^14.4.0", + "@textlint/feature-flag": "^14.4.0", + "@textlint/source-code-fixer": "^14.4.0", + "@textlint/types": "^14.4.0", + "@textlint/utils": "^14.4.0", "debug": "^4.3.4", "fast-equals": "^4.0.3", "structured-source": "^4.0.0" } }, "node_modules/@textlint/kernel/node_modules/@textlint/ast-node-types": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.3.0.tgz", - "integrity": "sha512-baDgKcA8MeO55I2+LNc9FTAJ/aUKlxN6DgM5B511tT9kDwECXRk+iYi/H+oaP25z5Zq3FqrL6n7mmyfFWDUWkQ==", + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.0.tgz", + "integrity": "sha512-tEZbu6dMU8lysTpFrrW9WzN/hWnfGoanOX1WmdKZ7LgqUVDdsd9Q8RNLlQLOgl7ev1C7O3T4ruzl4rdYI5he1g==", "dev": true }, "node_modules/@textlint/linter-formatter": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-14.3.0.tgz", - "integrity": "sha512-9Rzq0y9Qi6L43To9GIUd1kh/7Pq202qU9nQ15atyK5BlvPFlzJnc98X/hCE1tN+uDriZnxu4v4Vs7+mHFT9VPw==", + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-14.4.0.tgz", + "integrity": "sha512-rnFwSSXDdsQHGVaRoJJYocVSYn4ZEPUFj78JYDZcR+TRYVDzRJEblFhwsiXl/gHD3L5g2RnBcLbxwZIW+xwtIA==", "dev": true, "dependencies": { "@azu/format-text": "^1.0.2", "@azu/style-format": "^1.0.1", - "@textlint/module-interop": "^14.3.0", - "@textlint/resolver": "^14.3.0", - "@textlint/types": "^14.3.0", + "@textlint/module-interop": "^14.4.0", + "@textlint/resolver": "^14.4.0", + "@textlint/types": "^14.4.0", "chalk": "^4.1.2", "debug": "^4.3.4", "js-yaml": "^3.14.1", @@ -531,12 +531,12 @@ } }, "node_modules/@textlint/markdown-to-ast": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-14.3.0.tgz", - "integrity": "sha512-z4UMKFh3r5KtylPt5OO6su7DScU+fMZ7Qv5LTrJNaOqcmOzFho64Y1I26BJv86f8BC+MUYP0kza5MZGaR2LYQA==", + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-14.4.0.tgz", + "integrity": "sha512-y6UxfRZ00w8XQ1jfKhR0jcQd7qbYaQgo3aERWbJR0Gxxl0T+G+TKBS12pdnUFOTshgSTEgqlvrE+Zt3lTl0e1A==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^14.3.0", + "@textlint/ast-node-types": "^14.4.0", "debug": "^4.3.4", "mdast-util-gfm-autolink-literal": "^0.1.3", "neotraverse": "^0.6.15", @@ -548,9 +548,9 @@ } }, "node_modules/@textlint/markdown-to-ast/node_modules/@textlint/ast-node-types": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.3.0.tgz", - "integrity": "sha512-baDgKcA8MeO55I2+LNc9FTAJ/aUKlxN6DgM5B511tT9kDwECXRk+iYi/H+oaP25z5Zq3FqrL6n7mmyfFWDUWkQ==", + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.0.tgz", + "integrity": "sha512-tEZbu6dMU8lysTpFrrW9WzN/hWnfGoanOX1WmdKZ7LgqUVDdsd9Q8RNLlQLOgl7ev1C7O3T4ruzl4rdYI5he1g==", "dev": true }, "node_modules/@textlint/markdown-to-ast/node_modules/bail": { @@ -780,79 +780,79 @@ } }, "node_modules/@textlint/module-interop": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.3.0.tgz", - "integrity": "sha512-Adxkx8GSFVPhCZiveTD/u66f5T3W6yIlPUsKi7ZLar7ahYI/D4P/XfA0RNhgMF3xM4uw+vNrer2LcY4KY7cUfw==", + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.4.0.tgz", + "integrity": "sha512-QdtNDJc+XqDIbP9bwt7DryqE+vFbbIB28462VFWtXcHCJJoFTlmCJ1133SXLe14IOT9P04T9LMNhgv4d2v31gg==", "dev": true }, "node_modules/@textlint/resolver": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-14.3.0.tgz", - "integrity": "sha512-v17n8eUJPNaE9SblemmEnAeIcGHBfn/hEMuZe0iSl3hLyJueDM7zP3GP54FoWyuTIMyQqPt21l6+48+BjJ9tfQ==", + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-14.4.0.tgz", + "integrity": "sha512-4jNO6Lbyiqtf22205XPpSYG4BNCZrvpmLzO2JUpYMe5C5g0z4l06Yqei3gJWYjdBLlL+fIxDcdW0hyIvvSFpUg==", "dev": true }, "node_modules/@textlint/source-code-fixer": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-14.3.0.tgz", - "integrity": "sha512-KJJoiN1Ha9R6tJrg3KHnYkq0s86D53PUjYxxCYJxo9Q8yTcXx+aXPspvgW+qGD+qcQxjarqbLl6m8uRlbyrg3Q==", + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-14.4.0.tgz", + "integrity": "sha512-S2QBZ3pUQQeH01kgfKa1Tmusz0A2/sm3QkW1Uhag9x5v5OKYC4W3070eliY+p0I88nxmqy72M/j+78sDutUcuw==", "dev": true, "dependencies": { - "@textlint/types": "^14.3.0", + "@textlint/types": "^14.4.0", "debug": "^4.3.4" } }, "node_modules/@textlint/text-to-ast": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-14.3.0.tgz", - "integrity": "sha512-wCjJmpwlff/wPsGaECBbNn0hPfiCnbr4mPJKFE59M3aeISoH3zqITCx9RCVPBYbYHzqTWmHPNLYI7egVIbZgrA==", + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-14.4.0.tgz", + "integrity": "sha512-MA3z7cksYpjXRPIFFcbB6CM5UbNFD53GJ823qo74ImU2MRlIrs9dcR9yQ76YxbYZ9OazPzUNGg5AS9tbp3Exbg==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^14.3.0" + "@textlint/ast-node-types": "^14.4.0" } }, "node_modules/@textlint/text-to-ast/node_modules/@textlint/ast-node-types": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.3.0.tgz", - "integrity": "sha512-baDgKcA8MeO55I2+LNc9FTAJ/aUKlxN6DgM5B511tT9kDwECXRk+iYi/H+oaP25z5Zq3FqrL6n7mmyfFWDUWkQ==", + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.0.tgz", + "integrity": "sha512-tEZbu6dMU8lysTpFrrW9WzN/hWnfGoanOX1WmdKZ7LgqUVDdsd9Q8RNLlQLOgl7ev1C7O3T4ruzl4rdYI5he1g==", "dev": true }, "node_modules/@textlint/textlint-plugin-markdown": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-14.3.0.tgz", - "integrity": "sha512-0lyYK/SUOgww+sxBtvjjsinHKMvFZUpLKvxCepymGlTyuOTYo7QmjmfhLc5G97PChOpUG41dpQoZt9miohQT1A==", + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-14.4.0.tgz", + "integrity": "sha512-J6RoZSC7MOr9WYqyG4s1BZxExiHfS6fMmiQuWGJB133vDDrY+wmiaFm/C6Li59YPdPivddxSDo7v8z2zyayW1A==", "dev": true, "dependencies": { - "@textlint/markdown-to-ast": "^14.3.0" + "@textlint/markdown-to-ast": "^14.4.0" } }, "node_modules/@textlint/textlint-plugin-text": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-14.3.0.tgz", - "integrity": "sha512-XpgyWTy2CqoKGuBrEsBJOVJqoXREAB6RFjPaa5bHvdvjwzU+EFqCNR9RXXs3Iov1ip/AaXDz/JeB4IYk6zj8GQ==", + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-14.4.0.tgz", + "integrity": "sha512-ut3+MhOh9taPUKLaTT4nyil3MLnAbo60BYGWIz6cPrv3YMyvN/eCw4jW4VscvV1WTik19lzmDCBfSpfnmz/PiA==", "dev": true, "dependencies": { - "@textlint/text-to-ast": "^14.3.0" + "@textlint/text-to-ast": "^14.4.0" } }, "node_modules/@textlint/types": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.3.0.tgz", - "integrity": "sha512-zvPCQUpK1hOQA6Bg4XLYvKbOvFcQT65Nm25wsDdOGRgOvZbUzA+DJkiaH9Z8DAaJx83tTknIeLl4qwu97Hw1Ew==", + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.4.0.tgz", + "integrity": "sha512-ZxZkiFxaXfjoaa/gzbGyUWR0mSMLChDaQrYJ0sPToCQ0QXUG3w5sIT2hCGZyBfNRc8/g0eH+KbDejD014oBPBQ==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^14.3.0" + "@textlint/ast-node-types": "^14.4.0" } }, "node_modules/@textlint/types/node_modules/@textlint/ast-node-types": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.3.0.tgz", - "integrity": "sha512-baDgKcA8MeO55I2+LNc9FTAJ/aUKlxN6DgM5B511tT9kDwECXRk+iYi/H+oaP25z5Zq3FqrL6n7mmyfFWDUWkQ==", + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.0.tgz", + "integrity": "sha512-tEZbu6dMU8lysTpFrrW9WzN/hWnfGoanOX1WmdKZ7LgqUVDdsd9Q8RNLlQLOgl7ev1C7O3T4ruzl4rdYI5he1g==", "dev": true }, "node_modules/@textlint/utils": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-14.3.0.tgz", - "integrity": "sha512-Q7bKiPobKCDXM5z+xByLZzSjcOBhvlDufQGHNgHR8EFie2/AFc68cN8RYCY0MmwCMBMuHuYaOzfIOpQpK9oTcQ==", + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-14.4.0.tgz", + "integrity": "sha512-/5QSdYa042z0SX+10+UPzHlMT2nWuRBkouf90/P60nycpFmWn0waIbVoARDlekzmaqB4BitbP7NGjjPmEju4bA==", "dev": true }, "node_modules/@types/concat-stream": { @@ -6036,24 +6036,24 @@ "dev": true }, "node_modules/textlint": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/textlint/-/textlint-14.3.0.tgz", - "integrity": "sha512-oarGVGz7KwRd08QOvNDSffzjEyfS5mnGp7ZAxr799QC0HDBp0VM358WGyxdaboDXav1RlkQ3TWkvOvHBBMXCXw==", + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/textlint/-/textlint-14.4.0.tgz", + "integrity": "sha512-OutNGN573fI48bRdikgz+PAjCN/P4DRK9dLGxkNkqBlWmwbxLpvBxw1qspZEFVVLoNH94ra65NDfCwMvCosvdA==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^14.3.0", - "@textlint/ast-traverse": "^14.3.0", - "@textlint/config-loader": "^14.3.0", - "@textlint/feature-flag": "^14.3.0", - "@textlint/fixer-formatter": "^14.3.0", - "@textlint/kernel": "^14.3.0", - "@textlint/linter-formatter": "^14.3.0", - "@textlint/module-interop": "^14.3.0", - "@textlint/resolver": "^14.3.0", - "@textlint/textlint-plugin-markdown": "^14.3.0", - "@textlint/textlint-plugin-text": "^14.3.0", - "@textlint/types": "^14.3.0", - "@textlint/utils": "^14.3.0", + "@textlint/ast-node-types": "^14.4.0", + "@textlint/ast-traverse": "^14.4.0", + "@textlint/config-loader": "^14.4.0", + "@textlint/feature-flag": "^14.4.0", + "@textlint/fixer-formatter": "^14.4.0", + "@textlint/kernel": "^14.4.0", + "@textlint/linter-formatter": "^14.4.0", + "@textlint/module-interop": "^14.4.0", + "@textlint/resolver": "^14.4.0", + "@textlint/textlint-plugin-markdown": "^14.4.0", + "@textlint/textlint-plugin-text": "^14.4.0", + "@textlint/types": "^14.4.0", + "@textlint/utils": "^14.4.0", "debug": "^4.3.4", "file-entry-cache": "^5.0.1", "get-stdin": "^5.0.1", @@ -6178,9 +6178,9 @@ } }, "node_modules/textlint/node_modules/@textlint/ast-node-types": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.3.0.tgz", - "integrity": "sha512-baDgKcA8MeO55I2+LNc9FTAJ/aUKlxN6DgM5B511tT9kDwECXRk+iYi/H+oaP25z5Zq3FqrL6n7mmyfFWDUWkQ==", + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.0.tgz", + "integrity": "sha512-tEZbu6dMU8lysTpFrrW9WzN/hWnfGoanOX1WmdKZ7LgqUVDdsd9Q8RNLlQLOgl7ev1C7O3T4ruzl4rdYI5he1g==", "dev": true }, "node_modules/textlint/node_modules/brace-expansion": { diff --git a/package.json b/package.json index 24acdf23c50..f9746eb2853 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "remark-lint-prohibited-strings": "^4.0.0", "remark-lint-unordered-list-marker-style": "^4.0.0", "remark-stringify": "^11.0.0", - "textlint": "^14.3.0", + "textlint": "^14.4.0", "textlint-filter-rule-comments": "^1.2.2", "textlint-rule-common-misspellings": "^1.0.1", "textlint-rule-terminology": "^5.0.13" diff --git a/sass/homeassistant/_overrides.scss b/sass/homeassistant/_overrides.scss index a186fb45e2e..d7ecf1f4585 100644 --- a/sass/homeassistant/_overrides.scss +++ b/sass/homeassistant/_overrides.scss @@ -444,16 +444,21 @@ header .breadcrumbs { h1 { font-family: $heading-font; -webkit-font-smoothing: antialiased; - font-size: 1.33rem; + font-size: 1.3125rem; font-weight: 600; letter-spacing: -0.012em; line-height: 40px; color: #212121; margin: -8px 0 0; + + iconify-icon { + margin-right: 8px; + } } &.text { padding: 24px; + font-size: 1rem; h1 { padding: 0px 0px 12px; @@ -517,7 +522,7 @@ a.material-card:hover { .img { background-color: $grayLighter; width: calc(100%-8px); - aspect-ratio: 120/63; + // aspect-ratio: 120/63; background-size: cover; background-position: center; border-radius: 8px; @@ -656,21 +661,34 @@ a.material-card:hover { .blog-date { white-space: nowrap; } + ol { + margin: 0; + } } .highlight-blog-post { - font-size: 2rem; - line-height: 1.15; - padding: 15px; - display: block; + padding: 24px; text-decoration: none; color: white; - transition: background-color 0.5s; - background-color: #038fc7; + transition: background-color 0.5s, box-shadow 0.5s; + background-color: $primary-color; + display: flex; + padding: 20px 12px 20px 24px; + align-items: center; + gap: 10px; + align-self: stretch; + + p { + font-size: 1rem; + margin: 10px 0 0 0; - &.large { - font-size: 2.25rem; - line-height: 1.33333; + &.lead { + font-family: $heading-font; + font-size: 1.5rem; + font-weight: 700; + line-height: 1.15; + margin-top: 0; + } } &:hover { @@ -682,6 +700,71 @@ a.material-card:hover { } } + .highlight-detail-post { + padding: 24px; + text-decoration: none; + color: white; + transition: background-color 0.5s, box-shadow 0.5s; + background-color: #006895; + box-shadow: inset 0 0 64px #038fc7; + font-size: 1.5rem; + + .caption { + padding-bottom: 24px; + + p { + font-family: $heading-font; + font-size: 1.25rem; + font-weight: 600; + margin: 0; + line-height: 1.2; + + strong { + font-size: 1.75rem; + font-weight: 800; + } + } + } + + .detail-feature { + display: flex; + align-items: flex-start; + gap: 16px; + align-self: stretch; + + p { + font-size: 0.875rem; + + &.lead { + font-size: 1rem; + margin-bottom: 4px; + font-weight: 500; + } + } + + iconify-icon { + padding: 8px; + border-radius: 50%; + background: rgba(0, 0, 0, 0.15); + color: white; + } + + } + animation-name: box-shadow-color; + animation-duration: 5s; + animation-iteration-count: infinite; + animation-direction: alternate; + + @keyframes box-shadow-color { + from { + box-shadow: inset 0 0 64px hsl(197, 97%, 40%); + } + to { + box-shadow: inset 0 0 64px hsl(159, 100%, 35%); + } + } + } + .events { padding: 16px; @@ -726,15 +809,16 @@ a.material-card:hover { .picture-promo { display: block; - padding-top: 30%; + padding-top: 33%; background-size: cover; background-position: center; text-decoration: none; border: none; .caption { - padding: 8px 12px 12px; - background-color: rgba(0, 0, 0, 0.54); + padding: 48px 24px 24px 24px; + background: rgb(0,0,0); + background: linear-gradient(180deg, rgba(0,0,0,0) 0%, rgba(0,0,0,1) 100%); color: white; border-bottom-left-radius: 16px; border-bottom-right-radius: 16px; @@ -743,16 +827,19 @@ a.material-card:hover { align-items: center; .title { - font-size: 20px; - font-weight: 400; - line-height: 1.2em; + font-family: $heading-font; + font-size: 1.5rem; + font-weight: 700; + line-height: normal; } .subtitle { - margin-top: 4px; - line-height: 1.4em; - font-size: 12px; + margin-top: 8px; + line-height: 1.5rem; + font-size: 1rem; font-weight: initial; + text-shadow: 0px 4px 16px rgba(0, 0, 0, 0.33); + opacity: .8; } svg { @@ -762,6 +849,21 @@ a.material-card:hover { min-width: 32px; } } + + &.picture-top { + padding-top: 0; + padding-bottom: 33%; + + .caption { + padding: 24px 24px 48px 24px; + background: rgb(0,0,0); + background: linear-gradient(0deg, rgba(0,0,0,0) 0%, rgba(0,0,0,1) 100%); + border-top-left-radius: 16px; + border-top-right-radius: 16px; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } + } } .supported-brands { @@ -781,8 +883,101 @@ a.material-card:hover { } } + .getting-started { + text-align: center; + + .badge { + display: flex; + padding: 2px 8px 2px 8px; + align-items: flex-start; + gap: 8px; + border-radius: 4px; + background: #E8E6F0; + font-family: $heading-font; + font-size: 1rem; + font-weight: 700; + text-transform: uppercase; + } + + .getting-started-grid { + display: flex; + padding: 48px 0 48px 24px; + align-items: flex-start; + gap: 24px; + } + + .getting-started-device { + .content { + display: flex; + flex-direction: column; + align-items: center; + gap: 16px; + + img { + box-shadow: none; + border: 0; + } + + h3 { + font-size: 2rem; + font-weight: 700; + line-height: 133%; + text-transform: none; + letter-spacing: -.75px; + margin: 0; + } + + p { + font-size: 1rem; + line-height: 1.5; + opacity: .9; + margin: 0; + } + } + + .button { + padding: 6px 20px; + background: $primary-color; + color: white; + font-size: 1rem; + text-transform: uppercase; + } + } + + #HA_Yellow, #Raspberry_Pi { + padding-top: 96px; + } + + #HA_Yellow .badge { + color: $orange; + } + #HA_Green .badge { + color: $green; + } + #Raspberry_Pi .badge { + color: $primary-color; + } + + @media only screen and (max-width: $palm-end) { + .getting-started-grid { + flex-direction: column; + } + + .getting-started-device { + padding-bottom: 64px; + } + + #HA_Yellow, #Raspberry_Pi { + padding-top: 0; + order: 2; + } + } + } + + .sponsors-and-press { margin-top: 24px; + text-align: center; } .seen-press { @@ -791,12 +986,6 @@ a.material-card:hover { gap: 24px; margin: 48px 0; - h2 { - grid-column: 1/-1; - margin: 0; - text-align: center; - } - a { aspect-ratio: 1; } @@ -913,17 +1102,6 @@ dt:hover a.title-link { } } -.hero-buttons { - margin-bottom: 0; -} - -.hero-buttons a { - margin: 0 30px 10px 0; - - &:last-child { - margin: 0; - } -} // Article formatting diff --git a/sass/homeassistant/homepage/_features.scss b/sass/homeassistant/homepage/_features.scss index bc8e51dfbcc..d1f89e4a0c8 100644 --- a/sass/homeassistant/homepage/_features.scss +++ b/sass/homeassistant/homepage/_features.scss @@ -1,50 +1,85 @@ .feature-cards { display: grid; letter-spacing: normal; - grid-template-columns: repeat(2, 1fr); - gap: 32px; + grid-template-columns: repeat(3, 1fr); + gap: 24px; margin: auto; .card { - border-radius: 8px; + border-radius: 24px; + background: white; + padding: 24px; display: inline-block; - width: calc(100% - 16px); vertical-align: top; .card-header { - font-size: 1.4rem; - line-height: 1.6; + font-family: $heading-font; + font-size: 1.3125rem; + line-height: 1.625rem; display: flex; - align-items: center; - padding-bottom: 8px; - height: 62px; + flex-direction: column; + padding-bottom: 16px; + color: $primary-color; + font-weight: 600; iconify-icon { font-size: 2.5rem; margin-right: 8px; + border-radius: 64px; + background: var(--Light-primary-container, #CCEFFE); + align-self: flex-start; + padding: 16px; + margin-bottom: 12px; + color: rgba(0, 127, 168, 1); } } .card-content { padding-bottom: 24px; + font-size: 1rem; - p:last-of-type, - ul { - margin-bottom: 32px; + p { + margin-bottom: 12px; + } + p:last-of-type { + margin-bottom: 24px; + } + + .button { + float: right; + font-size: 1rem; + padding: 8px 16px; } } } } .sub-title { - letter-spacing: normal; - font-weight: bold; - font-size: 42px; - line-height: 49px; - margin: 32px; + font-family: $heading-font; + font-size: 6rem; + font-weight: 800; + line-height: normal; + letter-spacing: -1.92px; + margin: 96px 0 24px !important; text-align: center; } +.sub-title + p { + margin: -24px 0 48px 0; +} + +@media only screen and (max-width: $lap-end) { + .feature-cards { + grid-template-columns: repeat(2, 1fr); + } + + .sub-title { + font-size: 4rem; + line-height: 1.1 !important; + margin-bottom: 32px !important; + } +} + @media only screen and (max-width: $palm-end) { .feature-cards { width: 95%; diff --git a/sass/homeassistant/homepage/_hero_unit.scss b/sass/homeassistant/homepage/_hero_unit.scss index e288652a7c6..45cf9b4a780 100644 --- a/sass/homeassistant/homepage/_hero_unit.scss +++ b/sass/homeassistant/homepage/_hero_unit.scss @@ -4,10 +4,10 @@ .hero { position: relative; background: rgb(24,188,242); - background: linear-gradient(0deg, hsl(195, 89%, 52%) 0%, hsla(195, 89%, 52%, 0.8) 100%); + background: linear-gradient(340deg, hsl(200deg, 100%, 50%) 0%, hsl(195deg, 100%, 50%) 50%, hsl(185deg, 100%, 50%) 100%); padding-bottom: 0; margin-top: -88px; - margin-bottom: 24px; + margin-bottom: 48px; padding-top: 88px; overflow: hidden; border-bottom: 1px solid rgba(0, 0, 0, 0.1); @@ -24,14 +24,20 @@ } h1 { - font-size: 6em; - line-height: .8; - background: linear-gradient(135deg, rgba(255, 255, 255, 1) 0%, hsl(174.86, 100%, 75%) 100%); + font-size: 8rem; + font-style: normal; + font-weight: 800; + line-height: 1; + letter-spacing: -2.56px; + background: linear-gradient(125deg, #FFF 29.3%, #80FFF4 89.99%); background-clip: text; - color: transparent; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; .line2 { line-height: 1.25; + margin-top: -1.75rem; + display: block; } } @@ -40,30 +46,103 @@ color: $grayLighter; font-size: .65em; } - .lead { - font-size: 1.25rem; + &.lead { + font-size: 1.5rem !important; margin-bottom: 24px; + line-height: 2.25rem !important; } } - .hero-buttons a { - font-family: $heading-font; - font-size: 1.1rem; - color: white; - text-transform: uppercase; - white-space: nowrap; - display: inline-block; - font-weight: 600; - padding: 8px 24px 8px 0; - margin: 0 4px 0 0; - border-radius: 32px; + .hero-buttons { + display: flex; + margin: 8px 0px 24px 0px; + align-items: center; + gap: 12px; - &.primary { - background-color: $link-color; - font-size: 2rem; + a { + font-size: 1.1rem; + color: white; + white-space: nowrap; + display: inline-block; + font-weight: 600; + padding: 8px 0 8px 0; + margin: 0 12px 0 12px; + border-radius: 32px; + + &.primary { + font-family: $heading-font; + background-color: $link-color; + text-transform: uppercase; + font-size: 1.5rem; + font-weight: 700; + padding: 8px 16px 8px 24px; + margin: 0; + } + } + } + + .hero-welcome { + padding-left: 64px; + } + + .hero-socialproof { + display: flex; + padding-top: 48px; + align-items: center; + gap: 32px; + + a { + opacity: 0.75; + transition: .5s opacity; + + &:hover { + opacity: 1; + } + } + + } + + .hero-github-top-project { + display: flex; + padding: 12px; + align-items: center; + gap: 10px; + border-radius: 12px; + border: 1px solid #F2F4F9; + width: 330px; + + p { + color: #FFF; + font-size: 1rem; + font-weight: 400; + line-height: 1.25rem; + margin: 0; + + strong { + font-weight: 600; + } + } + } + + .hero-socialproof-asseenon { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + gap: 4px; + + p { + margin: 8px 0 0 0; + align-self: stretch; + font-size: .875rem; font-weight: 700; - padding: 8px 20px 8px 28px; - margin-bottom: 16px; + opacity: .75; + } + + .logos { + display: flex; + align-items: center; + gap: 32px; } } @@ -81,10 +160,12 @@ border-radius: 48px; border: 12px double white; box-shadow: 24px 64px 64px hsla(220, 100%, 25%, .5); - // animation-name: box-shadow-color; - // animation-duration: 3s; + // animation-name: floaty-demo; + // animation-duration: 4s; // animation-iteration-count: infinite; // animation-direction: alternate; + // animation-timing-function: linear; + // transform: rotateY(346deg) skewY(3deg); @media only screen and (max-height: 840px) { border-bottom: 0; @@ -97,6 +178,15 @@ } } +@keyframes floaty-demo { + from { + transform: translateY(-25px) rotateY(346deg) skewY(3deg); + } + to { + transform: translateY(0) rotateY(346deg) skewY(3deg); + } +} + @keyframes box-shadow-color { from { box-shadow: 24px 64px 64px hsla(240, 100%, 25%, .5); @@ -106,10 +196,85 @@ } } -@media only screen and (max-width: $lap-end) { + +@media only screen and (max-width: 1280px) { + .hero .hero-socialproof, .hero .hero-buttons { + flex-direction: column; + align-items: flex-start; + gap: 8px; + } +} + + +@media only screen and (max-width: 1240px) { .hero { h1 { - font-size: 4rem; + font-size: 6rem; + letter-spacing: -1.92px; + + .line2 { + margin-top: -1rem; + } + } + + p.lead { + font-size: 1.25rem !important; + line-height: 1.75rem !important; + } + + .hero-buttons a { + font-size: 1rem; + } + } + .hero .hero-welcome { + padding-left: 48px; + } +} + + +@media only screen and (max-width: 1080px) { + .hero .hero-welcome { + padding-left: 24px; + } +} + +@media only screen and (max-width: 760px) { + .hero { + text-align: center; + + .hero-socialproof, .hero-buttons { + align-items: center; + } + + min-height: 940px; + .flex { + flex-direction: column; + } + + #HAdemo { + display: none; + } + + #HAdemoScreenshot { + display: inline-block; + text-align: center; + padding-top: 48px; + } + } +} + +@media only screen and (max-width: $lap-end) { + .hero { + img { + margin-bottom: 0 !important; + } + h1 { + font-size: 4.5rem; + letter-spacing: -1.92px; + + .line2 { + margin-top: -1rem; + } } .lead { @@ -123,21 +288,3 @@ } } } - -@media only screen and (max-width: 760px) { - .hero { - min-height: 940px; - .flex { - flex-direction: column; - } - - #HAdemo { - display: none; - } - - #HAdemoScreenshot { - display: block; - } - - } -} diff --git a/source/_docs/automation/trigger.markdown b/source/_docs/automation/trigger.markdown index 58efcf35f8e..4b0267e80db 100644 --- a/source/_docs/automation/trigger.markdown +++ b/source/_docs/automation/trigger.markdown @@ -241,6 +241,11 @@ automation: {% endraw %} +{% note %} +Listing above and below together means the numeric_state has to be between the two values. +In the example above, the trigger would fire a single time if a numeric_state goes into the 17.1-24.9 range (above 17 and below 25). It will only fire again, once it has left the defined range and enters it again. +{% endnote %} + When the `attribute` option is specified the trigger is compared to the given `attribute` instead of the state of the entity. {% raw %} @@ -288,11 +293,6 @@ automation: {% endraw %} -{% note %} -Listing above and below together means the numeric_state has to be between the two values. -In the example above, the trigger would fire a single time if a numeric_state goes into the 17.1-24.9 range (above 17 and below 25). It will only fire again, once it has left the defined range and enters it again. -{% endnote %} - Number helpers (`input_number` entities), `number`, `sensor`, and `zone` entities that contain a numeric value, can be used in the `above` and `below` thresholds. However, the comparison will only be made when the entity specified in the trigger is updated. This would look like: @@ -1108,7 +1108,7 @@ blueprint: ## Merging lists of triggers {% caution %} -This feature requires Home Assistant version 2024.10 or later. If using this in a blueprint, set the `min_version` for the blueprint to at least this version. +This feature requires Home Assistant version 2024.10 or later. If using this in a blueprint, set the `min_version` for the blueprint to at least this version. See the [blueprint schema documentation](/docs/blueprint/schema/#min_version) for more details. {% endcaution %} In some advanced cases (like for blueprints with trigger selectors), it may be necessary to insert a second list of triggers into the main trigger list. This can be done by adding a dictionary in the main trigger list with the sole key `triggers`, and the value for that key contains a second list of triggers. These will then be flattened into a single list of triggers. For example: diff --git a/source/_docs/blueprint/schema.markdown b/source/_docs/blueprint/schema.markdown index 48c2769de64..21df85fa326 100644 --- a/source/_docs/blueprint/schema.markdown +++ b/source/_docs/blueprint/schema.markdown @@ -57,7 +57,7 @@ description: domain: description: > The domain in which this blueprint is used. Currently, only - [`automation`](/docs/automation/yaml/), `script` and [`template`](/docs/integrations/template/#using-blueprints) are supported. + [`automation`](/docs/automation/yaml/), `script` and [`template`](/integrations/template/#using-blueprints) are supported. type: string required: true author: @@ -157,7 +157,7 @@ by their name; not by section and name. A section is differentiated from an input by the presence of an additional `input` key within that section. {% caution %} -Input sections are a new feature in version 2024.6.0. Set the `min_version` for the blueprint to at least this version if using input sections. Otherwise, the blueprint will generate errors on older versions. +Input sections are a new feature in version 2024.6.0. Set the `min_version` for the blueprint to at least this version if using input sections. Otherwise, the blueprint will generate errors on older versions. See [this section](/docs/blueprint/schema/#min_version) for more details. {% endcaution %} The full configuration for a section is below: diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index 3cda6becfd9..0ee7d7c73f1 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -718,10 +718,10 @@ For example, if you wanted to select a field from `trigger` in an automation bas ### Time -`now()`, `relative_time()`, `today_at()`, and `utcnow()` are not supported in [limited templates](#limited-templates). +`now()`, `time_since()`, `time_until()`, `today_at()`, and `utcnow()` are not supported in [limited templates](#limited-templates). - `now()` returns a datetime object that represents the current time in your time zone. - - You can also use: `now().second`, `now().minute`, `now().hour`, `now().day`, `now().month`, `now().year`, `now().weekday()` and `now().isoweekday()` and other [`datetime`](https://docs.python.org/3.8/library/datetime.html#datetime.datetime) attributes and functions. + - You can also use: `now().second`, `now().minute`, `now().hour`, `now().day`, `now().month`, `now().year`, `now().weekday()` and `now().isoweekday()` and other [`datetime`](https://docs.python.org/3/library/datetime.html#datetime.datetime) attributes and functions. - Using `now()` will cause templates to be refreshed at the start of every new minute. - `utcnow()` returns a datetime object of the current time in the UTC timezone. - For specific values: `utcnow().second`, `utcnow().minute`, `utcnow().hour`, `utcnow().day`, `utcnow().month`, `utcnow().year`, `utcnow().weekday()` and `utcnow().isoweekday()`. @@ -742,7 +742,7 @@ For example, if you wanted to select a field from `trigger` in an automation bas - `as_datetime(value, default)` converts a string containing a timestamp, or valid UNIX timestamp, to a datetime object. If that fails, it returns the `default` value or, if omitted, raises an error. When the input is already a datetime object it will be returned as is. in case the input is a datetime.date object, midnight will be added as time. This function can also be used as a filter. - `as_timestamp(value, default)` converts a datetime object or string to UNIX timestamp. If that fails, returns the `default` value, or if omitted raises an error. This function can also be used as a filter. - `as_local()` converts a datetime object to local time. This function can also be used as a filter. -- `strptime(string, format, default)` parses a string based on a [format](https://docs.python.org/3.10/library/datetime.html#strftime-and-strptime-behavior) and returns a datetime object. If that fails, it returns the `default` value or, if omitted, raises an error. +- `strptime(string, format, default)` parses a string based on a [format](https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior) and returns a datetime object. If that fails, it returns the `default` value or, if omitted, raises an error. - `time_since(datetime, precision)` converts a datetime object into its human-readable time string. The time string can be in seconds, minutes, hours, days, months, and years. `precision` takes an integer (full number) and indicates the number of units returned. The last unit is rounded. For example: `precision = 1` could return "2 years" while `precision = 2` could return "1 year 11 months". This function can also be used as a filter. If the datetime is in the future, returns 0 seconds. A precision of 0 returns all available units, default is 1. @@ -1180,7 +1180,7 @@ See: [Python regular expression operations](https://docs.python.org/3/library/re - Test `string is match(find, ignorecase=False)` will match the find expression at the beginning of the string using regex. - Test `string is search(find, ignorecase=False)` will match the find expression anywhere in the string using regex. -- Filter `string|regex_replace(find='', replace='', ignorecase=False)` will replace the find expression with the replace string using regex. +- Filter `string|regex_replace(find='', replace='', ignorecase=False)` will replace the find expression with the replace string using regex. Access to the matched groups in `replace` is possible with `'\\1'`, `'\\2'`, etc. - Filter `value | regex_findall(find='', ignorecase=False)` will find all regex matches of the find expression in `value` and return the array of matches. - Filter `value | regex_findall_index(find='', index=0, ignorecase=False)` will do the same as `regex_findall` and return the match at index. diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index 8d4b5d22223..7025cf68675 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -576,9 +576,8 @@ It contains the following fields: ## If-then -This {% term action %} allow you to conditionally (`if`) run a sequence of actions (`then`) -and optionally supports running other sequence when the condition didn't -pass (`else`). +This {% term action %} allows you to conditionally (`if`), based on or more [conditions](/docs/scripts/conditions/) (which are `and` combined), +run a sequence of actions (`then`) and optionally supports running other sequence when the condition didn't pass (`else`). ```yaml script: diff --git a/source/_includes/asides/docs_sitemap.html b/source/_includes/asides/docs_sitemap.html index 64c93a510ec..53eac73f1df 100644 --- a/source/_includes/asides/docs_sitemap.html +++ b/source/_includes/asides/docs_sitemap.html @@ -109,7 +109,7 @@
  • - {% icon "mdi:microphone" %} Voice assistants + {% icon "mdi:microphone" %} {% active_link /voice_control/ Voice assistants %} {% if root == 'voice_control' or include.docs_index %}