diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2840ce61d..603c1e7b6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -29,24 +29,9 @@ jobs: BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }} KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} run: | - # create variables - CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12 - PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision - KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db - - # import certificate and provisioning profile from secrets - echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode -o $CERTIFICATE_PATH - - # create temporary keychain - security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH - security set-keychain-settings -lut 21600 $KEYCHAIN_PATH - security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH - - # import certificate to keychain - security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH - security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH - security list-keychain -d user -s $KEYCHAIN_PATH - + chmod +x ./scripts/install_certificate_and_profile.sh + ./scripts/install_certificate_and_profile.sh "$RUNNER_TEMP" "$BUILD_CERTIFICATE_BASE64" "$P12_PASSWORD" "$BUILD_PROVISION_PROFILE_BASE64" "$KEYCHAIN_PASSWORD" + - name: Run build script run: | ./scripts/build_xcframeworks.rb -d . -w SDDS.xcworkspace diff --git a/.github/workflows/publish-all-themes-release.yml b/.github/workflows/publish-all-themes-release.yml index 941eb992a..ef38dc5e0 100644 --- a/.github/workflows/publish-all-themes-release.yml +++ b/.github/workflows/publish-all-themes-release.yml @@ -30,24 +30,9 @@ jobs: BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }} KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} run: | - # create variables - CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12 - PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision - KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db - - # import certificate and provisioning profile from secrets - echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode -o $CERTIFICATE_PATH - - # create temporary keychain - security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH - security set-keychain-settings -lut 21600 $KEYCHAIN_PATH - security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH - - # import certificate to keychain - security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH - security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH - security list-keychain -d user -s $KEYCHAIN_PATH - + chmod +x ./scripts/install_certificate_and_profile.sh + ./scripts/install_certificate_and_profile.sh "$RUNNER_TEMP" "$BUILD_CERTIFICATE_BASE64" "$P12_PASSWORD" "$BUILD_PROVISION_PROFILE_BASE64" "$KEYCHAIN_PASSWORD" + - name: Install dependencies run: | gem install xcodeproj diff --git a/.github/workflows/release_all_frameworks.yml b/.github/workflows/release_all_frameworks.yml index fd0a2b69e..6735320d6 100644 --- a/.github/workflows/release_all_frameworks.yml +++ b/.github/workflows/release_all_frameworks.yml @@ -38,19 +38,8 @@ jobs: BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }} KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} run: | - CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12 - PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision - KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db - - echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode -o $CERTIFICATE_PATH - - security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH - security set-keychain-settings -lut 21600 $KEYCHAIN_PATH - security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH - - security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH - security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH - security list-keychain -d user -s $KEYCHAIN_PATH + chmod +x ./scripts/install_certificate_and_profile.sh + ./scripts/install_certificate_and_profile.sh "$RUNNER_TEMP" "$BUILD_CERTIFICATE_BASE64" "$P12_PASSWORD" "$BUILD_PROVISION_PROFILE_BASE64" "$KEYCHAIN_PASSWORD" - name: Install dependencies run: gem install xcodeproj diff --git a/.github/workflows/release_components.yml b/.github/workflows/release_components.yml index 3657690f8..61e3afb57 100644 --- a/.github/workflows/release_components.yml +++ b/.github/workflows/release_components.yml @@ -31,19 +31,8 @@ jobs: BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }} KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} run: | - CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12 - PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision - KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db - - echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode -o $CERTIFICATE_PATH - - security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH - security set-keychain-settings -lut 21600 $KEYCHAIN_PATH - security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH - - security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH - security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH - security list-keychain -d user -s $KEYCHAIN_PATH + chmod +x ./scripts/install_certificate_and_profile.sh + ./scripts/install_certificate_and_profile.sh "$RUNNER_TEMP" "$BUILD_CERTIFICATE_BASE64" "$P12_PASSWORD" "$BUILD_PROVISION_PROFILE_BASE64" "$KEYCHAIN_PASSWORD" - name: Install dependencies run: gem install xcodeproj diff --git a/.github/workflows/release_icons.yml b/.github/workflows/release_icons.yml index 95929f08c..f4bd74785 100644 --- a/.github/workflows/release_icons.yml +++ b/.github/workflows/release_icons.yml @@ -31,23 +31,8 @@ jobs: BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }} KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} run: | - # create variables - CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12 - PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision - KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db - - # import certificate and provisioning profile from secrets - echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode -o $CERTIFICATE_PATH - - # create temporary keychain - security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH - security set-keychain-settings -lut 21600 $KEYCHAIN_PATH - security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH - - # import certificate to keychain - security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH - security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH - security list-keychain -d user -s $KEYCHAIN_PATH + .chmod +x ./scripts/install_certificate_and_profile.sh + ./scripts/install_certificate_and_profile.sh "$RUNNER_TEMP" "$BUILD_CERTIFICATE_BASE64" "$P12_PASSWORD" "$BUILD_PROVISION_PROFILE_BASE64" "$KEYCHAIN_PASSWORD" - name: Build SDDSIcons run: | diff --git a/.github/workflows/testflight_build.yml b/.github/workflows/testflight_build.yml new file mode 100644 index 000000000..2c107497b --- /dev/null +++ b/.github/workflows/testflight_build.yml @@ -0,0 +1,73 @@ +name: Build and Deploy to TestFlight + +on: + push: + branches: + - main + - develop + workflow_dispatch: + +jobs: + build: + runs-on: macos-latest + + environment: sdds + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Xcode + uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: 'latest' + + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.0' + + - name: Set up bundle + run: bundle install + + - name: Install the Apple certificate and provisioning profile + env: + BUILD_CERTIFICATE_BASE64: ${{ secrets.SDDS_DEMO_BUILD_CERTIFICATE_BASE64 }} + P12_PASSWORD: ${{ secrets.SDDS_DEMO_P12_PASSWORD }} + BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.SDDS_DEMO_BUILD_PROVISION_PROFILE_BASE64 }} + KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} + run: | + # create variables + CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12 + PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision + KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db + + echo "Certificate Base64 Length: ${#BUILD_CERTIFICATE_BASE64}" + echo "Provision Profile Base64 Length: ${#BUILD_PROVISION_PROFILE_BASE64}" + + # import certificate and provisioning profile from secrets + echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode -o $CERTIFICATE_PATH + echo -n "$BUILD_PROVISION_PROFILE_BASE64" | base64 --decode -o $PP_PATH + + # create temporary keychain + security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH + security set-keychain-settings -lut 21600 $KEYCHAIN_PATH + security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH + + # import certificate to keychain + security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH + security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH + security list-keychain -d user -s $KEYCHAIN_PATH + + # apply provisioning profile + mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles + cp $PP_PATH ~/Library/MobileDevice/Provisioning\ Profiles + + - name: Install Fastlane + run: gem install fastlane + + - name: Run Fastlane build and upload + env: + APP_STORE_CONNECT_API_KEY_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ID }} + APP_STORE_CONNECT_API_KEY: ${{ secrets.APP_STORE_CONNECT_API_KEY }} + APP_STORE_CONNECT_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_ISSUER_ID }} + run: fastlane build_and_upload diff --git a/Gemfile b/Gemfile new file mode 100644 index 000000000..adc90d98c --- /dev/null +++ b/Gemfile @@ -0,0 +1,3 @@ +source "https://rubygems.org" + +gem "fastlane" \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 000000000..46621b3ff --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,222 @@ +GEM + remote: https://rubygems.org/ + specs: + CFPropertyList (3.0.7) + base64 + nkf + rexml + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + artifactory (3.0.17) + atomos (0.1.3) + aws-eventstream (1.3.0) + aws-partitions (1.1018.0) + aws-sdk-core (3.214.0) + aws-eventstream (~> 1, >= 1.3.0) + aws-partitions (~> 1, >= 1.992.0) + aws-sigv4 (~> 1.9) + jmespath (~> 1, >= 1.6.1) + aws-sdk-kms (1.96.0) + aws-sdk-core (~> 3, >= 3.210.0) + aws-sigv4 (~> 1.5) + aws-sdk-s3 (1.176.0) + aws-sdk-core (~> 3, >= 3.210.0) + aws-sdk-kms (~> 1) + aws-sigv4 (~> 1.5) + aws-sigv4 (1.10.1) + aws-eventstream (~> 1, >= 1.0.2) + babosa (1.0.4) + base64 (0.2.0) + claide (1.1.0) + colored (1.2) + colored2 (3.1.2) + commander (4.6.0) + highline (~> 2.0.0) + declarative (0.0.20) + digest-crc (0.6.5) + rake (>= 12.0.0, < 14.0.0) + domain_name (0.6.20240107) + dotenv (2.8.1) + emoji_regex (3.2.3) + excon (0.112.0) + faraday (1.10.4) + faraday-em_http (~> 1.0) + faraday-em_synchrony (~> 1.0) + faraday-excon (~> 1.1) + faraday-httpclient (~> 1.0) + faraday-multipart (~> 1.0) + faraday-net_http (~> 1.0) + faraday-net_http_persistent (~> 1.0) + faraday-patron (~> 1.0) + faraday-rack (~> 1.0) + faraday-retry (~> 1.0) + ruby2_keywords (>= 0.0.4) + faraday-cookie_jar (0.0.7) + faraday (>= 0.8.0) + http-cookie (~> 1.0.0) + faraday-em_http (1.0.0) + faraday-em_synchrony (1.0.0) + faraday-excon (1.1.0) + faraday-httpclient (1.0.1) + faraday-multipart (1.0.4) + multipart-post (~> 2) + faraday-net_http (1.0.2) + faraday-net_http_persistent (1.2.0) + faraday-patron (1.0.0) + faraday-rack (1.0.0) + faraday-retry (1.0.3) + faraday_middleware (1.2.1) + faraday (~> 1.0) + fastimage (2.3.1) + fastlane (2.225.0) + CFPropertyList (>= 2.3, < 4.0.0) + addressable (>= 2.8, < 3.0.0) + artifactory (~> 3.0) + aws-sdk-s3 (~> 1.0) + babosa (>= 1.0.3, < 2.0.0) + bundler (>= 1.12.0, < 3.0.0) + colored (~> 1.2) + commander (~> 4.6) + dotenv (>= 2.1.1, < 3.0.0) + emoji_regex (>= 0.1, < 4.0) + excon (>= 0.71.0, < 1.0.0) + faraday (~> 1.0) + faraday-cookie_jar (~> 0.0.6) + faraday_middleware (~> 1.0) + fastimage (>= 2.1.0, < 3.0.0) + fastlane-sirp (>= 1.0.0) + gh_inspector (>= 1.1.2, < 2.0.0) + google-apis-androidpublisher_v3 (~> 0.3) + google-apis-playcustomapp_v1 (~> 0.1) + google-cloud-env (>= 1.6.0, < 2.0.0) + google-cloud-storage (~> 1.31) + highline (~> 2.0) + http-cookie (~> 1.0.5) + json (< 3.0.0) + jwt (>= 2.1.0, < 3) + mini_magick (>= 4.9.4, < 5.0.0) + multipart-post (>= 2.0.0, < 3.0.0) + naturally (~> 2.2) + optparse (>= 0.1.1, < 1.0.0) + plist (>= 3.1.0, < 4.0.0) + rubyzip (>= 2.0.0, < 3.0.0) + security (= 0.1.5) + simctl (~> 1.6.3) + terminal-notifier (>= 2.0.0, < 3.0.0) + terminal-table (~> 3) + tty-screen (>= 0.6.3, < 1.0.0) + tty-spinner (>= 0.8.0, < 1.0.0) + word_wrap (~> 1.0.0) + xcodeproj (>= 1.13.0, < 2.0.0) + xcpretty (~> 0.3.0) + xcpretty-travis-formatter (>= 0.0.3, < 2.0.0) + fastlane-sirp (1.0.0) + sysrandom (~> 1.0) + gh_inspector (1.1.3) + google-apis-androidpublisher_v3 (0.54.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-core (0.11.3) + addressable (~> 2.5, >= 2.5.1) + googleauth (>= 0.16.2, < 2.a) + httpclient (>= 2.8.1, < 3.a) + mini_mime (~> 1.0) + representable (~> 3.0) + retriable (>= 2.0, < 4.a) + rexml + google-apis-iamcredentials_v1 (0.17.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-playcustomapp_v1 (0.13.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-storage_v1 (0.31.0) + google-apis-core (>= 0.11.0, < 2.a) + google-cloud-core (1.7.1) + google-cloud-env (>= 1.0, < 3.a) + google-cloud-errors (~> 1.0) + google-cloud-env (1.6.0) + faraday (>= 0.17.3, < 3.0) + google-cloud-errors (1.4.0) + google-cloud-storage (1.47.0) + addressable (~> 2.8) + digest-crc (~> 0.4) + google-apis-iamcredentials_v1 (~> 0.1) + google-apis-storage_v1 (~> 0.31.0) + google-cloud-core (~> 1.6) + googleauth (>= 0.16.2, < 2.a) + mini_mime (~> 1.0) + googleauth (1.8.1) + faraday (>= 0.17.3, < 3.a) + jwt (>= 1.4, < 3.0) + multi_json (~> 1.11) + os (>= 0.9, < 2.0) + signet (>= 0.16, < 2.a) + highline (2.0.3) + http-cookie (1.0.8) + domain_name (~> 0.5) + httpclient (2.8.3) + jmespath (1.6.2) + json (2.9.0) + jwt (2.9.3) + base64 + mini_magick (4.13.2) + mini_mime (1.1.5) + multi_json (1.15.0) + multipart-post (2.4.1) + nanaimo (0.4.0) + naturally (2.2.1) + nkf (0.2.0) + optparse (0.6.0) + os (1.1.4) + plist (3.7.1) + public_suffix (6.0.1) + rake (13.2.1) + representable (3.2.0) + declarative (< 0.1.0) + trailblazer-option (>= 0.1.1, < 0.2.0) + uber (< 0.2.0) + retriable (3.1.2) + rexml (3.3.9) + rouge (2.0.7) + ruby2_keywords (0.0.5) + rubyzip (2.3.2) + security (0.1.5) + signet (0.19.0) + addressable (~> 2.8) + faraday (>= 0.17.5, < 3.a) + jwt (>= 1.5, < 3.0) + multi_json (~> 1.10) + simctl (1.6.10) + CFPropertyList + naturally + sysrandom (1.0.5) + terminal-notifier (2.0.0) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) + trailblazer-option (0.1.2) + tty-cursor (0.7.1) + tty-screen (0.8.2) + tty-spinner (0.9.3) + tty-cursor (~> 0.7) + uber (0.1.0) + unicode-display_width (2.6.0) + word_wrap (1.0.0) + xcodeproj (1.27.0) + CFPropertyList (>= 2.3.3, < 4.0) + atomos (~> 0.1.3) + claide (>= 1.0.2, < 2.0) + colored2 (~> 3.1) + nanaimo (~> 0.4.0) + rexml (>= 3.3.6, < 4.0) + xcpretty (0.3.0) + rouge (~> 2.0.7) + xcpretty-travis-formatter (1.0.1) + xcpretty (~> 0.2, >= 0.0.7) + +PLATFORMS + ruby + x86_64-darwin-23 + +DEPENDENCIES + fastlane + +BUNDLED WITH + 2.5.23 diff --git a/SDDS.xcworkspace/contents.xcworkspacedata b/SDDS.xcworkspace/contents.xcworkspacedata index 99d1b0932..1938b508f 100644 --- a/SDDS.xcworkspace/contents.xcworkspacedata +++ b/SDDS.xcworkspace/contents.xcworkspacedata @@ -28,4 +28,14 @@ + + + + + + diff --git a/SDDSComponents/SDDSComponents.xcodeproj/project.pbxproj b/SDDSComponents/SDDSComponents.xcodeproj/project.pbxproj index 56d232f93..e2a48308f 100644 --- a/SDDSComponents/SDDSComponents.xcodeproj/project.pbxproj +++ b/SDDSComponents/SDDSComponents.xcodeproj/project.pbxproj @@ -13,6 +13,23 @@ 8102BA322CBE9B3300C589D3 /* TextAreaSizeConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8102BA2D2CBE9B3300C589D3 /* TextAreaSizeConfiguration.swift */; }; 8102BA3A2CBEAFB800C589D3 /* PlaceholderTextEditor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8102BA392CBEAFB800C589D3 /* PlaceholderTextEditor.swift */; }; 8102BA3C2CBEB32700C589D3 /* ExpandingTextEditor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8102BA3B2CBEB32700C589D3 /* ExpandingTextEditor.swift */; }; + 811D2E122D10A4BA001C0F48 /* TextFieldAppearance+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2E0C2D10A4BA001C0F48 /* TextFieldAppearance+Extensions.swift */; }; + 811D2E132D10A4BA001C0F48 /* TextFieldDefaultSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2E0D2D10A4BA001C0F48 /* TextFieldDefaultSize.swift */; }; + 811D2E142D10A4BA001C0F48 /* TextFieldTypography.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2E0E2D10A4BA001C0F48 /* TextFieldTypography.swift */; }; + 811D2E152D10A4BA001C0F48 /* SDDSTextField+Preview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2E0F2D10A4BA001C0F48 /* SDDSTextField+Preview.swift */; }; + 811D2E162D10A4BA001C0F48 /* ChipAppearance+SDDSTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2E102D10A4BA001C0F48 /* ChipAppearance+SDDSTextField.swift */; }; + 811D2E172D10A4BA001C0F48 /* TextFieldChipSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2E112D10A4BA001C0F48 /* TextFieldChipSize.swift */; }; + 811D2E1D2D10A59F001C0F48 /* TextAreaChipSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2E182D10A59F001C0F48 /* TextAreaChipSize.swift */; }; + 811D2E1E2D10A59F001C0F48 /* SDDSTextAreaSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2E192D10A59F001C0F48 /* SDDSTextAreaSize.swift */; }; + 811D2E1F2D10A59F001C0F48 /* SDDSTextAreaAppearance+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2E1A2D10A59F001C0F48 /* SDDSTextAreaAppearance+Extensions.swift */; }; + 811D2E202D10A59F001C0F48 /* SDDSTextAreaChipGroupSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2E1B2D10A59F001C0F48 /* SDDSTextAreaChipGroupSize.swift */; }; + 811D2E212D10A59F001C0F48 /* SDDSTextArea+Preview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2E1C2D10A59F001C0F48 /* SDDSTextArea+Preview.swift */; }; + 811D2E232D10A5B4001C0F48 /* SDDSAvatarGroupPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2E222D10A5B4001C0F48 /* SDDSAvatarGroupPreview.swift */; }; + 811D2E252D10A64C001C0F48 /* SDDSCheckboxGroup+Preview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2E242D10A64C001C0F48 /* SDDSCheckboxGroup+Preview.swift */; }; + 811D2E282D10A6CF001C0F48 /* SDDSChipGroup+Preview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2E262D10A6CF001C0F48 /* SDDSChipGroup+Preview.swift */; }; + 811D2E292D10A6CF001C0F48 /* DefaultChipGroupSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2E272D10A6CF001C0F48 /* DefaultChipGroupSize.swift */; }; + 811D2E2B2D10A7B9001C0F48 /* SDDSRadioboxGroup+Preview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2E2A2D10A7B9001C0F48 /* SDDSRadioboxGroup+Preview.swift */; }; + 811D2E2D2D115FDD001C0F48 /* AppearanceVariation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2E2C2D115FDD001C0F48 /* AppearanceVariation.swift */; }; 811DE1542C50098D000DD354 /* SDDSChip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811DE1532C50098D000DD354 /* SDDSChip.swift */; }; 811DE1562C50179F000DD354 /* ChipAppearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811DE1552C50179F000DD354 /* ChipAppearance.swift */; }; 811DE1582C5017C3000DD354 /* ProgressBarAppearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811DE1572C5017C3000DD354 /* ProgressBarAppearance.swift */; }; @@ -21,15 +38,11 @@ 811DE1732C57868F000DD354 /* SDDSCheckboxGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811DE1722C57868F000DD354 /* SDDSCheckboxGroup.swift */; }; 814185CA2C34260300D8E524 /* ButtonSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 814185C92C34260300D8E524 /* ButtonSize.swift */; }; 814E30202C999469004601F7 /* SDDSThemeUtilities in Frameworks */ = {isa = PBXBuildFile; productRef = 814E301F2C999469004601F7 /* SDDSThemeUtilities */; }; - 814E30272C99A502004601F7 /* TextFieldChipSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 814E30262C99A502004601F7 /* TextFieldChipSize.swift */; }; - 814E30292C99A58B004601F7 /* ChipAppearance+SDDSTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 814E30282C99A58B004601F7 /* ChipAppearance+SDDSTextField.swift */; }; 814E30362C99AFAB004601F7 /* SDDSAvatar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81CBC08E2C821A5600FBDAC8 /* SDDSAvatar.swift */; }; 814E30372C99AFAE004601F7 /* SDDSAvatarData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81CBC09E2C82334100FBDAC8 /* SDDSAvatarData.swift */; }; 814E30382C99AFB0004601F7 /* SDDSAvatarModifiers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81CBC0A22C82368300FBDAC8 /* SDDSAvatarModifiers.swift */; }; 814E30392C99AFB3004601F7 /* SDDSAvatarGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81CBC0A02C82350300FBDAC8 /* SDDSAvatarGroup.swift */; }; 814E303A2C99AFBD004601F7 /* BackportAsyncImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81CBC0932C82244000FBDAC8 /* BackportAsyncImage.swift */; }; - 814E303D2C99B013004601F7 /* SDDSAvatarPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 814E303C2C99B013004601F7 /* SDDSAvatarPreview.swift */; }; - 814E30402C99B067004601F7 /* SDDSAvatarGroupPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 814E303F2C99B067004601F7 /* SDDSAvatarGroupPreview.swift */; }; 814E30412C99B090004601F7 /* Text+FillModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81CBC0972C82273100FBDAC8 /* Text+FillModifier.swift */; }; 814E307E2C99CEE1004601F7 /* View+DebugModifiers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 814E307D2C99CEE1004601F7 /* View+DebugModifiers.swift */; }; 815142892C99942E00E6A00D /* SDDSThemeCore in Frameworks */ = {isa = PBXBuildFile; productRef = 815142882C99942E00E6A00D /* SDDSThemeCore */; }; @@ -37,41 +50,43 @@ 8154644B2C96FDE600DAD8EA /* ViewProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8154644A2C96FDE600DAD8EA /* ViewProvider.swift */; }; 8159F7302C5D1CFE00622836 /* FillStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8159F72F2C5D1CFE00622836 /* FillStyle.swift */; }; 816243412CB81A4300506E1C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 816243402CB81A4300506E1C /* Assets.xcassets */; }; + 81685C252CFF881300278446 /* SwitchAppearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81685C242CFF881300278446 /* SwitchAppearance.swift */; }; + 81685C272CFF883900278446 /* SwitchSizeConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81685C262CFF883900278446 /* SwitchSizeConfiguration.swift */; }; + 81685C292CFF884B00278446 /* SwitchAccessibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81685C282CFF884B00278446 /* SwitchAccessibility.swift */; }; + 81685C2B2CFF898D00278446 /* SwitchAppearance+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81685C2A2CFF898D00278446 /* SwitchAppearance+Extensions.swift */; }; 816AA9A72C97280400C3347C /* PlaceholderTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 816AA9A62C97280400C3347C /* PlaceholderTextField.swift */; }; 816AA9AC2C97419A00C3347C /* TextFieldDebugConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 816AA9AB2C97419A00C3347C /* TextFieldDebugConfiguration.swift */; }; 816AA9AE2C97421F00C3347C /* TextFieldAppearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 816AA9AD2C97421F00C3347C /* TextFieldAppearance.swift */; }; 816AA9B02C97424000C3347C /* TextFieldSizeConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 816AA9AF2C97424000C3347C /* TextFieldSizeConfiguration.swift */; }; 816AA9B22C97425F00C3347C /* TextFieldAccessibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 816AA9B12C97425F00C3347C /* TextFieldAccessibility.swift */; }; 816C62A22CB80EC400352891 /* Opacity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81998FFF2C3555D4009074B7 /* Opacity.swift */; }; + 817339D52D033BF50092608A /* ProgressBarSizeConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817339D42D033BF50092608A /* ProgressBarSizeConfiguration.swift */; }; + 817339D72D033C0A0092608A /* ProgressBarAccessibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817339D62D033C0A0092608A /* ProgressBarAccessibility.swift */; }; + 817339DB2D033D3A0092608A /* CheckboxData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817339DA2D033D3A0092608A /* CheckboxData.swift */; }; + 817339DE2D033D860092608A /* ChipAccessibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817339DD2D033D860092608A /* ChipAccessibility.swift */; }; + 817339E02D033D940092608A /* ChipSizeConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817339DF2D033D940092608A /* ChipSizeConfiguration.swift */; }; + 817339E22D033DA30092608A /* ChipBorderStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817339E12D033DA30092608A /* ChipBorderStyle.swift */; }; + 817339E42D033E310092608A /* ChipData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817339E32D033E310092608A /* ChipData.swift */; }; + 817339E62D033E650092608A /* RadioboxData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817339E52D033E650092608A /* RadioboxData.swift */; }; + 817339E92D033E8E0092608A /* AvatarAppearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817339E82D033E8E0092608A /* AvatarAppearance.swift */; }; + 817339EB2D033EB90092608A /* AvatarStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817339EA2D033EB90092608A /* AvatarStatus.swift */; }; + 817339ED2D033EC90092608A /* AvatarSizeConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817339EC2D033EC90092608A /* AvatarSizeConfiguration.swift */; }; + 817339EF2D033EE40092608A /* AvatarAccessibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817339EE2D033EE40092608A /* AvatarAccessibility.swift */; }; + 817339F12D033EF30092608A /* AvatarImageSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817339F02D033EF30092608A /* AvatarImageSource.swift */; }; + 817339F32D035D2D0092608A /* CheckboxAppearance+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817339F22D035D2D0092608A /* CheckboxAppearance+Extensions.swift */; }; + 817339FC2D03628F0092608A /* RadioboxAppearance+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817339FB2D03628F0092608A /* RadioboxAppearance+Extensions.swift */; }; + 81733A062D0362D00092608A /* SDDSCheckboxPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81733A052D0362D00092608A /* SDDSCheckboxPreview.swift */; }; + 81733A082D03633A0092608A /* SDDSRadioboxPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81733A072D03633A0092608A /* SDDSRadioboxPreview.swift */; }; + 81733A0D2D0367BD0092608A /* ProgressBarAppearance+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81733A0B2D0367930092608A /* ProgressBarAppearance+Extensions.swift */; }; + 81733A2B2D072FB70092608A /* AvatarAppearance+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81733A262D072E0F0092608A /* AvatarAppearance+Extensions.swift */; }; + 81733A2D2D0730A10092608A /* SDDSProgressBarPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81733A2C2D0730A10092608A /* SDDSProgressBarPreview.swift */; }; + 81733A2F2D0731420092608A /* SDDSAvatarPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81733A2E2D0731420092608A /* SDDSAvatarPreview.swift */; }; + 81733A3A2D0733460092608A /* ChipAppearance+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81733A382D07332C0092608A /* ChipAppearance+Extensions.swift */; }; + 81733A402D0738300092608A /* SDDSChipPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81733A3F2D0738300092608A /* SDDSChipPreview.swift */; }; 81737DC92CF84F24002A6A74 /* SDDSServTheme in Frameworks */ = {isa = PBXBuildFile; productRef = 81737DC82CF84F24002A6A74 /* SDDSServTheme */; }; 817580E92C37E04000E45207 /* SpinnerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817580E82C37E04000E45207 /* SpinnerView.swift */; }; - 817AE50F2C99925A00F427DE /* SDDSCheckboxGroup+Preview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817AE4DE2C99925900F427DE /* SDDSCheckboxGroup+Preview.swift */; }; - 817AE5102C99925A00F427DE /* SDDSRadiobox+Preview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817AE4E02C99925900F427DE /* SDDSRadiobox+Preview.swift */; }; - 817AE5112C99925A00F427DE /* RadioboxAppearance+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817AE4E12C99925900F427DE /* RadioboxAppearance+Extensions.swift */; }; - 817AE5122C99925A00F427DE /* SDDSRadioboxSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817AE4E22C99925900F427DE /* SDDSRadioboxSize.swift */; }; - 817AE5132C99925A00F427DE /* RadioboxTypography.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817AE4E32C99925900F427DE /* RadioboxTypography.swift */; }; - 817AE5142C99925A00F427DE /* TextFieldAppearance+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817AE4E52C99925900F427DE /* TextFieldAppearance+Extensions.swift */; }; - 817AE5152C99925A00F427DE /* SDDSTextField+Preview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817AE4E62C99925900F427DE /* SDDSTextField+Preview.swift */; }; - 817AE5162C99925A00F427DE /* TextFieldDefaultSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817AE4E72C99925900F427DE /* TextFieldDefaultSize.swift */; }; - 817AE5172C99925A00F427DE /* TextFieldTypography.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817AE4E82C99925900F427DE /* TextFieldTypography.swift */; }; - 817AE5252C99925A00F427DE /* SwitchTypography.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817AE4F82C99925A00F427DE /* SwitchTypography.swift */; }; - 817AE5262C99925A00F427DE /* SDDSSwitch+Preview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817AE4F92C99925A00F427DE /* SDDSSwitch+Preview.swift */; }; - 817AE5272C99925A00F427DE /* SDDSSwitchSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817AE4FA2C99925A00F427DE /* SDDSSwitchSize.swift */; }; - 817AE5282C99925A00F427DE /* SwitchAppearance+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817AE4FB2C99925A00F427DE /* SwitchAppearance+Extensions.swift */; }; - 817AE5292C99925A00F427DE /* SDDSCheckbox+Preview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817AE4FD2C99925A00F427DE /* SDDSCheckbox+Preview.swift */; }; - 817AE52A2C99925A00F427DE /* CheckboxTypography.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817AE4FE2C99925A00F427DE /* CheckboxTypography.swift */; }; - 817AE52B2C99925A00F427DE /* CheckboxAppearance+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817AE4FF2C99925A00F427DE /* CheckboxAppearance+Extensions.swift */; }; - 817AE52C2C99925A00F427DE /* SDDSCheckboxSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817AE5002C99925A00F427DE /* SDDSCheckboxSize.swift */; }; - 817AE52D2C99925A00F427DE /* DefaultProgressBarSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817AE5022C99925A00F427DE /* DefaultProgressBarSize.swift */; }; - 817AE52E2C99925A00F427DE /* SDDSProgress+Preview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817AE5032C99925A00F427DE /* SDDSProgress+Preview.swift */; }; - 817AE52F2C99925A00F427DE /* ProgressBarAppearance+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817AE5042C99925A00F427DE /* ProgressBarAppearance+Extensions.swift */; }; + 817AE5262C99925A00F427DE /* SDDSSwitchPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817AE4F92C99925A00F427DE /* SDDSSwitchPreview.swift */; }; 817AE5302C99925A00F427DE /* SDDSComponentsPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817AE5052C99925A00F427DE /* SDDSComponentsPreview.swift */; }; - 817AE5312C99925A00F427DE /* DefaultChipGroupSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817AE5072C99925A00F427DE /* DefaultChipGroupSize.swift */; }; - 817AE5322C99925A00F427DE /* SDDSChipGroup+Preview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817AE5082C99925A00F427DE /* SDDSChipGroup+Preview.swift */; }; - 817AE5332C99925A00F427DE /* SDDSRadioboxGroup+Preview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817AE50A2C99925A00F427DE /* SDDSRadioboxGroup+Preview.swift */; }; - 817AE5342C99925A00F427DE /* SDDSChipSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817AE50C2C99925A00F427DE /* SDDSChipSize.swift */; }; - 817AE5352C99925A00F427DE /* SDDSChip+Preview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817AE50D2C99925A00F427DE /* SDDSChip+Preview.swift */; }; - 817AE5362C99925A00F427DE /* ChipAppearance+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 817AE50E2C99925A00F427DE /* ChipAppearance+Extensions.swift */; }; 818C03B22C418A90002C6D0A /* SDDSSwitch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 818C03B12C418A90002C6D0A /* SDDSSwitch.swift */; }; 818C03B52C418C50002C6D0A /* TypographyConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 818C03B42C418C50002C6D0A /* TypographyConfiguration.swift */; }; 818C03B92C43B99B002C6D0A /* ColorToken+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 818C03B82C43B99B002C6D0A /* ColorToken+Extensions.swift */; }; @@ -90,7 +105,6 @@ 81998FF42C354C7F009074B7 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 81998FF32C354C7F009074B7 /* Assets.xcassets */; }; 81998FF92C35503D009074B7 /* View+Modifiers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81998FF82C35503D009074B7 /* View+Modifiers.swift */; }; 819CB7FD2C7CC34A00B4FBF4 /* SDDSThemeCore in Frameworks */ = {isa = PBXBuildFile; productRef = 819CB7FC2C7CC34A00B4FBF4 /* SDDSThemeCore */; }; - 81A901432CF6E4F200992B04 /* findState.stencil in Resources */ = {isa = PBXBuildFile; fileRef = 81A901422CF6E4F200992B04 /* findState.stencil */; }; 81A9014F2CF6E8E400992B04 /* ButtonAppearance+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81A9014D2CF6E8D600992B04 /* ButtonAppearance+Extensions.swift */; }; 81A901532CF6EAA800992B04 /* LinkButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81A901522CF6EAA800992B04 /* LinkButton.swift */; }; 81A9015B2CF6EBD300992B04 /* SDDSButtonPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81A9015A2CF6EBD300992B04 /* SDDSButtonPreview.swift */; }; @@ -98,18 +112,10 @@ 81BBC5952C862764009616CE /* Spacing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 814185C62C33080400D8E524 /* Spacing.swift */; }; 81BBC59A2C862817009616CE /* SDDSServeStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81BBC5992C862817009616CE /* SDDSServeStyle.swift */; }; 81BBC5C92C8639CC009616CE /* Image+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81BBC5C82C8639CC009616CE /* Image+Extensions.swift */; }; - 81C01F9A2CA59C9400D7363E /* AvatarAppearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81C01F972CA59C9300D7363E /* AvatarAppearance.swift */; }; - 81C01F9B2CA59C9400D7363E /* AvatarTypography.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81C01F982CA59C9400D7363E /* AvatarTypography.swift */; }; - 81C01F9C2CA59C9400D7363E /* DefaultAvatarSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81C01F992CA59C9400D7363E /* DefaultAvatarSize.swift */; }; 81CF12192C6E686D0074174F /* SDDSRadioboxGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81CF12182C6E686D0074174F /* SDDSRadioboxGroup.swift */; }; 81CF12202C6E74180074174F /* RoundedCornersMask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81CF121F2C6E74180074174F /* RoundedCornersMask.swift */; }; 81D2B1912C32B39B00CAA7FD /* SDDSComponents.h in Headers */ = {isa = PBXBuildFile; fileRef = 81D2B1902C32B39B00CAA7FD /* SDDSComponents.h */; settings = {ATTRIBUTES = (Public, ); }; }; 81D2B1992C32B3E400CAA7FD /* SDDSButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81D2B1982C32B3E400CAA7FD /* SDDSButton.swift */; }; - 81D73C462CC952A900B7025C /* SDDSTextAreaSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81D73C452CC952A900B7025C /* SDDSTextAreaSize.swift */; }; - 81D73C482CC952E700B7025C /* SDDSTextAreaAppearance+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81D73C472CC952E700B7025C /* SDDSTextAreaAppearance+Extensions.swift */; }; - 81D73C492CC9530C00B7025C /* SDDSTextArea+Preview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8102BA372CBEAC1600C589D3 /* SDDSTextArea+Preview.swift */; }; - 81D73C4A2CC9530F00B7025C /* SDDSTextAreaChipGroupSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81CA2C4C2CC69406002AF2DF /* SDDSTextAreaChipGroupSize.swift */; }; - 81D73C4C2CC9547500B7025C /* TextAreaChipSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81D73C4B2CC9547500B7025C /* TextAreaChipSize.swift */; }; 81E968142CBD194F00256968 /* FocusableTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81E968132CBD194F00256968 /* FocusableTextField.swift */; }; 81E9FA8F2C92B13E0041B5FF /* SDDSTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81E9FA8E2C92B13E0041B5FF /* SDDSTextField.swift */; }; 81F752E22CECD40A000156D9 /* BasicButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81F752E12CECD40A000156D9 /* BasicButton.swift */; }; @@ -144,9 +150,25 @@ 8102BA2B2CBE9B3300C589D3 /* TextAreaAccessibility.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextAreaAccessibility.swift; sourceTree = ""; }; 8102BA2C2CBE9B3300C589D3 /* TextAreaAppearance.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextAreaAppearance.swift; sourceTree = ""; }; 8102BA2D2CBE9B3300C589D3 /* TextAreaSizeConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextAreaSizeConfiguration.swift; sourceTree = ""; }; - 8102BA372CBEAC1600C589D3 /* SDDSTextArea+Preview.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SDDSTextArea+Preview.swift"; sourceTree = ""; }; 8102BA392CBEAFB800C589D3 /* PlaceholderTextEditor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaceholderTextEditor.swift; sourceTree = ""; }; 8102BA3B2CBEB32700C589D3 /* ExpandingTextEditor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExpandingTextEditor.swift; sourceTree = ""; }; + 811D2E0C2D10A4BA001C0F48 /* TextFieldAppearance+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "TextFieldAppearance+Extensions.swift"; sourceTree = ""; }; + 811D2E0D2D10A4BA001C0F48 /* TextFieldDefaultSize.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextFieldDefaultSize.swift; sourceTree = ""; }; + 811D2E0E2D10A4BA001C0F48 /* TextFieldTypography.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextFieldTypography.swift; sourceTree = ""; }; + 811D2E0F2D10A4BA001C0F48 /* SDDSTextField+Preview.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SDDSTextField+Preview.swift"; sourceTree = ""; }; + 811D2E102D10A4BA001C0F48 /* ChipAppearance+SDDSTextField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "ChipAppearance+SDDSTextField.swift"; sourceTree = ""; }; + 811D2E112D10A4BA001C0F48 /* TextFieldChipSize.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextFieldChipSize.swift; sourceTree = ""; }; + 811D2E182D10A59F001C0F48 /* TextAreaChipSize.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextAreaChipSize.swift; sourceTree = ""; }; + 811D2E192D10A59F001C0F48 /* SDDSTextAreaSize.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SDDSTextAreaSize.swift; sourceTree = ""; }; + 811D2E1A2D10A59F001C0F48 /* SDDSTextAreaAppearance+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SDDSTextAreaAppearance+Extensions.swift"; sourceTree = ""; }; + 811D2E1B2D10A59F001C0F48 /* SDDSTextAreaChipGroupSize.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SDDSTextAreaChipGroupSize.swift; sourceTree = ""; }; + 811D2E1C2D10A59F001C0F48 /* SDDSTextArea+Preview.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SDDSTextArea+Preview.swift"; sourceTree = ""; }; + 811D2E222D10A5B4001C0F48 /* SDDSAvatarGroupPreview.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SDDSAvatarGroupPreview.swift; sourceTree = ""; }; + 811D2E242D10A64C001C0F48 /* SDDSCheckboxGroup+Preview.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SDDSCheckboxGroup+Preview.swift"; sourceTree = ""; }; + 811D2E262D10A6CF001C0F48 /* SDDSChipGroup+Preview.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SDDSChipGroup+Preview.swift"; sourceTree = ""; }; + 811D2E272D10A6CF001C0F48 /* DefaultChipGroupSize.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultChipGroupSize.swift; sourceTree = ""; }; + 811D2E2A2D10A7B9001C0F48 /* SDDSRadioboxGroup+Preview.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SDDSRadioboxGroup+Preview.swift"; sourceTree = ""; }; + 811D2E2C2D115FDD001C0F48 /* AppearanceVariation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppearanceVariation.swift; sourceTree = ""; }; 811DE1532C50098D000DD354 /* SDDSChip.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SDDSChip.swift; sourceTree = ""; }; 811DE1552C50179F000DD354 /* ChipAppearance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChipAppearance.swift; sourceTree = ""; }; 811DE1572C5017C3000DD354 /* ProgressBarAppearance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProgressBarAppearance.swift; sourceTree = ""; }; @@ -158,49 +180,48 @@ 811DE1742C5787EF000DD354 /* SDDSCheckboxGroup.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = SDDSCheckboxGroup.md; sourceTree = ""; }; 814185C62C33080400D8E524 /* Spacing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Spacing.swift; sourceTree = ""; }; 814185C92C34260300D8E524 /* ButtonSize.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonSize.swift; sourceTree = ""; }; - 814E30262C99A502004601F7 /* TextFieldChipSize.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextFieldChipSize.swift; sourceTree = ""; }; - 814E30282C99A58B004601F7 /* ChipAppearance+SDDSTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ChipAppearance+SDDSTextField.swift"; sourceTree = ""; }; - 814E303C2C99B013004601F7 /* SDDSAvatarPreview.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SDDSAvatarPreview.swift; sourceTree = ""; }; - 814E303F2C99B067004601F7 /* SDDSAvatarGroupPreview.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SDDSAvatarGroupPreview.swift; sourceTree = ""; }; 814E307D2C99CEE1004601F7 /* View+DebugModifiers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+DebugModifiers.swift"; sourceTree = ""; }; 8154644A2C96FDE600DAD8EA /* ViewProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewProvider.swift; sourceTree = ""; }; 8159F72F2C5D1CFE00622836 /* FillStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FillStyle.swift; sourceTree = ""; }; 816243402CB81A4300506E1C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 81685C222CFF87CA00278446 /* AppearanceVariation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppearanceVariation.swift; sourceTree = ""; }; + 81685C242CFF881300278446 /* SwitchAppearance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwitchAppearance.swift; sourceTree = ""; }; + 81685C262CFF883900278446 /* SwitchSizeConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwitchSizeConfiguration.swift; sourceTree = ""; }; + 81685C282CFF884B00278446 /* SwitchAccessibility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwitchAccessibility.swift; sourceTree = ""; }; + 81685C2A2CFF898D00278446 /* SwitchAppearance+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SwitchAppearance+Extensions.swift"; sourceTree = ""; }; 816AA9A62C97280400C3347C /* PlaceholderTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaceholderTextField.swift; sourceTree = ""; }; 816AA9AB2C97419A00C3347C /* TextFieldDebugConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextFieldDebugConfiguration.swift; sourceTree = ""; }; 816AA9AD2C97421F00C3347C /* TextFieldAppearance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextFieldAppearance.swift; sourceTree = ""; }; 816AA9AF2C97424000C3347C /* TextFieldSizeConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextFieldSizeConfiguration.swift; sourceTree = ""; }; 816AA9B12C97425F00C3347C /* TextFieldAccessibility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextFieldAccessibility.swift; sourceTree = ""; }; + 817339D42D033BF50092608A /* ProgressBarSizeConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProgressBarSizeConfiguration.swift; sourceTree = ""; }; + 817339D62D033C0A0092608A /* ProgressBarAccessibility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProgressBarAccessibility.swift; sourceTree = ""; }; + 817339DA2D033D3A0092608A /* CheckboxData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckboxData.swift; sourceTree = ""; }; + 817339DD2D033D860092608A /* ChipAccessibility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChipAccessibility.swift; sourceTree = ""; }; + 817339DF2D033D940092608A /* ChipSizeConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChipSizeConfiguration.swift; sourceTree = ""; }; + 817339E12D033DA30092608A /* ChipBorderStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChipBorderStyle.swift; sourceTree = ""; }; + 817339E32D033E310092608A /* ChipData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChipData.swift; sourceTree = ""; }; + 817339E52D033E650092608A /* RadioboxData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioboxData.swift; sourceTree = ""; }; + 817339E82D033E8E0092608A /* AvatarAppearance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvatarAppearance.swift; sourceTree = ""; }; + 817339EA2D033EB90092608A /* AvatarStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvatarStatus.swift; sourceTree = ""; }; + 817339EC2D033EC90092608A /* AvatarSizeConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvatarSizeConfiguration.swift; sourceTree = ""; }; + 817339EE2D033EE40092608A /* AvatarAccessibility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvatarAccessibility.swift; sourceTree = ""; }; + 817339F02D033EF30092608A /* AvatarImageSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvatarImageSource.swift; sourceTree = ""; }; + 817339F22D035D2D0092608A /* CheckboxAppearance+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CheckboxAppearance+Extensions.swift"; sourceTree = ""; }; + 817339FB2D03628F0092608A /* RadioboxAppearance+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "RadioboxAppearance+Extensions.swift"; sourceTree = ""; }; + 81733A052D0362D00092608A /* SDDSCheckboxPreview.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SDDSCheckboxPreview.swift; sourceTree = ""; }; + 81733A072D03633A0092608A /* SDDSRadioboxPreview.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SDDSRadioboxPreview.swift; sourceTree = ""; }; + 81733A0B2D0367930092608A /* ProgressBarAppearance+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ProgressBarAppearance+Extensions.swift"; sourceTree = ""; }; + 81733A262D072E0F0092608A /* AvatarAppearance+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AvatarAppearance+Extensions.swift"; sourceTree = ""; }; + 81733A2C2D0730A10092608A /* SDDSProgressBarPreview.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SDDSProgressBarPreview.swift; sourceTree = ""; }; + 81733A2E2D0731420092608A /* SDDSAvatarPreview.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SDDSAvatarPreview.swift; sourceTree = ""; }; + 81733A382D07332C0092608A /* ChipAppearance+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ChipAppearance+Extensions.swift"; sourceTree = ""; }; + 81733A3F2D0738300092608A /* SDDSChipPreview.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SDDSChipPreview.swift; sourceTree = ""; }; 817580E82C37E04000E45207 /* SpinnerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpinnerView.swift; sourceTree = ""; }; 8178A7392C733C5000DFDA61 /* SDDSThemeCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDDSThemeCore.framework; path = "../../Library/Developer/Xcode/DerivedData/SDDSThemeBuilder-fqfdpznjjmrsjyexwtopazivejlq/Build/Products/Debug-iphoneos/SDDSThemeCore.framework"; sourceTree = ""; }; 8178A73D2C733C5900DFDA61 /* SDDSThemeUtilities.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDDSThemeUtilities.framework; path = "../../Library/Developer/Xcode/DerivedData/SDDSThemeBuilder-fqfdpznjjmrsjyexwtopazivejlq/Build/Products/Debug-iphoneos/SDDSThemeUtilities.framework"; sourceTree = ""; }; - 817AE4DE2C99925900F427DE /* SDDSCheckboxGroup+Preview.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SDDSCheckboxGroup+Preview.swift"; sourceTree = ""; }; - 817AE4E02C99925900F427DE /* SDDSRadiobox+Preview.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SDDSRadiobox+Preview.swift"; sourceTree = ""; }; - 817AE4E12C99925900F427DE /* RadioboxAppearance+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "RadioboxAppearance+Extensions.swift"; sourceTree = ""; }; - 817AE4E22C99925900F427DE /* SDDSRadioboxSize.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SDDSRadioboxSize.swift; sourceTree = ""; }; - 817AE4E32C99925900F427DE /* RadioboxTypography.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RadioboxTypography.swift; sourceTree = ""; }; - 817AE4E52C99925900F427DE /* TextFieldAppearance+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "TextFieldAppearance+Extensions.swift"; sourceTree = ""; }; - 817AE4E62C99925900F427DE /* SDDSTextField+Preview.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SDDSTextField+Preview.swift"; sourceTree = ""; }; - 817AE4E72C99925900F427DE /* TextFieldDefaultSize.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextFieldDefaultSize.swift; sourceTree = ""; }; - 817AE4E82C99925900F427DE /* TextFieldTypography.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextFieldTypography.swift; sourceTree = ""; }; - 817AE4F82C99925A00F427DE /* SwitchTypography.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwitchTypography.swift; sourceTree = ""; }; - 817AE4F92C99925A00F427DE /* SDDSSwitch+Preview.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SDDSSwitch+Preview.swift"; sourceTree = ""; }; - 817AE4FA2C99925A00F427DE /* SDDSSwitchSize.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SDDSSwitchSize.swift; sourceTree = ""; }; - 817AE4FB2C99925A00F427DE /* SwitchAppearance+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SwitchAppearance+Extensions.swift"; sourceTree = ""; }; - 817AE4FD2C99925A00F427DE /* SDDSCheckbox+Preview.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SDDSCheckbox+Preview.swift"; sourceTree = ""; }; - 817AE4FE2C99925A00F427DE /* CheckboxTypography.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheckboxTypography.swift; sourceTree = ""; }; - 817AE4FF2C99925A00F427DE /* CheckboxAppearance+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CheckboxAppearance+Extensions.swift"; sourceTree = ""; }; - 817AE5002C99925A00F427DE /* SDDSCheckboxSize.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SDDSCheckboxSize.swift; sourceTree = ""; }; - 817AE5022C99925A00F427DE /* DefaultProgressBarSize.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultProgressBarSize.swift; sourceTree = ""; }; - 817AE5032C99925A00F427DE /* SDDSProgress+Preview.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SDDSProgress+Preview.swift"; sourceTree = ""; }; - 817AE5042C99925A00F427DE /* ProgressBarAppearance+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "ProgressBarAppearance+Extensions.swift"; sourceTree = ""; }; + 817AE4F92C99925A00F427DE /* SDDSSwitchPreview.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SDDSSwitchPreview.swift; sourceTree = ""; }; 817AE5052C99925A00F427DE /* SDDSComponentsPreview.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SDDSComponentsPreview.swift; sourceTree = ""; }; - 817AE5072C99925A00F427DE /* DefaultChipGroupSize.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultChipGroupSize.swift; sourceTree = ""; }; - 817AE5082C99925A00F427DE /* SDDSChipGroup+Preview.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SDDSChipGroup+Preview.swift"; sourceTree = ""; }; - 817AE50A2C99925A00F427DE /* SDDSRadioboxGroup+Preview.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SDDSRadioboxGroup+Preview.swift"; sourceTree = ""; }; - 817AE50C2C99925A00F427DE /* SDDSChipSize.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SDDSChipSize.swift; sourceTree = ""; }; - 817AE50D2C99925A00F427DE /* SDDSChip+Preview.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SDDSChip+Preview.swift"; sourceTree = ""; }; - 817AE50E2C99925A00F427DE /* ChipAppearance+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "ChipAppearance+Extensions.swift"; sourceTree = ""; }; 817D9F182C37078F006C4814 /* SDDSIcons.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SDDSIcons.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 818C03B12C418A90002C6D0A /* SDDSSwitch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SDDSSwitch.swift; sourceTree = ""; }; 818C03B42C418C50002C6D0A /* TypographyConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TypographyConfiguration.swift; sourceTree = ""; }; @@ -227,7 +248,6 @@ 81998FF32C354C7F009074B7 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 81998FF82C35503D009074B7 /* View+Modifiers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+Modifiers.swift"; sourceTree = ""; }; 81998FFF2C3555D4009074B7 /* Opacity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Opacity.swift; sourceTree = ""; }; - 81A901422CF6E4F200992B04 /* findState.stencil */ = {isa = PBXFileReference; lastKnownFileType = text; path = findState.stencil; sourceTree = ""; }; 81A9014D2CF6E8D600992B04 /* ButtonAppearance+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ButtonAppearance+Extensions.swift"; sourceTree = ""; }; 81A901522CF6EAA800992B04 /* LinkButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LinkButton.swift; sourceTree = ""; }; 81A9015A2CF6EBD300992B04 /* SDDSButtonPreview.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SDDSButtonPreview.swift; sourceTree = ""; }; @@ -236,11 +256,7 @@ 81BBC5992C862817009616CE /* SDDSServeStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SDDSServeStyle.swift; sourceTree = ""; }; 81BBC5C82C8639CC009616CE /* Image+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Image+Extensions.swift"; sourceTree = ""; }; 81BC36812C591B0B00A363D0 /* Package.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Package.swift; sourceTree = ""; }; - 81C01F972CA59C9300D7363E /* AvatarAppearance.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AvatarAppearance.swift; sourceTree = ""; }; - 81C01F982CA59C9400D7363E /* AvatarTypography.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AvatarTypography.swift; sourceTree = ""; }; - 81C01F992CA59C9400D7363E /* DefaultAvatarSize.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultAvatarSize.swift; sourceTree = ""; }; 81CA2C4A2CC693E6002AF2DF /* ScrollViewWrapper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScrollViewWrapper.swift; sourceTree = ""; }; - 81CA2C4C2CC69406002AF2DF /* SDDSTextAreaChipGroupSize.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SDDSTextAreaChipGroupSize.swift; sourceTree = ""; }; 81CBC08E2C821A5600FBDAC8 /* SDDSAvatar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SDDSAvatar.swift; sourceTree = ""; }; 81CBC0932C82244000FBDAC8 /* BackportAsyncImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BackportAsyncImage.swift; sourceTree = ""; }; 81CBC0972C82273100FBDAC8 /* Text+FillModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Text+FillModifier.swift"; sourceTree = ""; }; @@ -257,9 +273,6 @@ 81D2B18D2C32B39B00CAA7FD /* SDDSComponents.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDDSComponents.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 81D2B1902C32B39B00CAA7FD /* SDDSComponents.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDDSComponents.h; sourceTree = ""; }; 81D2B1982C32B3E400CAA7FD /* SDDSButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SDDSButton.swift; sourceTree = ""; }; - 81D73C452CC952A900B7025C /* SDDSTextAreaSize.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SDDSTextAreaSize.swift; sourceTree = ""; }; - 81D73C472CC952E700B7025C /* SDDSTextAreaAppearance+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SDDSTextAreaAppearance+Extensions.swift"; sourceTree = ""; }; - 81D73C4B2CC9547500B7025C /* TextAreaChipSize.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextAreaChipSize.swift; sourceTree = ""; }; 81E968132CBD194F00256968 /* FocusableTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusableTextField.swift; sourceTree = ""; }; 81E9FA8E2C92B13E0041B5FF /* SDDSTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SDDSTextField.swift; sourceTree = ""; }; 81F752E12CECD40A000156D9 /* BasicButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BasicButton.swift; sourceTree = ""; }; @@ -267,14 +280,6 @@ 81F752F12CEE2B40000156D9 /* IconButton+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "IconButton+Extensions.swift"; sourceTree = ""; }; 81F752F32CEE2C35000156D9 /* ButtonAppearance+Variations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ButtonAppearance+Variations.swift"; sourceTree = ""; }; 81F752FE2CEFA3AF000156D9 /* String+Variations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Variations.swift"; sourceTree = ""; }; - 81F753012CEFA58D000156D9 /* BasicButton+Typography.stencil */ = {isa = PBXFileReference; lastKnownFileType = text; path = "BasicButton+Typography.stencil"; sourceTree = ""; }; - 81F753032CEFA694000156D9 /* BasicButton+SizeVariations.stencil */ = {isa = PBXFileReference; lastKnownFileType = text; path = "BasicButton+SizeVariations.stencil"; sourceTree = ""; }; - 81F753052CEFA818000156D9 /* BasicButton+ColorVariations.stencil */ = {isa = PBXFileReference; lastKnownFileType = text; path = "BasicButton+ColorVariations.stencil"; sourceTree = ""; }; - 81F753092CEFA8A9000156D9 /* IconButton+SizeVariations.stencil */ = {isa = PBXFileReference; lastKnownFileType = text; path = "IconButton+SizeVariations.stencil"; sourceTree = ""; }; - 81F7530B2CEFA8C6000156D9 /* IconButton+ColorVariations.stencil */ = {isa = PBXFileReference; lastKnownFileType = text; path = "IconButton+ColorVariations.stencil"; sourceTree = ""; }; - 81F753122CEFAB4A000156D9 /* LinkButton+ColorVariations.stencil */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "LinkButton+ColorVariations.stencil"; sourceTree = ""; }; - 81F753132CEFAB4A000156D9 /* LinkButton+Typography.stencil */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "LinkButton+Typography.stencil"; sourceTree = ""; }; - 81F753142CEFAB4A000156D9 /* LinkButton+SizeVariations.stencil */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "LinkButton+SizeVariations.stencil"; sourceTree = ""; }; 81F7531B2CF46755000156D9 /* ButtonStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonStyle.swift; sourceTree = ""; }; 81F7531D2CF46793000156D9 /* ButtonAlignment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonAlignment.swift; sourceTree = ""; }; 81F753212CF467CC000156D9 /* ButtonLayoutMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonLayoutMode.swift; sourceTree = ""; }; @@ -330,12 +335,21 @@ path = SDDSTextArea; sourceTree = ""; }; + 811D2E0B2D10A31E001C0F48 /* Recovered References */ = { + isa = PBXGroup; + children = ( + 81685C222CFF87CA00278446 /* AppearanceVariation.swift */, + ); + name = "Recovered References"; + sourceTree = ""; + }; 811DE1522C500980000DD354 /* SDDSChip */ = { isa = PBXGroup; children = ( 811DE1532C50098D000DD354 /* SDDSChip.swift */, - 811DE1552C50179F000DD354 /* ChipAppearance.swift */, + 817339E32D033E310092608A /* ChipData.swift */, 811DE15C2C51167A000DD354 /* SDDSChip.md */, + 817339DC2D033D740092608A /* ChipAppearance */, ); path = SDDSChip; sourceTree = ""; @@ -392,10 +406,7 @@ 814E303B2C99AFF2004601F7 /* SDDSAvatar */ = { isa = PBXGroup; children = ( - 81C01F972CA59C9300D7363E /* AvatarAppearance.swift */, - 81C01F982CA59C9400D7363E /* AvatarTypography.swift */, - 81C01F992CA59C9400D7363E /* DefaultAvatarSize.swift */, - 814E303C2C99B013004601F7 /* SDDSAvatarPreview.swift */, + 81733A2E2D0731420092608A /* SDDSAvatarPreview.swift */, ); path = SDDSAvatar; sourceTree = ""; @@ -403,11 +414,22 @@ 814E303E2C99B04C004601F7 /* SDDSAvatarGroup */ = { isa = PBXGroup; children = ( - 814E303F2C99B067004601F7 /* SDDSAvatarGroupPreview.swift */, + 811D2E222D10A5B4001C0F48 /* SDDSAvatarGroupPreview.swift */, ); path = SDDSAvatarGroup; sourceTree = ""; }; + 81685C212CFF87AD00278446 /* SwitchAppearance */ = { + isa = PBXGroup; + children = ( + 81685C242CFF881300278446 /* SwitchAppearance.swift */, + 81685C262CFF883900278446 /* SwitchSizeConfiguration.swift */, + 81685C282CFF884B00278446 /* SwitchAccessibility.swift */, + 81685C2A2CFF898D00278446 /* SwitchAppearance+Extensions.swift */, + ); + path = SwitchAppearance; + sourceTree = ""; + }; 816C62A32CB80ED600352891 /* Constants */ = { isa = PBXGroup; children = ( @@ -416,6 +438,60 @@ path = Constants; sourceTree = ""; }; + 817339D32D033BD20092608A /* ProgressBarAppearance */ = { + isa = PBXGroup; + children = ( + 811DE1572C5017C3000DD354 /* ProgressBarAppearance.swift */, + 817339D42D033BF50092608A /* ProgressBarSizeConfiguration.swift */, + 817339D62D033C0A0092608A /* ProgressBarAccessibility.swift */, + 81733A0B2D0367930092608A /* ProgressBarAppearance+Extensions.swift */, + ); + path = ProgressBarAppearance; + sourceTree = ""; + }; + 817339D82D033C870092608A /* RadioboxAppearance */ = { + isa = PBXGroup; + children = ( + 818C03C82C451424002C6D0A /* RadioboxAppearance.swift */, + 817339FB2D03628F0092608A /* RadioboxAppearance+Extensions.swift */, + ); + path = RadioboxAppearance; + sourceTree = ""; + }; + 817339D92D033CF50092608A /* CheckboxAppearance */ = { + isa = PBXGroup; + children = ( + 818C03C62C45140B002C6D0A /* CheckboxAppearance.swift */, + 817339F22D035D2D0092608A /* CheckboxAppearance+Extensions.swift */, + ); + path = CheckboxAppearance; + sourceTree = ""; + }; + 817339DC2D033D740092608A /* ChipAppearance */ = { + isa = PBXGroup; + children = ( + 811DE1552C50179F000DD354 /* ChipAppearance.swift */, + 817339DD2D033D860092608A /* ChipAccessibility.swift */, + 817339DF2D033D940092608A /* ChipSizeConfiguration.swift */, + 817339E12D033DA30092608A /* ChipBorderStyle.swift */, + 81733A382D07332C0092608A /* ChipAppearance+Extensions.swift */, + ); + path = ChipAppearance; + sourceTree = ""; + }; + 817339E72D033E7E0092608A /* AvatarAppearance */ = { + isa = PBXGroup; + children = ( + 817339E82D033E8E0092608A /* AvatarAppearance.swift */, + 817339EA2D033EB90092608A /* AvatarStatus.swift */, + 817339EC2D033EC90092608A /* AvatarSizeConfiguration.swift */, + 817339EE2D033EE40092608A /* AvatarAccessibility.swift */, + 817339F02D033EF30092608A /* AvatarImageSource.swift */, + 81733A262D072E0F0092608A /* AvatarAppearance+Extensions.swift */, + ); + path = AvatarAppearance; + sourceTree = ""; + }; 817580E72C37E02800E45207 /* Spinner */ = { isa = PBXGroup; children = ( @@ -427,19 +503,20 @@ 817AE4DC2C99925900F427DE /* Components */ = { isa = PBXGroup; children = ( + 817AE5052C99925A00F427DE /* SDDSComponentsPreview.swift */, + 817AE4E42C99925900F427DE /* SDDSTextField */, 81D73C442CC9528300B7025C /* SDDSTextArea */, 814E303E2C99B04C004601F7 /* SDDSAvatarGroup */, 814E303B2C99AFF2004601F7 /* SDDSAvatar */, 817AE4DD2C99925900F427DE /* SDDSCheckboxGroup */, 817AE4DF2C99925900F427DE /* SDDSRadiobox */, - 817AE4E42C99925900F427DE /* SDDSTextField */, 817AE4E92C99925900F427DE /* SDDSButton */, 817AE4F72C99925A00F427DE /* SDDSSwitch */, 817AE4FC2C99925A00F427DE /* SDDSCheckbox */, 817AE5012C99925A00F427DE /* SDDSProgressBar */, - 817AE5052C99925A00F427DE /* SDDSComponentsPreview.swift */, 817AE5062C99925A00F427DE /* SDDSChipGroup */, 817AE5092C99925A00F427DE /* SDDSRadioboxGroup */, + 81BBC5C72C8639BB009616CE /* Utilities */, 817AE50B2C99925A00F427DE /* SDDSChip */, ); path = Components; @@ -448,7 +525,7 @@ 817AE4DD2C99925900F427DE /* SDDSCheckboxGroup */ = { isa = PBXGroup; children = ( - 817AE4DE2C99925900F427DE /* SDDSCheckboxGroup+Preview.swift */, + 811D2E242D10A64C001C0F48 /* SDDSCheckboxGroup+Preview.swift */, ); path = SDDSCheckboxGroup; sourceTree = ""; @@ -456,10 +533,7 @@ 817AE4DF2C99925900F427DE /* SDDSRadiobox */ = { isa = PBXGroup; children = ( - 817AE4E02C99925900F427DE /* SDDSRadiobox+Preview.swift */, - 817AE4E12C99925900F427DE /* RadioboxAppearance+Extensions.swift */, - 817AE4E22C99925900F427DE /* SDDSRadioboxSize.swift */, - 817AE4E32C99925900F427DE /* RadioboxTypography.swift */, + 81733A072D03633A0092608A /* SDDSRadioboxPreview.swift */, ); path = SDDSRadiobox; sourceTree = ""; @@ -467,12 +541,12 @@ 817AE4E42C99925900F427DE /* SDDSTextField */ = { isa = PBXGroup; children = ( - 817AE4E52C99925900F427DE /* TextFieldAppearance+Extensions.swift */, - 817AE4E62C99925900F427DE /* SDDSTextField+Preview.swift */, - 817AE4E72C99925900F427DE /* TextFieldDefaultSize.swift */, - 817AE4E82C99925900F427DE /* TextFieldTypography.swift */, - 814E30262C99A502004601F7 /* TextFieldChipSize.swift */, - 814E30282C99A58B004601F7 /* ChipAppearance+SDDSTextField.swift */, + 811D2E102D10A4BA001C0F48 /* ChipAppearance+SDDSTextField.swift */, + 811D2E0F2D10A4BA001C0F48 /* SDDSTextField+Preview.swift */, + 811D2E0C2D10A4BA001C0F48 /* TextFieldAppearance+Extensions.swift */, + 811D2E112D10A4BA001C0F48 /* TextFieldChipSize.swift */, + 811D2E0D2D10A4BA001C0F48 /* TextFieldDefaultSize.swift */, + 811D2E0E2D10A4BA001C0F48 /* TextFieldTypography.swift */, ); path = SDDSTextField; sourceTree = ""; @@ -488,10 +562,7 @@ 817AE4F72C99925A00F427DE /* SDDSSwitch */ = { isa = PBXGroup; children = ( - 817AE4F82C99925A00F427DE /* SwitchTypography.swift */, - 817AE4F92C99925A00F427DE /* SDDSSwitch+Preview.swift */, - 817AE4FA2C99925A00F427DE /* SDDSSwitchSize.swift */, - 817AE4FB2C99925A00F427DE /* SwitchAppearance+Extensions.swift */, + 817AE4F92C99925A00F427DE /* SDDSSwitchPreview.swift */, ); path = SDDSSwitch; sourceTree = ""; @@ -499,10 +570,7 @@ 817AE4FC2C99925A00F427DE /* SDDSCheckbox */ = { isa = PBXGroup; children = ( - 817AE4FD2C99925A00F427DE /* SDDSCheckbox+Preview.swift */, - 817AE4FE2C99925A00F427DE /* CheckboxTypography.swift */, - 817AE4FF2C99925A00F427DE /* CheckboxAppearance+Extensions.swift */, - 817AE5002C99925A00F427DE /* SDDSCheckboxSize.swift */, + 81733A052D0362D00092608A /* SDDSCheckboxPreview.swift */, ); path = SDDSCheckbox; sourceTree = ""; @@ -510,9 +578,7 @@ 817AE5012C99925A00F427DE /* SDDSProgressBar */ = { isa = PBXGroup; children = ( - 817AE5022C99925A00F427DE /* DefaultProgressBarSize.swift */, - 817AE5032C99925A00F427DE /* SDDSProgress+Preview.swift */, - 817AE5042C99925A00F427DE /* ProgressBarAppearance+Extensions.swift */, + 81733A2C2D0730A10092608A /* SDDSProgressBarPreview.swift */, ); path = SDDSProgressBar; sourceTree = ""; @@ -520,8 +586,8 @@ 817AE5062C99925A00F427DE /* SDDSChipGroup */ = { isa = PBXGroup; children = ( - 817AE5072C99925A00F427DE /* DefaultChipGroupSize.swift */, - 817AE5082C99925A00F427DE /* SDDSChipGroup+Preview.swift */, + 811D2E272D10A6CF001C0F48 /* DefaultChipGroupSize.swift */, + 811D2E262D10A6CF001C0F48 /* SDDSChipGroup+Preview.swift */, ); path = SDDSChipGroup; sourceTree = ""; @@ -529,7 +595,7 @@ 817AE5092C99925A00F427DE /* SDDSRadioboxGroup */ = { isa = PBXGroup; children = ( - 817AE50A2C99925A00F427DE /* SDDSRadioboxGroup+Preview.swift */, + 811D2E2A2D10A7B9001C0F48 /* SDDSRadioboxGroup+Preview.swift */, ); path = SDDSRadioboxGroup; sourceTree = ""; @@ -537,9 +603,7 @@ 817AE50B2C99925A00F427DE /* SDDSChip */ = { isa = PBXGroup; children = ( - 817AE50C2C99925A00F427DE /* SDDSChipSize.swift */, - 817AE50D2C99925A00F427DE /* SDDSChip+Preview.swift */, - 817AE50E2C99925A00F427DE /* ChipAppearance+Extensions.swift */, + 81733A3F2D0738300092608A /* SDDSChipPreview.swift */, ); path = SDDSChip; sourceTree = ""; @@ -569,6 +633,7 @@ children = ( 818C03B12C418A90002C6D0A /* SDDSSwitch.swift */, 818C03C02C43CD4C002C6D0A /* SDDSSwitch.md */, + 81685C212CFF87AD00278446 /* SwitchAppearance */, ); path = SDDSSwitch; sourceTree = ""; @@ -576,7 +641,7 @@ 818C03B32C418C3E002C6D0A /* Common */ = { isa = PBXGroup; children = ( - 81A901412CF6E4E100992B04 /* Templates */, + 811D2E2C2D115FDD001C0F48 /* AppearanceVariation.swift */, 81CA2C4A2CC693E6002AF2DF /* ScrollViewWrapper.swift */, 81CBC0922C82241100FBDAC8 /* BackportAsyncImage */, 818C03B42C418C50002C6D0A /* TypographyConfiguration.swift */, @@ -598,9 +663,10 @@ 818C03C22C45126B002C6D0A /* SDDSCheckbox */ = { isa = PBXGroup; children = ( + 817339DA2D033D3A0092608A /* CheckboxData.swift */, 818C03CA2C45158A002C6D0A /* SDDSCheckbox.swift */, 818C03D32C455763002C6D0A /* SDDSCheckbox.md */, - 818C03C62C45140B002C6D0A /* CheckboxAppearance.swift */, + 817339D92D033CF50092608A /* CheckboxAppearance */, ); path = SDDSCheckbox; sourceTree = ""; @@ -620,8 +686,9 @@ isa = PBXGroup; children = ( 818C03CD2C4515ED002C6D0A /* SDDSRadiobox.swift */, + 817339E52D033E650092608A /* RadioboxData.swift */, 818C03D42C4557BF002C6D0A /* SDDSRadiobox.md */, - 818C03C82C451424002C6D0A /* RadioboxAppearance.swift */, + 817339D82D033C870092608A /* RadioboxAppearance */, ); path = SDDSRadiobox; sourceTree = ""; @@ -630,8 +697,8 @@ isa = PBXGroup; children = ( 818C03E52C47BCDC002C6D0A /* SDDSProgressBar.swift */, - 811DE1572C5017C3000DD354 /* ProgressBarAppearance.swift */, 818C03E72C47C3C4002C6D0A /* SDDSProgressBar.md */, + 817339D32D033BD20092608A /* ProgressBarAppearance */, ); path = SDDSProgressBar; sourceTree = ""; @@ -674,21 +741,12 @@ path = Constants; sourceTree = ""; }; - 81A901412CF6E4E100992B04 /* Templates */ = { - isa = PBXGroup; - children = ( - 81A901422CF6E4F200992B04 /* findState.stencil */, - ); - path = Templates; - sourceTree = ""; - }; 81BBC5732C862492009616CE /* SDDSComponentsPreview */ = { isa = PBXGroup; children = ( 816243402CB81A4300506E1C /* Assets.xcassets */, 816C62A32CB80ED600352891 /* Constants */, 817AE4DC2C99925900F427DE /* Components */, - 81BBC5C72C8639BB009616CE /* Utilities */, 81BBC5742C862492009616CE /* SDDSComponentsPreview.h */, 81BBC5992C862817009616CE /* SDDSServeStyle.swift */, ); @@ -734,6 +792,7 @@ 81CBC0A22C82368300FBDAC8 /* SDDSAvatarModifiers.swift */, 81CBC0992C82325400FBDAC8 /* SDDSAvatar.md */, 81CBC0A62C8238CA00FBDAC8 /* SDDSAvatarModifiers.sourcery */, + 817339E72D033E7E0092608A /* AvatarAppearance */, ); path = SDDSAvatar; sourceTree = ""; @@ -782,6 +841,7 @@ 81BBC5732C862492009616CE /* SDDSComponentsPreview */, 81D2B18E2C32B39B00CAA7FD /* Products */, 81998FD32C3436E1009074B7 /* Frameworks */, + 811D2E0B2D10A31E001C0F48 /* Recovered References */, ); sourceTree = ""; }; @@ -798,11 +858,11 @@ 81D73C442CC9528300B7025C /* SDDSTextArea */ = { isa = PBXGroup; children = ( - 8102BA372CBEAC1600C589D3 /* SDDSTextArea+Preview.swift */, - 81CA2C4C2CC69406002AF2DF /* SDDSTextAreaChipGroupSize.swift */, - 81D73C452CC952A900B7025C /* SDDSTextAreaSize.swift */, - 81D73C472CC952E700B7025C /* SDDSTextAreaAppearance+Extensions.swift */, - 81D73C4B2CC9547500B7025C /* TextAreaChipSize.swift */, + 811D2E1C2D10A59F001C0F48 /* SDDSTextArea+Preview.swift */, + 811D2E1A2D10A59F001C0F48 /* SDDSTextAreaAppearance+Extensions.swift */, + 811D2E1B2D10A59F001C0F48 /* SDDSTextAreaChipGroupSize.swift */, + 811D2E192D10A59F001C0F48 /* SDDSTextAreaSize.swift */, + 811D2E182D10A59F001C0F48 /* TextAreaChipSize.swift */, ); path = SDDSTextArea; sourceTree = ""; @@ -827,35 +887,6 @@ path = SDDSTextField; sourceTree = ""; }; - 81F753002CEFA54B000156D9 /* BasicButton */ = { - isa = PBXGroup; - children = ( - 81F753012CEFA58D000156D9 /* BasicButton+Typography.stencil */, - 81F753032CEFA694000156D9 /* BasicButton+SizeVariations.stencil */, - 81F753052CEFA818000156D9 /* BasicButton+ColorVariations.stencil */, - ); - path = BasicButton; - sourceTree = ""; - }; - 81F753082CEFA896000156D9 /* IconButton */ = { - isa = PBXGroup; - children = ( - 81F753092CEFA8A9000156D9 /* IconButton+SizeVariations.stencil */, - 81F7530B2CEFA8C6000156D9 /* IconButton+ColorVariations.stencil */, - ); - path = IconButton; - sourceTree = ""; - }; - 81F753112CEFAB4A000156D9 /* LinkButton */ = { - isa = PBXGroup; - children = ( - 81F753122CEFAB4A000156D9 /* LinkButton+ColorVariations.stencil */, - 81F753132CEFAB4A000156D9 /* LinkButton+Typography.stencil */, - 81F753142CEFAB4A000156D9 /* LinkButton+SizeVariations.stencil */, - ); - path = LinkButton; - sourceTree = ""; - }; 81F7532F2CF469AC000156D9 /* ButtonAppearance */ = { isa = PBXGroup; children = ( @@ -880,9 +911,6 @@ isa = PBXGroup; children = ( 81F7533E2CF50294000156D9 /* ButtonAppearance+Extensions */, - 81F753082CEFA896000156D9 /* IconButton */, - 81F753112CEFAB4A000156D9 /* LinkButton */, - 81F753002CEFA54B000156D9 /* BasicButton */, ); path = Templates; sourceTree = ""; @@ -1057,7 +1085,6 @@ buildActionMask = 2147483647; files = ( 81998FF42C354C7F009074B7 /* Assets.xcassets in Resources */, - 81A901432CF6E4F200992B04 /* findState.stencil in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1076,49 +1103,33 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 81C01F9A2CA59C9400D7363E /* AvatarAppearance.swift in Sources */, - 817AE5112C99925A00F427DE /* RadioboxAppearance+Extensions.swift in Sources */, - 817AE5142C99925A00F427DE /* TextFieldAppearance+Extensions.swift in Sources */, 817AE5302C99925A00F427DE /* SDDSComponentsPreview.swift in Sources */, - 81C01F9B2CA59C9400D7363E /* AvatarTypography.swift in Sources */, - 817AE5282C99925A00F427DE /* SwitchAppearance+Extensions.swift in Sources */, - 81D73C4C2CC9547500B7025C /* TextAreaChipSize.swift in Sources */, - 817AE5162C99925A00F427DE /* TextFieldDefaultSize.swift in Sources */, - 81D73C462CC952A900B7025C /* SDDSTextAreaSize.swift in Sources */, - 817AE5252C99925A00F427DE /* SwitchTypography.swift in Sources */, - 81C01F9C2CA59C9400D7363E /* DefaultAvatarSize.swift in Sources */, - 817AE5332C99925A00F427DE /* SDDSRadioboxGroup+Preview.swift in Sources */, - 817AE5322C99925A00F427DE /* SDDSChipGroup+Preview.swift in Sources */, + 811D2E1E2D10A59F001C0F48 /* SDDSTextAreaSize.swift in Sources */, + 811D2E132D10A4BA001C0F48 /* TextFieldDefaultSize.swift in Sources */, + 811D2E252D10A64C001C0F48 /* SDDSCheckboxGroup+Preview.swift in Sources */, + 81733A082D03633A0092608A /* SDDSRadioboxPreview.swift in Sources */, + 811D2E1F2D10A59F001C0F48 /* SDDSTextAreaAppearance+Extensions.swift in Sources */, + 811D2E2B2D10A7B9001C0F48 /* SDDSRadioboxGroup+Preview.swift in Sources */, + 811D2E282D10A6CF001C0F48 /* SDDSChipGroup+Preview.swift in Sources */, + 81733A2F2D0731420092608A /* SDDSAvatarPreview.swift in Sources */, 81BBC5C92C8639CC009616CE /* Image+Extensions.swift in Sources */, - 814E303D2C99B013004601F7 /* SDDSAvatarPreview.swift in Sources */, - 817AE5122C99925A00F427DE /* SDDSRadioboxSize.swift in Sources */, - 817AE5342C99925A00F427DE /* SDDSChipSize.swift in Sources */, - 814E30402C99B067004601F7 /* SDDSAvatarGroupPreview.swift in Sources */, - 81D73C4A2CC9530F00B7025C /* SDDSTextAreaChipGroupSize.swift in Sources */, - 817AE5172C99925A00F427DE /* TextFieldTypography.swift in Sources */, - 817AE52C2C99925A00F427DE /* SDDSCheckboxSize.swift in Sources */, - 817AE5312C99925A00F427DE /* DefaultChipGroupSize.swift in Sources */, - 81D73C482CC952E700B7025C /* SDDSTextAreaAppearance+Extensions.swift in Sources */, - 817AE52A2C99925A00F427DE /* CheckboxTypography.swift in Sources */, - 814E30272C99A502004601F7 /* TextFieldChipSize.swift in Sources */, + 81733A2D2D0730A10092608A /* SDDSProgressBarPreview.swift in Sources */, + 811D2E172D10A4BA001C0F48 /* TextFieldChipSize.swift in Sources */, + 811D2E142D10A4BA001C0F48 /* TextFieldTypography.swift in Sources */, 81A9015B2CF6EBD300992B04 /* SDDSButtonPreview.swift in Sources */, - 814E30292C99A58B004601F7 /* ChipAppearance+SDDSTextField.swift in Sources */, - 817AE52B2C99925A00F427DE /* CheckboxAppearance+Extensions.swift in Sources */, + 811D2E212D10A59F001C0F48 /* SDDSTextArea+Preview.swift in Sources */, + 811D2E292D10A6CF001C0F48 /* DefaultChipGroupSize.swift in Sources */, 81BBC59A2C862817009616CE /* SDDSServeStyle.swift in Sources */, - 817AE52D2C99925A00F427DE /* DefaultProgressBarSize.swift in Sources */, - 817AE5102C99925A00F427DE /* SDDSRadiobox+Preview.swift in Sources */, - 81D73C492CC9530C00B7025C /* SDDSTextArea+Preview.swift in Sources */, - 817AE52F2C99925A00F427DE /* ProgressBarAppearance+Extensions.swift in Sources */, - 817AE5362C99925A00F427DE /* ChipAppearance+Extensions.swift in Sources */, - 817AE52E2C99925A00F427DE /* SDDSProgress+Preview.swift in Sources */, - 817AE5262C99925A00F427DE /* SDDSSwitch+Preview.swift in Sources */, - 817AE5352C99925A00F427DE /* SDDSChip+Preview.swift in Sources */, - 817AE5272C99925A00F427DE /* SDDSSwitchSize.swift in Sources */, - 817AE5152C99925A00F427DE /* SDDSTextField+Preview.swift in Sources */, - 817AE5292C99925A00F427DE /* SDDSCheckbox+Preview.swift in Sources */, + 811D2E122D10A4BA001C0F48 /* TextFieldAppearance+Extensions.swift in Sources */, + 811D2E162D10A4BA001C0F48 /* ChipAppearance+SDDSTextField.swift in Sources */, + 817AE5262C99925A00F427DE /* SDDSSwitchPreview.swift in Sources */, + 811D2E232D10A5B4001C0F48 /* SDDSAvatarGroupPreview.swift in Sources */, + 811D2E1D2D10A59F001C0F48 /* TextAreaChipSize.swift in Sources */, + 81733A062D0362D00092608A /* SDDSCheckboxPreview.swift in Sources */, + 81733A402D0738300092608A /* SDDSChipPreview.swift in Sources */, + 811D2E152D10A4BA001C0F48 /* SDDSTextField+Preview.swift in Sources */, 81BBC5952C862764009616CE /* Spacing.swift in Sources */, - 817AE50F2C99925A00F427DE /* SDDSCheckboxGroup+Preview.swift in Sources */, - 817AE5132C99925A00F427DE /* RadioboxTypography.swift in Sources */, + 811D2E202D10A59F001C0F48 /* SDDSTextAreaChipGroupSize.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1126,15 +1137,24 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 811D2E2D2D115FDD001C0F48 /* AppearanceVariation.swift in Sources */, 8102BA322CBE9B3300C589D3 /* TextAreaSizeConfiguration.swift in Sources */, 818C03E62C47BCDC002C6D0A /* SDDSProgressBar.swift in Sources */, + 817339DE2D033D860092608A /* ChipAccessibility.swift in Sources */, + 817339F12D033EF30092608A /* AvatarImageSource.swift in Sources */, 818C03BF2C43C371002C6D0A /* DebugModifier.swift in Sources */, + 817339D72D033C0A0092608A /* ProgressBarAccessibility.swift in Sources */, 814E30392C99AFB3004601F7 /* SDDSAvatarGroup.swift in Sources */, 814E307E2C99CEE1004601F7 /* View+DebugModifiers.swift in Sources */, + 817339D52D033BF50092608A /* ProgressBarSizeConfiguration.swift in Sources */, 818FE9312C3C1CDC00F64958 /* Components.swift in Sources */, + 817339E42D033E310092608A /* ChipData.swift in Sources */, 818C03CB2C45158A002C6D0A /* SDDSCheckbox.swift in Sources */, 811DE1732C57868F000DD354 /* SDDSCheckboxGroup.swift in Sources */, + 817339FC2D03628F0092608A /* RadioboxAppearance+Extensions.swift in Sources */, 818C03B22C418A90002C6D0A /* SDDSSwitch.swift in Sources */, + 817339DB2D033D3A0092608A /* CheckboxData.swift in Sources */, + 81685C272CFF883900278446 /* SwitchSizeConfiguration.swift in Sources */, 81E968142CBD194F00256968 /* FocusableTextField.swift in Sources */, 816AA9AC2C97419A00C3347C /* TextFieldDebugConfiguration.swift in Sources */, 818C03E32C479003002C6D0A /* Image+Extensions.swift in Sources */, @@ -1142,19 +1162,25 @@ 814E303A2C99AFBD004601F7 /* BackportAsyncImage.swift in Sources */, 81CF12192C6E686D0074174F /* SDDSRadioboxGroup.swift in Sources */, 814185CA2C34260300D8E524 /* ButtonSize.swift in Sources */, + 817339ED2D033EC90092608A /* AvatarSizeConfiguration.swift in Sources */, + 81733A3A2D0733460092608A /* ChipAppearance+Extensions.swift in Sources */, 81F753422CF505DE000156D9 /* IconButton+Extensions.swift in Sources */, 81F752E22CECD40A000156D9 /* BasicButton.swift in Sources */, 814E30412C99B090004601F7 /* Text+FillModifier.swift in Sources */, + 817339E62D033E650092608A /* RadioboxData.swift in Sources */, 816C62A22CB80EC400352891 /* Opacity.swift in Sources */, 814E30382C99AFB0004601F7 /* SDDSAvatarModifiers.swift in Sources */, 81D2B1992C32B3E400CAA7FD /* SDDSButton.swift in Sources */, + 817339E22D033DA30092608A /* ChipBorderStyle.swift in Sources */, 81F753222CF467CC000156D9 /* ButtonLayoutMode.swift in Sources */, 81F753262CF467F6000156D9 /* ButtonIconAttributes.swift in Sources */, + 817339EB2D033EB90092608A /* AvatarStatus.swift in Sources */, 81F7532C2CF46885000156D9 /* ButtonShapeStyle.swift in Sources */, 81A901532CF6EAA800992B04 /* LinkButton.swift in Sources */, 81F7531C2CF46755000156D9 /* ButtonStyle.swift in Sources */, 81F753282CF46831000156D9 /* ButtonColor.swift in Sources */, 811DE1582C5017C3000DD354 /* ProgressBarAppearance.swift in Sources */, + 817339F32D035D2D0092608A /* CheckboxAppearance+Extensions.swift in Sources */, 811DE1562C50179F000DD354 /* ChipAppearance.swift in Sources */, 81CF12202C6E74180074174F /* RoundedCornersMask.swift in Sources */, 8102BA2F2CBE9B3300C589D3 /* SDDSTextArea.swift in Sources */, @@ -1169,8 +1195,11 @@ 811DE1542C50098D000DD354 /* SDDSChip.swift in Sources */, 8102BA3C2CBEB32700C589D3 /* ExpandingTextEditor.swift in Sources */, 81F7531E2CF46793000156D9 /* ButtonAlignment.swift in Sources */, + 81733A0D2D0367BD0092608A /* ProgressBarAppearance+Extensions.swift in Sources */, 81F7532E2CF4689C000156D9 /* ButtonAccessibility.swift in Sources */, + 81685C2B2CFF898D00278446 /* SwitchAppearance+Extensions.swift in Sources */, 818C03B92C43B99B002C6D0A /* ColorToken+Extensions.swift in Sources */, + 817339E92D033E8E0092608A /* AvatarAppearance.swift in Sources */, 811DE1712C5783B6000DD354 /* HierarchicalList.swift in Sources */, 818C03D02C451651002C6D0A /* SelectionControlAppearance.swift in Sources */, 814E30362C99AFAB004601F7 /* SDDSAvatar.swift in Sources */, @@ -1179,17 +1208,22 @@ 8154644B2C96FDE600DAD8EA /* ViewProvider.swift in Sources */, 81F7532A2CF4684F000156D9 /* ButtonAppearance.swift in Sources */, 818C03C52C4512A6002C6D0A /* SelectionControl.swift in Sources */, + 817339E02D033D940092608A /* ChipSizeConfiguration.swift in Sources */, + 817339EF2D033EE40092608A /* AvatarAccessibility.swift in Sources */, + 81733A2B2D072FB70092608A /* AvatarAppearance+Extensions.swift in Sources */, 811DE15B2C5017FE000DD354 /* SDDSChipGroup.swift in Sources */, 81E9FA8F2C92B13E0041B5FF /* SDDSTextField.swift in Sources */, 8102BA3A2CBEAFB800C589D3 /* PlaceholderTextEditor.swift in Sources */, 818C03C72C45140B002C6D0A /* CheckboxAppearance.swift in Sources */, 814E30372C99AFAE004601F7 /* SDDSAvatarData.swift in Sources */, 81A9014F2CF6E8E400992B04 /* ButtonAppearance+Extensions.swift in Sources */, + 81685C292CFF884B00278446 /* SwitchAccessibility.swift in Sources */, 8102BA302CBE9B3300C589D3 /* TextAreaAccessibility.swift in Sources */, 81F753382CF4FFFD000156D9 /* String+Variations.swift in Sources */, 81F7533D2CF501AF000156D9 /* ButtonAppearanceVariation.swift in Sources */, 81F752E42CECD4B1000156D9 /* IconButton.swift in Sources */, 817580E92C37E04000E45207 /* SpinnerView.swift in Sources */, + 81685C252CFF881300278446 /* SwitchAppearance.swift in Sources */, 818C03B52C418C50002C6D0A /* TypographyConfiguration.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSAvatar/AvatarAppearance.swift b/SDDSComponents/SDDSComponentsPreview/Components/SDDSAvatar/AvatarAppearance.swift deleted file mode 100644 index 4cdc4dc19..000000000 --- a/SDDSComponents/SDDSComponentsPreview/Components/SDDSAvatar/AvatarAppearance.swift +++ /dev/null @@ -1,17 +0,0 @@ -import Foundation -import SDDSComponents -import SDDSServTheme -import SwiftUI - -public extension AvatarAppearance { - static var `default`: AvatarAppearance { - AvatarAppearance( - textFillStyle: .gradient(Gradients.textDefaultAccentGradient), - backgroundFillStyle: .gradient(Gradients.surfaceDefaultAccentGradient), - backgroundOpacity: 0.2, - onlineStatusColor: Colors.textDefaultAccent, - offlineStatusColor: Colors.surfaceOnLightSolidTertiary, - textTypography: AvatarTypography.title - ) - } -} diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSAvatar/SDDSAvatarPreview.swift b/SDDSComponents/SDDSComponentsPreview/Components/SDDSAvatar/SDDSAvatarPreview.swift index 5594c9983..d94cbdd83 100644 --- a/SDDSComponents/SDDSComponentsPreview/Components/SDDSAvatar/SDDSAvatarPreview.swift +++ b/SDDSComponents/SDDSComponentsPreview/Components/SDDSAvatar/SDDSAvatarPreview.swift @@ -1,120 +1,20 @@ import Foundation -import SwiftUI import SDDSComponents import SDDSServTheme +import SwiftUI // MARK: - Preview - struct SDDSAvatarPreview: PreviewProvider { static var previews: some View { - Group { - // Online Status Previews - SDDSAvatar( - text: "JD", - image: nil, - placeholderImage: nil, - status: .online, - appearance: .default, - size: DefaultAvatarSize.extraExtraLarge, - accessibility: defaultAccessibility - ) - .previewDisplayName("Online - Text Only") - - SDDSAvatar( - text: "", - image: .image(Image.image("checker")), - placeholderImage: nil, - status: .online, - appearance: .default, - size: DefaultAvatarSize.extraExtraLarge, - accessibility: defaultAccessibility - ) - .previewDisplayName("Online - Image") - - SDDSAvatar( - text: "JD", - image: nil, - placeholderImage: .image(Image.image("checker")), - status: .online, - appearance: .default, - size: DefaultAvatarSize.extraExtraLarge, - accessibility: defaultAccessibility - ) - .previewDisplayName("Online - Placeholder with Text") - - // Offline Status Previews - SDDSAvatar( - text: "JD", - image: nil, - placeholderImage: nil, - status: .offline, - appearance: .default, - size: DefaultAvatarSize.extraExtraLarge, - accessibility: defaultAccessibility - ) - .previewDisplayName("Offline - Text Only") - - SDDSAvatar( - text: "", - image: .image(Image.image("checker")), - placeholderImage: nil, - status: .offline, - appearance: .default, - size: DefaultAvatarSize.extraExtraLarge, - accessibility: defaultAccessibility - ) - .previewDisplayName("Offline - Image") - - SDDSAvatar( - text: "JD", - image: nil, - placeholderImage: .image(Image.image("checker")), - status: .offline, - appearance: .default, - size: DefaultAvatarSize.extraExtraLarge, - accessibility: defaultAccessibility - ) - .previewDisplayName("Offline - Placeholder with Text") - - // Hidden Status Previews - SDDSAvatar( - text: "JD", - image: nil, - placeholderImage: nil, - status: .hidden, - appearance: .default, - size: DefaultAvatarSize.extraExtraLarge, - accessibility: defaultAccessibility - ) - .previewDisplayName("Hidden - Text Only") - - SDDSAvatar( - text: "", - image: .image(Image.image("checker")), - placeholderImage: nil, - status: .hidden, - appearance: .default, - size: DefaultAvatarSize.extraExtraLarge, - accessibility: defaultAccessibility - ) - .previewDisplayName("Hidden - Image") - - SDDSAvatar( - text: "JD", - image: nil, - placeholderImage: .image(Image.image("checker")), - status: .hidden, - appearance: .default, - size: DefaultAvatarSize.extraExtraLarge, - accessibility: defaultAccessibility - ) - .previewDisplayName("Hidden - Placeholder with Text") - } - .previewLayout(.sizeThatFits) - .padding() - } - - private static var defaultAccessibility: AvatarAccessibility { - AvatarAccessibility(label: "User Avatar", hint: "Displays user status and initials or image") + SDDSAvatar( + text: "", + image: .image(Image.image("checker")), + placeholderImage: nil, + status: .online, + appearance: SDDSAvatar.extraExtraLarge.medium.appearance, + accessibility: AvatarAccessibility() + ) + .previewLayout(PreviewLayout.sizeThatFits) + .previewDisplayName("Default") } } diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSAvatarGroup/SDDSAvatarGroupPreview.swift b/SDDSComponents/SDDSComponentsPreview/Components/SDDSAvatarGroup/SDDSAvatarGroupPreview.swift index 238c99c66..f4143c071 100644 --- a/SDDSComponents/SDDSComponentsPreview/Components/SDDSAvatarGroup/SDDSAvatarGroupPreview.swift +++ b/SDDSComponents/SDDSComponentsPreview/Components/SDDSAvatarGroup/SDDSAvatarGroupPreview.swift @@ -22,8 +22,7 @@ struct SDDSAvatarGroupPreview: PreviewProvider { image: nil, placeholderImage: nil, status: .online, - appearance: .default, - size: DefaultAvatarSize.extraExtraLarge, + appearance: SDDSAvatar.large.default.appearance, accessibility: defaultAccessibility ), SDDSAvatarData( @@ -31,8 +30,7 @@ struct SDDSAvatarGroupPreview: PreviewProvider { image: .image(Image(systemName: "person.fill")), placeholderImage: nil, status: .offline, - appearance: .default, - size: DefaultAvatarSize.extraExtraLarge, + appearance: SDDSAvatar.large.default.appearance, accessibility: defaultAccessibility ), SDDSAvatarData( @@ -40,8 +38,7 @@ struct SDDSAvatarGroupPreview: PreviewProvider { image: .image(Image(systemName: "person.fill")), placeholderImage: nil, status: .offline, - appearance: .default, - size: DefaultAvatarSize.extraExtraLarge, + appearance: SDDSAvatar.large.default.appearance, accessibility: defaultAccessibility ) ] @@ -53,8 +50,7 @@ struct SDDSAvatarGroupPreview: PreviewProvider { image: nil, placeholderImage: nil, status: .hidden, - appearance: .default, - size: DefaultAvatarSize.extraExtraLarge, + appearance: SDDSAvatar.large.default.appearance, accessibility: defaultAccessibility ) } diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSCheckbox/CheckboxAppearance+Extensions.swift b/SDDSComponents/SDDSComponentsPreview/Components/SDDSCheckbox/CheckboxAppearance+Extensions.swift deleted file mode 100644 index 14d7c2aec..000000000 --- a/SDDSComponents/SDDSComponentsPreview/Components/SDDSCheckbox/CheckboxAppearance+Extensions.swift +++ /dev/null @@ -1,16 +0,0 @@ -import Foundation -import SwiftUI -import SDDSServTheme -import SDDSComponents - -public extension CheckboxAppearance { - static var `default`: Self { - .init( - titleTypography: RadioboxTypography.label, - subtitleTypography: RadioboxTypography.description, - titleColor: .backgroundInversePrimary, - subtitleColor: .surfaceInverseSolidPrimary.withOpacity(0.56), - disabledAlpha: 0.4 - ) - } -} diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSCheckbox/SDDSCheckbox+Preview.swift b/SDDSComponents/SDDSComponentsPreview/Components/SDDSCheckbox/SDDSCheckbox+Preview.swift deleted file mode 100644 index 394d6354e..000000000 --- a/SDDSComponents/SDDSComponentsPreview/Components/SDDSCheckbox/SDDSCheckbox+Preview.swift +++ /dev/null @@ -1,84 +0,0 @@ -import Foundation -import SDDSComponents -import SwiftUI - -// MARK: - Preview -struct SDDSCheckboxPreview: PreviewProvider { - static var previews: some View { - Group { - SDDSCheckbox.defaultExample - .previewLayout(PreviewLayout.sizeThatFits) - .previewDisplayName("Default") - .debug() - - SDDSCheckbox.withoutDescription - .previewLayout(PreviewLayout.sizeThatFits) - .previewDisplayName("Without Description") - .debug() - - SDDSCheckbox.withoutLabel - .previewLayout(PreviewLayout.sizeThatFits) - .previewDisplayName("Without Label") - .debug() - - SDDSCheckbox.withoutLabelAndDescription - .previewLayout(PreviewLayout.sizeThatFits) - .previewDisplayName("Without Label and Description") - .debug() - } - } -} - -extension SDDSCheckbox { - static var defaultExample: SDDSCheckbox { - .init( - state: .constant(.selected), - title: "Label", - subtitle: "Description", - isEnabled: true, - images: .checkbox, - size: SDDSCheckboxSize.medium, - appearance: .default, - accessibility: SelectionControlAccessibility() - ) - } - - static var withoutDescription: SDDSCheckbox { - .init( - state: .constant(.selected), - title: "Label", - subtitle: nil, - isEnabled: true, - images: .checkbox, - size: SDDSCheckboxSize.medium, - appearance: .default, - accessibility: SelectionControlAccessibility() - ) - } - - static var withoutLabel: SDDSCheckbox { - .init( - state: .constant(.selected), - title: "", - subtitle: "Description", - isEnabled: true, - images: .checkbox, - size: SDDSCheckboxSize.medium, - appearance: .default, - accessibility: SelectionControlAccessibility() - ) - } - - static var withoutLabelAndDescription: SDDSCheckbox { - .init( - state: .constant(.selected), - title: "", - subtitle: nil, - isEnabled: true, - images: .checkbox, - size: SDDSCheckboxSize.medium, - appearance: .default, - accessibility: SelectionControlAccessibility() - ) - } -} diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSCheckbox/SDDSCheckboxPreview.swift b/SDDSComponents/SDDSComponentsPreview/Components/SDDSCheckbox/SDDSCheckboxPreview.swift new file mode 100644 index 000000000..78c6e31b7 --- /dev/null +++ b/SDDSComponents/SDDSComponentsPreview/Components/SDDSCheckbox/SDDSCheckboxPreview.swift @@ -0,0 +1,20 @@ +import Foundation +import SDDSComponents +import SDDSServTheme +import SwiftUI + +// MARK: - Preview +struct SDDSCheckboxPreview: PreviewProvider { + static var previews: some View { + SDDSCheckbox( + state: .constant(.indeterminate), + title: "Valur", + subtitle: "Description", + isEnabled: true, + images: .checkbox, + appearance: SDDSCheckbox.medium.default.appearance + ) + .previewLayout(PreviewLayout.sizeThatFits) + .previewDisplayName("Default") + } +} diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSCheckboxGroup/SDDSCheckboxGroup+Preview.swift b/SDDSComponents/SDDSComponentsPreview/Components/SDDSCheckboxGroup/SDDSCheckboxGroup+Preview.swift index 041772af8..0fe45e17c 100644 --- a/SDDSComponents/SDDSComponentsPreview/Components/SDDSCheckboxGroup/SDDSCheckboxGroup+Preview.swift +++ b/SDDSComponents/SDDSComponentsPreview/Components/SDDSCheckboxGroup/SDDSCheckboxGroup+Preview.swift @@ -12,8 +12,7 @@ struct SDDSCheckboxGroupPreview: PreviewProvider { subtitle: "Parent Description", isEnabled: true, images: SelectionControlStateImages.checkbox, - size: SDDSCheckboxSize.medium, - appearance: CheckboxAppearance.default, + appearance: SDDSCheckbox.medium.default.appearance, accessibility: SelectionControlAccessibility() ) @@ -24,8 +23,7 @@ struct SDDSCheckboxGroupPreview: PreviewProvider { subtitle: "Description \(index + 1)", isEnabled: true, images: SelectionControlStateImages.checkbox, - size: SDDSCheckboxSize.medium, - appearance: CheckboxAppearance.default, + appearance: SDDSCheckbox.medium.default.appearance, accessibility: SelectionControlAccessibility() ) } diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSChip/SDDSChip+Preview.swift b/SDDSComponents/SDDSComponentsPreview/Components/SDDSChip/SDDSChip+Preview.swift deleted file mode 100644 index 52c12ec39..000000000 --- a/SDDSComponents/SDDSComponentsPreview/Components/SDDSChip/SDDSChip+Preview.swift +++ /dev/null @@ -1,103 +0,0 @@ -import Foundation -import SwiftUI -import SDDSComponents -import SDDSServTheme - -extension SDDSChip { - static var defaultExample: SDDSChip { - SDDSChip( - title: "Label", - isEnabled: true, - iconImage: Image.image("chipIcon"), - buttonImage: Image.image("chipClose"), - appearance: .default, - size: SDDSChipSize.large(.pilled), - removeAction: {} - ) - } - - static var defaultBorderExample: SDDSChip { - SDDSChip( - title: "Label", - isEnabled: true, - iconImage: Image.image("chipIcon"), - buttonImage: Image.image("chipClose"), - appearance: ChipAppearance.default, - size: SDDSChipSize.medium(.pilled), - removeAction: {} - ) - } - - static var noButtonImageExample: SDDSChip { - SDDSChip( - title: "Label", - isEnabled: true, - iconImage: Image.image("chipIcon"), - buttonImage: nil, - appearance: ChipAppearance.default, - size: SDDSChipSize.medium(.pilled), - removeAction: {} - ) - } - - static var noIconImageExample: SDDSChip { - SDDSChip( - title: "Label", - isEnabled: true, - iconImage: nil, - buttonImage: Image.image("chipClose"), - appearance: .default, - size: SDDSChipSize.medium(.pilled), - removeAction: {} - ) - } - - static var onlyTitleExample: SDDSChip { - SDDSChip( - title: "Label", - isEnabled: true, - iconImage: nil, - buttonImage: nil, - appearance: .default, - size: SDDSChipSize.medium(.pilled), - removeAction: {} - ) - } -} - -// MARK: - Preview -struct SDDSChipPreview: PreviewProvider { - static var previews: some View { - Group { - SDDSChip.defaultExample - .previewLayout(PreviewLayout.sizeThatFits) - .previewDisplayName("Default") - .padding() - .debug() - - SDDSChip.defaultBorderExample - .previewLayout(PreviewLayout.sizeThatFits) - .previewDisplayName("Default Border") - .padding() - .debug() - - SDDSChip.noButtonImageExample - .previewLayout(PreviewLayout.sizeThatFits) - .previewDisplayName("No Button Image") - .padding() - .debug() - - SDDSChip.noIconImageExample - .previewLayout(PreviewLayout.sizeThatFits) - .previewDisplayName("No Icon Image") - .padding() - .debug() - - SDDSChip.onlyTitleExample - .previewLayout(PreviewLayout.sizeThatFits) - .previewDisplayName("Only Title") - .padding() - .debug() - } - } -} diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSChip/SDDSChipPreview.swift b/SDDSComponents/SDDSComponentsPreview/Components/SDDSChip/SDDSChipPreview.swift new file mode 100644 index 000000000..8add92895 --- /dev/null +++ b/SDDSComponents/SDDSComponentsPreview/Components/SDDSChip/SDDSChipPreview.swift @@ -0,0 +1,20 @@ +import Foundation +import SDDSComponents +import SDDSServTheme +import SwiftUI + +// MARK: - Preview +struct SDDSChipPreview: PreviewProvider { + static var previews: some View { + SDDSChip( + title: "Label", + isEnabled: true, + iconImage: Image.image("chipIcon"), + buttonImage: Image.image("chipClose"), + appearance: SDDSChip.accent.medium.pilled.appearance, + removeAction: {} + ) + .previewLayout(PreviewLayout.sizeThatFits) + .previewDisplayName("Default") + } +} diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSChipGroup/SDDSChipGroup+Preview.swift b/SDDSComponents/SDDSComponentsPreview/Components/SDDSChipGroup/SDDSChipGroup+Preview.swift index 9e7c2f64b..1f373c11c 100644 --- a/SDDSComponents/SDDSComponentsPreview/Components/SDDSChipGroup/SDDSChipGroup+Preview.swift +++ b/SDDSComponents/SDDSComponentsPreview/Components/SDDSChipGroup/SDDSChipGroup+Preview.swift @@ -5,7 +5,6 @@ import SwiftUI // Пример данных и конфигурации для предварительного просмотра struct SDDSChipGroupPreview: PreviewProvider { static var previews: some View { - let chipSize = SDDSChipSize.medium(.pilled) let chipAccessibility = ChipAccessibility() let chipData = (1...32).map { index in @@ -14,8 +13,7 @@ struct SDDSChipGroupPreview: PreviewProvider { isEnabled: true, iconImage: Image.image("chipIcon"), buttonImage: Image.image("chipClose"), - appearance: .default, - size: chipSize, + appearance: SDDSChip.medium.accent.pilled.appearance, accessibility: chipAccessibility, removeAction: {} ) diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSProgressBar/ProgressBarAppearance+Extensions.swift b/SDDSComponents/SDDSComponentsPreview/Components/SDDSProgressBar/ProgressBarAppearance+Extensions.swift deleted file mode 100644 index 92e35e29c..000000000 --- a/SDDSComponents/SDDSComponentsPreview/Components/SDDSProgressBar/ProgressBarAppearance+Extensions.swift +++ /dev/null @@ -1,21 +0,0 @@ -import Foundation -import SDDSComponents -import SDDSServTheme -import SwiftUI - -public extension ProgressBarAppearance { - static var accent: ProgressBarAppearance { - .init( - tintFillStyle: .color(ColorToken.surfaceDefaultAccent), - trackColor: ColorToken.surfaceDefaultTransparentSecondary - ) - } - - static var gradientAccent: ProgressBarAppearance { - .init( - tintFillStyle: .gradient(GradientToken.surfaceDefaultAccentGradient), - trackColor: ColorToken.surfaceDefaultTransparentSecondary - ) - } -} - diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSProgressBar/SDDSProgress+Preview.swift b/SDDSComponents/SDDSComponentsPreview/Components/SDDSProgressBar/SDDSProgress+Preview.swift deleted file mode 100644 index 117345cf9..000000000 --- a/SDDSComponents/SDDSComponentsPreview/Components/SDDSProgressBar/SDDSProgress+Preview.swift +++ /dev/null @@ -1,92 +0,0 @@ -import Foundation -import SwiftUI -import SDDSComponents - -// MARK: - Preview -struct SDDSProgressViewPreview: PreviewProvider { - static var previews: some View { - Group { - SDDSProgressView.accent(progress: 0) - .previewLayout(PreviewLayout.sizeThatFits) - .previewDisplayName("0%") - .padding() - .debug() - - SDDSProgressView.accent(progress: 0.3) - .previewLayout(PreviewLayout.sizeThatFits) - .previewDisplayName("30%") - .padding() - .debug() - - SDDSProgressView.accent(progress: 0.5) - .previewLayout(PreviewLayout.sizeThatFits) - .previewDisplayName("50%") - .padding() - .debug() - - SDDSProgressView.accent(progress: 0.8) - .previewLayout(PreviewLayout.sizeThatFits) - .previewDisplayName("80%") - .padding() - .debug() - - SDDSProgressView.accent(progress: 1.0) - .previewLayout(PreviewLayout.sizeThatFits) - .previewDisplayName("100%") - .padding() - .debug() - - SDDSProgressView.gradientAccent(progress: 0) - .previewLayout(PreviewLayout.sizeThatFits) - .previewDisplayName("Gradient 0%") - .padding() - .debug() - - SDDSProgressView.gradientAccent(progress: 0.3) - .previewLayout(PreviewLayout.sizeThatFits) - .previewDisplayName("Gradient 30%") - .padding() - .debug() - - SDDSProgressView.gradientAccent(progress: 0.5) - .previewLayout(PreviewLayout.sizeThatFits) - .previewDisplayName("Gradient 50%") - .padding() - .debug() - - SDDSProgressView.gradientAccent(progress: 0.8) - .previewLayout(PreviewLayout.sizeThatFits) - .previewDisplayName("Gradient 80%") - .padding() - .debug() - - SDDSProgressView.gradientAccent(progress: 1.0) - .previewLayout(PreviewLayout.sizeThatFits) - .previewDisplayName("Gradient 100%") - .padding() - .debug() - } - } -} - -extension SDDSProgressView { - static func accent(progress: CGFloat) -> SDDSProgressView { - .init( - progress: .constant(progress), - isEnabled: true, - appearance: .accent, - size: DefaultProgressBarSize(), - accessibility: ProgressBarAccessibility() - ) - } - - static func gradientAccent(progress: CGFloat) -> SDDSProgressView { - .init( - progress: .constant(progress), - isEnabled: true, - appearance: .gradientAccent, - size: DefaultProgressBarSize(), - accessibility: ProgressBarAccessibility() - ) - } -} diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSProgressBar/SDDSProgressBarPreview.swift b/SDDSComponents/SDDSComponentsPreview/Components/SDDSProgressBar/SDDSProgressBarPreview.swift new file mode 100644 index 000000000..60bbf9b53 --- /dev/null +++ b/SDDSComponents/SDDSComponentsPreview/Components/SDDSProgressBar/SDDSProgressBarPreview.swift @@ -0,0 +1,17 @@ +import Foundation +import SDDSComponents +import SDDSServTheme +import SwiftUI + +// MARK: - Preview +struct SDDSProgressBarPreview: PreviewProvider { + static var previews: some View { + SDDSProgressView( + progress: .constant(0.5), + isEnabled: true, + appearance: SDDSProgressView.default.appearance + ) + .previewLayout(PreviewLayout.sizeThatFits) + .previewDisplayName("Default") + } +} diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSRadiobox/RadioboxAppearance+Extensions.swift b/SDDSComponents/SDDSComponentsPreview/Components/SDDSRadiobox/RadioboxAppearance+Extensions.swift deleted file mode 100644 index e259d233c..000000000 --- a/SDDSComponents/SDDSComponentsPreview/Components/SDDSRadiobox/RadioboxAppearance+Extensions.swift +++ /dev/null @@ -1,33 +0,0 @@ -import Foundation -import SwiftUI -import SDDSComponents -import SDDSServTheme - -public extension RadioboxAppearance { - static var `default`: Self { - .init( - titleTypography: RadioboxTypography.label, - subtitleTypography: RadioboxTypography.description, - titleColor: .backgroundInversePrimary, - subtitleColor: .surfaceInverseSolidPrimary.withOpacity(0.56), - disabledAlpha: 0.4, - imageTintColor: nil - ) - } -} - -public extension RadioboxTypography { - static var label: TypographyConfiguration { - RadioboxTypography( - medium: Typographies.bodyMNormal.typography, - small: Typographies.bodySNormal.typography - ).asContainer - } - - static var description: TypographyConfiguration { - RadioboxTypography( - medium: Typographies.bodyMNormal.typography, - small: Typographies.bodyXsNormal.typography - ).asContainer - } -} diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSRadiobox/SDDSRadiobox+Preview.swift b/SDDSComponents/SDDSComponentsPreview/Components/SDDSRadiobox/SDDSRadiobox+Preview.swift deleted file mode 100644 index 20367de9c..000000000 --- a/SDDSComponents/SDDSComponentsPreview/Components/SDDSRadiobox/SDDSRadiobox+Preview.swift +++ /dev/null @@ -1,84 +0,0 @@ -import Foundation -import SwiftUI -import SDDSComponents - -// MARK: - Preview -struct SDDSRadioboxPreview: PreviewProvider { - static var previews: some View { - Group { - SDDSRadiobox.defaultExample - .previewLayout(PreviewLayout.sizeThatFits) - .previewDisplayName("Default") - .debug() - - SDDSRadiobox.withoutDescription - .previewLayout(PreviewLayout.sizeThatFits) - .previewDisplayName("Without Description") - .debug() - - SDDSRadiobox.withoutLabel - .previewLayout(PreviewLayout.sizeThatFits) - .previewDisplayName("Without Label") - .debug() - - SDDSRadiobox.withoutLabelAndDescription - .previewLayout(PreviewLayout.sizeThatFits) - .previewDisplayName("Without Label and Description") - .debug() - } - } -} - -public extension SDDSRadiobox { - static var defaultExample: SDDSRadiobox { - .init( - isSelected: .constant(true), - title: "Label", - subtitle: "Description", - isEnabled: true, - images: .defaultImages, - size: SDDSRadioboxSize.medium, - appearance: .default, - accessibility: SelectionControlAccessibility() - ) - } - - static var withoutDescription: SDDSRadiobox { - .init( - isSelected: .constant(true), - title: "Label", - subtitle: nil, - isEnabled: true, - images: .defaultImages, - size: SDDSRadioboxSize.medium, - appearance: .default, - accessibility: SelectionControlAccessibility() - ) - } - - static var withoutLabel: SDDSRadiobox { - .init( - isSelected: .constant(true), - title: "", - subtitle: "Description", - isEnabled: true, - images: .defaultImages, - size: SDDSRadioboxSize.medium, - appearance: .default, - accessibility: SelectionControlAccessibility() - ) - } - - static var withoutLabelAndDescription: SDDSRadiobox { - .init( - isSelected: .constant(true), - title: "", - subtitle: nil, - isEnabled: true, - images: .defaultImages, - size: SDDSRadioboxSize.medium, - appearance: .default, - accessibility: SelectionControlAccessibility() - ) - } -} diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSRadiobox/SDDSRadioboxPreview.swift b/SDDSComponents/SDDSComponentsPreview/Components/SDDSRadiobox/SDDSRadioboxPreview.swift new file mode 100644 index 000000000..fc3782119 --- /dev/null +++ b/SDDSComponents/SDDSComponentsPreview/Components/SDDSRadiobox/SDDSRadioboxPreview.swift @@ -0,0 +1,20 @@ +import Foundation +import SDDSComponents +import SDDSServTheme +import SwiftUI + +// MARK: - Preview +struct SDDSRadioboxPreview: PreviewProvider { + static var previews: some View { + SDDSRadiobox( + isSelected: .constant(true), + title: "Value", + subtitle: "Description", + isEnabled: true, + images: .defaultImages, + appearance: SDDSRadiobox.medium.default.appearance + ) + .previewLayout(PreviewLayout.sizeThatFits) + .previewDisplayName("Default") + } +} diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSRadioboxGroup/SDDSRadioboxGroup+Preview.swift b/SDDSComponents/SDDSComponentsPreview/Components/SDDSRadioboxGroup/SDDSRadioboxGroup+Preview.swift index d5064284f..f1ec91edc 100644 --- a/SDDSComponents/SDDSComponentsPreview/Components/SDDSRadioboxGroup/SDDSRadioboxGroup+Preview.swift +++ b/SDDSComponents/SDDSComponentsPreview/Components/SDDSRadioboxGroup/SDDSRadioboxGroup+Preview.swift @@ -13,8 +13,7 @@ struct SDDSRadioboxGroupPreview: PreviewProvider { subtitle: "Description \(index + 1)", isSelected: .constant(index == 0), images: RadioboxImages.defaultImages, - size: SDDSRadioboxSize.medium, - appearance: RadioboxAppearance.default, + appearance: SDDSRadiobox.medium.default.appearance, accessibility: SelectionControlAccessibility() ) } diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSSwitch/SDDSSwitch+Preview.swift b/SDDSComponents/SDDSComponentsPreview/Components/SDDSSwitch/SDDSSwitch+Preview.swift deleted file mode 100644 index 62d28eded..000000000 --- a/SDDSComponents/SDDSComponentsPreview/Components/SDDSSwitch/SDDSSwitch+Preview.swift +++ /dev/null @@ -1,78 +0,0 @@ -import Foundation -import SDDSComponents -import SwiftUI - -// MARK: - Preview -struct SDDSSwitchPreview: PreviewProvider { - static var previews: some View { - SDDSSwitch.defaultExample - .previewLayout(PreviewLayout.sizeThatFits) - .previewDisplayName("Default") - .debug() - - SDDSSwitch.emptyDescription - .previewLayout(PreviewLayout.sizeThatFits) - .previewDisplayName("Empty Description") - .debug() - - SDDSSwitch.emptyTitle - .previewLayout(PreviewLayout.sizeThatFits) - .previewDisplayName("Empty Title") - .debug() - - SDDSSwitch.onlyToggle - .previewLayout(PreviewLayout.sizeThatFits) - .previewDisplayName("Only Toggle") - .debug() - } -} - -extension SDDSSwitch { - static var defaultExample: SDDSSwitch { - SDDSSwitch( - title: "Title", - subtitle: "Description", - isOn: .constant(true), - isEnabled: true, - size: SDDSSwitchSize.medium, - appearance: SwitchAppearance.defaultAppearance, - switchAccessibility: SwitchAccessibility() - ) - } - - static var emptyDescription: SDDSSwitch { - SDDSSwitch( - title: "Title", - subtitle: "", - isOn: .constant(true), - isEnabled: true, - size: SDDSSwitchSize.medium, - appearance: SwitchAppearance.defaultAppearance, - switchAccessibility: SwitchAccessibility() - ) - } - - static var emptyTitle: SDDSSwitch { - SDDSSwitch( - title: "", - subtitle: "Description", - isOn: .constant(true), - isEnabled: true, - size: SDDSSwitchSize.medium, - appearance: SwitchAppearance.defaultAppearance, - switchAccessibility: SwitchAccessibility() - ) - } - - static var onlyToggle: SDDSSwitch { - SDDSSwitch( - title: "", - subtitle: "", - isOn: .constant(true), - isEnabled: true, - size: SDDSSwitchSize.medium, - appearance: SwitchAppearance.defaultAppearance, - switchAccessibility: SwitchAccessibility() - ) - } -} diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSSwitch/SDDSSwitchPreview.swift b/SDDSComponents/SDDSComponentsPreview/Components/SDDSSwitch/SDDSSwitchPreview.swift new file mode 100644 index 000000000..edbcd8066 --- /dev/null +++ b/SDDSComponents/SDDSComponentsPreview/Components/SDDSSwitch/SDDSSwitchPreview.swift @@ -0,0 +1,20 @@ +import Foundation +import SDDSComponents +import SDDSServTheme +import SwiftUI + +// MARK: - Preview +struct SDDSSwitchPreview: PreviewProvider { + static var previews: some View { + SDDSSwitch( + title: "Label", + subtitle: "Description", + isOn: .constant(true), + isEnabled: true, + appearance: SDDSSwitch.large.default.appearance, + switchAccessibility: SwitchAccessibility() + ) + .previewLayout(PreviewLayout.sizeThatFits) + .previewDisplayName("Default") + } +} diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSTextArea/SDDSTextArea+Preview.swift b/SDDSComponents/SDDSComponentsPreview/Components/SDDSTextArea/SDDSTextArea+Preview.swift index 32d250a56..806507231 100644 --- a/SDDSComponents/SDDSComponentsPreview/Components/SDDSTextArea/SDDSTextArea+Preview.swift +++ b/SDDSComponents/SDDSComponentsPreview/Components/SDDSTextArea/SDDSTextArea+Preview.swift @@ -14,7 +14,6 @@ struct SDDSTextAreaPreview: PreviewProvider { iconImage: nil, buttonImage: Image.image("textFieldChipIcon"), appearance: .textArea, - size: TextAreaChipSize.medium, accessibility: ChipAccessibility(), removeAction: {} ) diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSTextArea/SDDSTextAreaAppearance+Extensions.swift b/SDDSComponents/SDDSComponentsPreview/Components/SDDSTextArea/SDDSTextAreaAppearance+Extensions.swift index 95f7deba6..a9496ecf7 100644 --- a/SDDSComponents/SDDSComponentsPreview/Components/SDDSTextArea/SDDSTextAreaAppearance+Extensions.swift +++ b/SDDSComponents/SDDSComponentsPreview/Components/SDDSTextArea/SDDSTextAreaAppearance+Extensions.swift @@ -124,6 +124,7 @@ extension TextAreaTypography { public extension ChipAppearance { static var textArea: ChipAppearance { ChipAppearance( + size: ZeroChipSize(), titleColor: .surfaceInverseSolidPrimary.withOpacity(0.96), titleTypography: ChipTextAreaTypography.text, imageTintColor: Color.clear.token, diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSTextField/SDDSTextField+Preview.swift b/SDDSComponents/SDDSComponentsPreview/Components/SDDSTextField/SDDSTextField+Preview.swift index 0fa9756a3..2a40e1648 100644 --- a/SDDSComponents/SDDSComponentsPreview/Components/SDDSTextField/SDDSTextField+Preview.swift +++ b/SDDSComponents/SDDSComponentsPreview/Components/SDDSTextField/SDDSTextField+Preview.swift @@ -14,7 +14,6 @@ struct SDDSTextFieldPreview: PreviewProvider { iconImage: nil, buttonImage: Image.image("textFieldChipIcon"), appearance: .textField, - size: TextFieldChipSize.large, accessibility: ChipAccessibility(), removeAction: {} ) diff --git a/SDDSComponents/SDDSComponentsPreview/Utilities/Image+Extensions.swift b/SDDSComponents/SDDSComponentsPreview/Components/Utilities/Image+Extensions.swift similarity index 100% rename from SDDSComponents/SDDSComponentsPreview/Utilities/Image+Extensions.swift rename to SDDSComponents/SDDSComponentsPreview/Components/Utilities/Image+Extensions.swift diff --git a/SDDSComponents/Sources/SDDSComponents/Common/AppearanceVariation.swift b/SDDSComponents/Sources/SDDSComponents/Common/AppearanceVariation.swift new file mode 100644 index 000000000..44e5b1872 --- /dev/null +++ b/SDDSComponents/Sources/SDDSComponents/Common/AppearanceVariation.swift @@ -0,0 +1,19 @@ +import Foundation + +public struct AppearanceVariation: Hashable { + public let name: String + public let appearance: Appearance + + public init(name: String = "", appearance: Appearance) { + self.name = name + self.appearance = appearance + } + + public static func == (lhs: AppearanceVariation, rhs: AppearanceVariation) -> Bool { + return lhs.name == rhs.name + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(name) + } +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/AvatarAppearance/AvatarAccessibility.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/AvatarAppearance/AvatarAccessibility.swift new file mode 100644 index 000000000..bf598deb1 --- /dev/null +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/AvatarAppearance/AvatarAccessibility.swift @@ -0,0 +1,11 @@ +import Foundation + +public struct AvatarAccessibility { + public let label: String + public let hint: String + + public init(label: String = "", hint: String = "") { + self.label = label + self.hint = hint + } +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/AvatarAppearance/AvatarAppearance+Extensions.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/AvatarAppearance/AvatarAppearance+Extensions.swift new file mode 100644 index 000000000..48baa397b --- /dev/null +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/AvatarAppearance/AvatarAppearance+Extensions.swift @@ -0,0 +1,100 @@ +import Foundation + +// MARK: - AvatarAppearance Extension +public extension AvatarAppearance { + func size(_ size: AvatarSizeConfiguration) -> AvatarAppearance { + return AvatarAppearance( + size: size, + textFillStyle: self.textFillStyle, + backgroundFillStyle: self.backgroundFillStyle, + backgroundOpacity: self.backgroundOpacity, + onlineStatusColor: self.onlineStatusColor, + offlineStatusColor: self.offlineStatusColor, + textTypography: self.textTypography + ) + } + + func textFillStyle(_ textFillStyle: FillStyle) -> AvatarAppearance { + return AvatarAppearance( + size: self.size, + textFillStyle: textFillStyle, + backgroundFillStyle: self.backgroundFillStyle, + backgroundOpacity: self.backgroundOpacity, + onlineStatusColor: self.onlineStatusColor, + offlineStatusColor: self.offlineStatusColor, + textTypography: self.textTypography + ) + } + + func backgroundFillStyle(_ backgroundFillStyle: FillStyle) -> AvatarAppearance { + return AvatarAppearance( + size: self.size, + textFillStyle: self.textFillStyle, + backgroundFillStyle: backgroundFillStyle, + backgroundOpacity: self.backgroundOpacity, + onlineStatusColor: self.onlineStatusColor, + offlineStatusColor: self.offlineStatusColor, + textTypography: self.textTypography + ) + } + + func backgroundOpacity(_ backgroundOpacity: CGFloat) -> AvatarAppearance { + return AvatarAppearance( + size: self.size, + textFillStyle: self.textFillStyle, + backgroundFillStyle: self.backgroundFillStyle, + backgroundOpacity: backgroundOpacity, + onlineStatusColor: self.onlineStatusColor, + offlineStatusColor: self.offlineStatusColor, + textTypography: self.textTypography + ) + } + + func onlineStatusColor(_ onlineStatusColor: ColorToken) -> AvatarAppearance { + return AvatarAppearance( + size: self.size, + textFillStyle: self.textFillStyle, + backgroundFillStyle: self.backgroundFillStyle, + backgroundOpacity: self.backgroundOpacity, + onlineStatusColor: onlineStatusColor, + offlineStatusColor: self.offlineStatusColor, + textTypography: self.textTypography + ) + } + + func offlineStatusColor(_ offlineStatusColor: ColorToken) -> AvatarAppearance { + return AvatarAppearance( + size: self.size, + textFillStyle: self.textFillStyle, + backgroundFillStyle: self.backgroundFillStyle, + backgroundOpacity: self.backgroundOpacity, + onlineStatusColor: self.onlineStatusColor, + offlineStatusColor: offlineStatusColor, + textTypography: self.textTypography + ) + } + + func textTypography(_ textTypography: TypographyConfiguration) -> AvatarAppearance { + return AvatarAppearance( + size: self.size, + textFillStyle: self.textFillStyle, + backgroundFillStyle: self.backgroundFillStyle, + backgroundOpacity: self.backgroundOpacity, + onlineStatusColor: self.onlineStatusColor, + offlineStatusColor: self.offlineStatusColor, + textTypography: textTypography + ) + } + + func applyColorVariation(variation: AvatarAppearance) -> AvatarAppearance { + return AvatarAppearance( + size: size, + textFillStyle: variation.textFillStyle, + backgroundFillStyle: variation.backgroundFillStyle, + backgroundOpacity: variation.backgroundOpacity, + onlineStatusColor: variation.onlineStatusColor, + offlineStatusColor: variation.offlineStatusColor, + textTypography: textTypography + ) + } +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/AvatarAppearance/AvatarAppearance.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/AvatarAppearance/AvatarAppearance.swift new file mode 100644 index 000000000..4e6e44d5b --- /dev/null +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/AvatarAppearance/AvatarAppearance.swift @@ -0,0 +1,51 @@ +import Foundation +import SDDSThemeCore + + +/** + `AvatarAppearance` определяет внешний вид аватара, включая цвет текста, фона, цвета статусов и типографику. + + - Properties: + - size: Конфигурация размеров для аватара. + - textFillStyle: Стиль заливки текста (цвет или градиент). + - backgroundFillStyle: Стиль заливки фона (цвет или градиент). + - onlineStatusColor: Цвет индикатора статуса "онлайн". + - offlineStatusColor: Цвет индикатора статуса "оффлайн". + - textTypography: Типографика текста. + */ +public struct AvatarAppearance: Hashable { + let id = UUID() + public let size: AvatarSizeConfiguration + public let textFillStyle: FillStyle + public let backgroundFillStyle: FillStyle + public let backgroundOpacity: CGFloat + public let onlineStatusColor: ColorToken + public let offlineStatusColor: ColorToken + public let textTypography: TypographyConfiguration + + public init( + size: AvatarSizeConfiguration = ZeroAvatarSize(), + textFillStyle: FillStyle = .color(.clearColor), + backgroundFillStyle: FillStyle = .color(.clearColor), + backgroundOpacity: CGFloat = 0, + onlineStatusColor: ColorToken = .clearColor, + offlineStatusColor: ColorToken = .clearColor, + textTypography: TypographyConfiguration = .default + ) { + self.size = size + self.textFillStyle = textFillStyle + self.backgroundFillStyle = backgroundFillStyle + self.backgroundOpacity = backgroundOpacity + self.onlineStatusColor = onlineStatusColor + self.offlineStatusColor = offlineStatusColor + self.textTypography = textTypography + } + + public static func == (lhs: AvatarAppearance, rhs: AvatarAppearance) -> Bool { + return lhs.id == rhs.id + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/AvatarAppearance/AvatarImageSource.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/AvatarAppearance/AvatarImageSource.swift new file mode 100644 index 000000000..31ef0b1f7 --- /dev/null +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/AvatarAppearance/AvatarImageSource.swift @@ -0,0 +1,14 @@ +import Foundation +import SwiftUI + +/** + `AvatarImageSource` определяет источник изображения для аватара. + + - Cases: + - url: URL изображения, загружаемого асинхронно. + - image: Локальное изображение типа `Image`. + */ +public enum AvatarImageSource { + case url(URL) + case image(Image) +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/AvatarAppearance/AvatarSizeConfiguration.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/AvatarAppearance/AvatarSizeConfiguration.swift new file mode 100644 index 000000000..3572b2b97 --- /dev/null +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/AvatarAppearance/AvatarSizeConfiguration.swift @@ -0,0 +1,23 @@ +import Foundation +import SwiftUI + +/** + `AvatarSizeConfiguration` определяет размеры и отступы для аватара. + + - Properties: + - avatarSize: Размер аватара. + - statusSize: Размер иконки статуса. + - statusInsets: Отступы иконки статуса относительно нижнего правого угла. + */ +public protocol AvatarSizeConfiguration { + var avatarSize: CGSize { get } + var statusSize: CGSize { get } + var statusInsets: EdgeInsets { get } +} + +public struct ZeroAvatarSize: AvatarSizeConfiguration { + public var avatarSize: CGSize { .zero } + public var statusSize: CGSize { .zero } + public var statusInsets: EdgeInsets { .init() } + public init() {} +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/AvatarAppearance/AvatarStatus.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/AvatarAppearance/AvatarStatus.swift new file mode 100644 index 000000000..548511b37 --- /dev/null +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/AvatarAppearance/AvatarStatus.swift @@ -0,0 +1,7 @@ +import Foundation + +public enum AvatarStatus: String { + case hidden + case online + case offline +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/SDDSAvatar.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/SDDSAvatar.swift index 9e26c94e9..9d0b2277a 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/SDDSAvatar.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/SDDSAvatar.swift @@ -1,5 +1,4 @@ import SwiftUI -import SDDSThemeCore // MARK: - SDDSAvatar @@ -12,7 +11,6 @@ import SDDSThemeCore - placeholderImage: Изображение-заглушка, отображаемое при отсутствии основного изображения. - status: Статус аватара (`hidden`, `online`, `offline`). - appearance: Параметры внешнего вида аватара. - - size: Конфигурация размеров для аватара. - accessibility: Параметры доступности для аватара. */ public struct SDDSAvatar: View { @@ -21,7 +19,6 @@ public struct SDDSAvatar: View { let placeholderImage: AvatarImageSource? let status: AvatarStatus let appearance: AvatarAppearance - let size: AvatarSizeConfiguration let accessibility: AvatarAccessibility @Environment(\.colorScheme) var colorScheme @@ -31,14 +28,12 @@ public struct SDDSAvatar: View { placeholderImage: AvatarImageSource?, status: AvatarStatus, appearance: AvatarAppearance, - size: AvatarSizeConfiguration, accessibility: AvatarAccessibility) { self.text = text self.image = image self.placeholderImage = placeholderImage self.status = status self.appearance = appearance - self.size = size self.accessibility = accessibility } @@ -48,7 +43,6 @@ public struct SDDSAvatar: View { self.placeholderImage = data.placeholderImage self.status = data.status self.appearance = data.appearance - self.size = data.size self.accessibility = data.accessibility } @@ -56,14 +50,14 @@ public struct SDDSAvatar: View { ZStack { if let placeholderImage = placeholderImage { avatarImage(for: placeholderImage) - .frame(width: size.avatarSize.width, height: size.avatarSize.height) + .frame(width: appearance.size.avatarSize.width, height: appearance.size.avatarSize.height) } else { backgroundView } if let image = image { avatarImage(for: image) - .frame(width: size.avatarSize.width, height: size.avatarSize.height) + .frame(width: appearance.size.avatarSize.width, height: appearance.size.avatarSize.height) } else { Text(text) .typography(textTypography) @@ -73,16 +67,16 @@ public struct SDDSAvatar: View { if status != .hidden { statusView .frame( - width: size.statusSize.width, - height: size.statusSize.height + width: appearance.size.statusSize.width, + height: appearance.size.statusSize.height ) .position( - x: size.statusInsets.leading + size.statusSize.width / 2, - y: size.statusInsets.top + size.statusSize.height / 2 + x: appearance.size.statusInsets.leading + appearance.size.statusSize.width / 2, + y: appearance.size.statusInsets.top + appearance.size.statusSize.height / 2 ) } } - .frame(width: size.avatarSize.width, height: size.avatarSize.height) + .frame(width: appearance.size.avatarSize.width, height: appearance.size.avatarSize.height) .accessibilityElement() .accessibilityLabel(accessibility.label) .accessibilityHint(accessibility.hint) @@ -146,113 +140,10 @@ public struct SDDSAvatar: View { } private var textTypography: TypographyToken { - if let typography = appearance.textTypography.typography(with: size) { + if let typography = appearance.textTypography.typography(with: appearance.size) { return typography } else { fatalError("Undefined Avatar Typography") } } } - -// MARK: - AvatarStatus - -public enum AvatarStatus: String { - case hidden - case online - case offline -} - -// MARK: - AvatarSizeConfiguration - -/** - `AvatarSizeConfiguration` определяет размеры и отступы для аватара. - - - Properties: - - avatarSize: Размер аватара. - - statusSize: Размер иконки статуса. - - statusInsets: Отступы иконки статуса относительно нижнего правого угла. - */ -public protocol AvatarSizeConfiguration { - var avatarSize: CGSize { get } - var statusSize: CGSize { get } - var statusInsets: EdgeInsets { get } -} - -// MARK: - AvatarAppearance - -/** - `AvatarAppearance` определяет внешний вид аватара, включая цвет текста, фона, цвета статусов и типографику. - - - Properties: - - textFillStyle: Стиль заливки текста (цвет или градиент). - - backgroundFillStyle: Стиль заливки фона (цвет или градиент). - - onlineStatusColor: Цвет индикатора статуса "онлайн". - - offlineStatusColor: Цвет индикатора статуса "оффлайн". - - textTypography: Типографика текста. - */ -public struct AvatarAppearance: Hashable { - let id = UUID() - public let textFillStyle: FillStyle - public let backgroundFillStyle: FillStyle - public let backgroundOpacity: CGFloat - public let onlineStatusColor: ColorToken - public let offlineStatusColor: ColorToken - public let textTypography: TypographyConfiguration - - public init( - textFillStyle: FillStyle, - backgroundFillStyle: FillStyle, - backgroundOpacity: CGFloat, - onlineStatusColor: ColorToken, - offlineStatusColor: ColorToken, - textTypography: TypographyConfiguration - ) { - self.textFillStyle = textFillStyle - self.backgroundFillStyle = backgroundFillStyle - self.backgroundOpacity = backgroundOpacity - self.onlineStatusColor = onlineStatusColor - self.offlineStatusColor = offlineStatusColor - self.textTypography = textTypography - } - - public static func == (lhs: AvatarAppearance, rhs: AvatarAppearance) -> Bool { - return lhs.id == rhs.id - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(id) - } -} - -// MARK: - AvatarImageSource - -/** - `AvatarImageSource` определяет источник изображения для аватара. - - - Cases: - - url: URL изображения, загружаемого асинхронно. - - image: Локальное изображение типа `Image`. - */ -public enum AvatarImageSource { - case url(URL) - case image(Image) -} - -// MARK: - AvatarAccessibility - -/** - `AvatarAccessibility` предоставляет параметры доступности для аватара. - - - Properties: - - label: Метка доступности для аватара. - - hint: Подсказка доступности для аватара. - */ -public struct AvatarAccessibility { - public let label: String - public let hint: String - - public init(label: String = "", hint: String = "") { - self.label = label - self.hint = hint - } -} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/SDDSAvatarData.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/SDDSAvatarData.swift index 2202bd8bf..c0394bacc 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/SDDSAvatarData.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/SDDSAvatarData.swift @@ -20,7 +20,6 @@ public struct SDDSAvatarData { public let placeholderImage: AvatarImageSource? public let status: AvatarStatus public let appearance: AvatarAppearance - public let size: AvatarSizeConfiguration public let accessibility: AvatarAccessibility /** @@ -32,7 +31,6 @@ public struct SDDSAvatarData { - placeholderImage: Изображение-заглушка, отображаемое при отсутствии основного изображения. - status: Статус аватара (`hidden`, `online`, `offline`). - appearance: Параметры внешнего вида аватара. - - size: Конфигурация размеров для аватара. - accessibility: Параметры доступности для аватара. */ public init( @@ -41,7 +39,6 @@ public struct SDDSAvatarData { placeholderImage: AvatarImageSource? = nil, status: AvatarStatus = .hidden, appearance: AvatarAppearance, - size: AvatarSizeConfiguration, accessibility: AvatarAccessibility = AvatarAccessibility() ) { self.text = text @@ -49,7 +46,6 @@ public struct SDDSAvatarData { self.placeholderImage = placeholderImage self.status = status self.appearance = appearance - self.size = size self.accessibility = accessibility } } diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/SDDSAvatarModifiers.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/SDDSAvatarModifiers.swift index edae33a33..f2c2a1677 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/SDDSAvatarModifiers.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSAvatar/SDDSAvatarModifiers.swift @@ -10,7 +10,6 @@ public extension View where Self == SDDSAvatar { placeholderImage: self.placeholderImage, status: self.status, appearance: self.appearance, - size: self.size, accessibility: self.accessibility ) } @@ -22,7 +21,6 @@ public extension View where Self == SDDSAvatar { placeholderImage: self.placeholderImage, status: self.status, appearance: self.appearance, - size: self.size, accessibility: self.accessibility ) } @@ -34,7 +32,6 @@ public extension View where Self == SDDSAvatar { placeholderImage: newPlaceholderImage, status: self.status, appearance: self.appearance, - size: self.size, accessibility: self.accessibility ) } @@ -46,7 +43,6 @@ public extension View where Self == SDDSAvatar { placeholderImage: self.placeholderImage, status: newStatus, appearance: self.appearance, - size: self.size, accessibility: self.accessibility ) } @@ -58,7 +54,6 @@ public extension View where Self == SDDSAvatar { placeholderImage: self.placeholderImage, status: self.status, appearance: newAppearance, - size: self.size, accessibility: self.accessibility ) } @@ -70,7 +65,6 @@ public extension View where Self == SDDSAvatar { placeholderImage: self.placeholderImage, status: self.status, appearance: self.appearance, - size: newSize, accessibility: self.accessibility ) } @@ -82,7 +76,6 @@ public extension View where Self == SDDSAvatar { placeholderImage: self.placeholderImage, status: self.status, appearance: self.appearance, - size: self.size, accessibility: newAccessibility ) } diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/SDDSButton.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/SDDSButton.swift index f00b556b8..611b74eda 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/SDDSButton.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/SDDSButton.swift @@ -62,7 +62,7 @@ public struct SDDSButton: View { } .buttonStyle(NoHighlightButtonStyle()) .opacity(contentOpacity) - .background(currentColor(for: appearance.backgroundColor)) + .background(currentColor(for: appearance.backgroundColor).opacity(backgroundOpacity)) .cornerRadius(cornerRadius) .frame(height: appearance.size.height) .disabled(isDisabled) @@ -99,6 +99,7 @@ public struct SDDSButton: View { } if !title.isEmpty { Text(title) + .lineLimit(1) .typography(titleTypography) .foregroundColor(currentColor(for: appearance.titleColor)) } @@ -110,6 +111,7 @@ public struct SDDSButton: View { Spacer().frame(width: appearance.size.titleHorizontalGap) } Text(subtitle) + .lineLimit(1) .typography(subtitleTypography) .foregroundColor(currentColor(for: appearance.subtitleColor)) } @@ -123,14 +125,9 @@ public struct SDDSButton: View { Spacer() } } - .frame( - minHeight: max( - subtitleTypography.lineHeight, - titleTypography.lineHeight - ), - maxHeight: appearance.size.iconSize.height - ) - .padding(appearance.size.paddings) + .frame(height: appearance.size.height) + .padding(.leading, appearance.size.paddings.leading) + .padding(.trailing, appearance.size.paddings.trailing) } @ViewBuilder @@ -203,10 +200,6 @@ private extension SDDSButton { isDisabled ? Opacity.fourty : 1.0 } - func backgroundColor(for colorScheme: ColorScheme) -> Color { - currentColor(for: appearance.backgroundColor).opacity(backgroundOpacity) - } - var contentOpacity: Double { if isDisabled { return appearance.disabledAlpha diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/Templates/LinkButton/LinkButton+Typography.stencil b/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/Templates/LinkButton/LinkButton+Typography.stencil deleted file mode 100644 index dc6767fb0..000000000 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/Templates/LinkButton/LinkButton+Typography.stencil +++ /dev/null @@ -1,29 +0,0 @@ -// MARK: - Sourcery Template -import Foundation -import SDDSServTheme -import SDDSComponents -import SDDSThemeCore - -public extension LinkButton { - static var titleTypography: TypographyConfiguration { - LinkButtonTypography( - large: AdaptiveTypographyToken.{{ variations.size.l.labelStyle.camelCase }}.typography, - medium: AdaptiveTypographyToken.{{ variations.size.m.labelStyle.camelCase }}.typography, - small: AdaptiveTypographyToken.{{ variations.size.s.labelStyle.camelCase }}.typography, - extraSmall: AdaptiveTypographyToken.{{ variations.size.xs.labelStyle.camelCase }}.typography, - extraExtraSmall: AdaptiveTypographyToken.{{ variations.size.xxs.labelStyle.camelCase }}.typography - ) - .asContainer - } - - static var subtitleTypography: TypographyConfiguration { - LinkButtonTypography( - large: AdaptiveTypographyToken.{{ variations.size.l.valueStyle.camelCase }}.typography, - medium: AdaptiveTypographyToken.{{ variations.size.m.valueStyle.camelCase }}.typography, - small: AdaptiveTypographyToken.{{ variations.size.s.valueStyle.camelCase }}.typography, - extraSmall: AdaptiveTypographyToken.{{ variations.size.xs.valueStyle.camelCase }}.typography, - extraExtraSmall: AdaptiveTypographyToken.{{ variations.size.xxs.valueStyle.camelCase }}.typography - ) - .asContainer - } -} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSCheckbox/CheckboxAppearance.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSCheckbox/CheckboxAppearance.swift deleted file mode 100644 index 2628fd043..000000000 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSCheckbox/CheckboxAppearance.swift +++ /dev/null @@ -1,21 +0,0 @@ -import Foundation -import SwiftUI -@_exported import SDDSThemeCore - -public struct CheckboxAppearance: SelectionControlAppearance { - public let titleTypography: TypographyConfiguration - public let subtitleTypography: TypographyConfiguration - public let titleColor: ColorToken - public let subtitleColor: ColorToken - public let disabledAlpha: CGFloat - public let imageTintColor: ColorToken? - - public init(titleTypography: TypographyConfiguration, subtitleTypography: TypographyConfiguration, titleColor: ColorToken, subtitleColor: ColorToken, disabledAlpha: CGFloat, imageTintColor: ColorToken? = nil) { - self.titleTypography = titleTypography - self.subtitleTypography = subtitleTypography - self.titleColor = titleColor - self.subtitleColor = subtitleColor - self.disabledAlpha = disabledAlpha - self.imageTintColor = imageTintColor - } -} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSCheckbox/CheckboxAppearance/CheckboxAppearance+Extensions.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSCheckbox/CheckboxAppearance/CheckboxAppearance+Extensions.swift new file mode 100644 index 000000000..f24e6b369 --- /dev/null +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSCheckbox/CheckboxAppearance/CheckboxAppearance+Extensions.swift @@ -0,0 +1,99 @@ +import Foundation + +public extension CheckboxAppearance { + func size(_ size: SelectionControlSizeConfiguration) -> CheckboxAppearance { + return CheckboxAppearance( + size: size, + titleTypography: self.titleTypography, + subtitleTypography: self.subtitleTypography, + titleColor: self.titleColor, + subtitleColor: self.subtitleColor, + disabledAlpha: self.disabledAlpha, + imageTintColor: self.imageTintColor + ) + } + + func titleTypography(_ titleTypography: TypographyConfiguration) -> CheckboxAppearance { + return CheckboxAppearance( + size: self.size, + titleTypography: titleTypography, + subtitleTypography: self.subtitleTypography, + titleColor: self.titleColor, + subtitleColor: self.subtitleColor, + disabledAlpha: self.disabledAlpha, + imageTintColor: self.imageTintColor + ) + } + + func subtitleTypography(_ subtitleTypography: TypographyConfiguration) -> CheckboxAppearance { + return CheckboxAppearance( + size: self.size, + titleTypography: self.titleTypography, + subtitleTypography: subtitleTypography, + titleColor: self.titleColor, + subtitleColor: self.subtitleColor, + disabledAlpha: self.disabledAlpha, + imageTintColor: self.imageTintColor + ) + } + + func titleColor(_ titleColor: ColorToken) -> CheckboxAppearance { + return CheckboxAppearance( + size: self.size, + titleTypography: self.titleTypography, + subtitleTypography: self.subtitleTypography, + titleColor: titleColor, + subtitleColor: self.subtitleColor, + disabledAlpha: self.disabledAlpha, + imageTintColor: self.imageTintColor + ) + } + + func subtitleColor(_ subtitleColor: ColorToken) -> CheckboxAppearance { + return CheckboxAppearance( + size: self.size, + titleTypography: self.titleTypography, + subtitleTypography: self.subtitleTypography, + titleColor: self.titleColor, + subtitleColor: subtitleColor, + disabledAlpha: self.disabledAlpha, + imageTintColor: self.imageTintColor + ) + } + + func disabledAlpha(_ disabledAlpha: CGFloat) -> CheckboxAppearance { + return CheckboxAppearance( + size: self.size, + titleTypography: self.titleTypography, + subtitleTypography: self.subtitleTypography, + titleColor: self.titleColor, + subtitleColor: self.subtitleColor, + disabledAlpha: disabledAlpha, + imageTintColor: self.imageTintColor + ) + } + + func imageTintColor(_ imageTintColor: ColorToken?) -> CheckboxAppearance { + return CheckboxAppearance( + size: self.size, + titleTypography: self.titleTypography, + subtitleTypography: self.subtitleTypography, + titleColor: self.titleColor, + subtitleColor: self.subtitleColor, + disabledAlpha: self.disabledAlpha, + imageTintColor: imageTintColor + ) + } + + func applyColorVariation(variation: CheckboxAppearance) -> CheckboxAppearance { + return CheckboxAppearance( + size: self.size, + titleTypography: self.titleTypography, + subtitleTypography: self.subtitleTypography, + titleColor: variation.titleColor, + subtitleColor: variation.subtitleColor, + disabledAlpha: variation.disabledAlpha, + imageTintColor: variation.imageTintColor + ) + } +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSCheckbox/CheckboxAppearance/CheckboxAppearance.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSCheckbox/CheckboxAppearance/CheckboxAppearance.swift new file mode 100644 index 000000000..68a61e68e --- /dev/null +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSCheckbox/CheckboxAppearance/CheckboxAppearance.swift @@ -0,0 +1,39 @@ +import Foundation +import SwiftUI +@_exported import SDDSThemeCore + +public struct CheckboxAppearance: SelectionControlAppearance, Hashable { + let id = UUID() + public let size: SelectionControlSizeConfiguration + public let titleTypography: TypographyConfiguration + public let subtitleTypography: TypographyConfiguration + public let titleColor: ColorToken + public let subtitleColor: ColorToken + public let disabledAlpha: CGFloat + public let imageTintColor: ColorToken? + + public init( + size: SelectionControlSizeConfiguration = ZeroSelectionControlSize(), + titleTypography: TypographyConfiguration = .default, + subtitleTypography: TypographyConfiguration = .default, + titleColor: ColorToken = .clearColor, + subtitleColor: ColorToken = .clearColor, + disabledAlpha: CGFloat = 0, + imageTintColor: ColorToken? = nil) { + self.size = size + self.titleTypography = titleTypography + self.subtitleTypography = subtitleTypography + self.titleColor = titleColor + self.subtitleColor = subtitleColor + self.disabledAlpha = disabledAlpha + self.imageTintColor = imageTintColor + } + + public static func == (lhs: CheckboxAppearance, rhs: CheckboxAppearance) -> Bool { + lhs.id == rhs.id + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSCheckbox/CheckboxData.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSCheckbox/CheckboxData.swift new file mode 100644 index 000000000..4cd866e4c --- /dev/null +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSCheckbox/CheckboxData.swift @@ -0,0 +1,53 @@ +import Foundation +import SwiftUI + +/** + `CheckboxData` представляет собой структуру, содержащую данные для чекбокса. + + - Properties: + - state: Состояние чекбокса. + - title: Текст заголовка для чекбокса. + - subtitle: Текст подзаголовка для чекбокса. + - isEnabled: Флаг, указывающий, включен ли чекбокс. + - images: Изображения для различных состояний чекбокса. + - size: Конфигурация размеров для чекбокса. + - appearance: Параметры внешнего вида чекбокса. + - accessibility: Параметры доступности для чекбокса. + */ +public struct CheckboxData: Hashable { + let id = UUID() + let state: Binding + let title: String + let subtitle: String? + let isEnabled: Bool + let images: SelectionControlStateImages + let appearance: CheckboxAppearance + let accessibility: SelectionControlAccessibility + + public init( + state: Binding, + title: String, + subtitle: String? = nil, + isEnabled: Bool, + images: SelectionControlStateImages, + appearance: CheckboxAppearance, + accessibility: SelectionControlAccessibility = SelectionControlAccessibility() + ) { + self.state = state + self.title = title + self.subtitle = subtitle + self.isEnabled = isEnabled + self.images = images + self.appearance = appearance + self.accessibility = accessibility + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(id.uuidString) + hasher.combine(state.wrappedValue.rawValue) + } + + public static func == (lhs: CheckboxData, rhs: CheckboxData) -> Bool { + lhs.id == rhs.id && lhs.state.wrappedValue == rhs.state.wrappedValue + } +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSCheckbox/SDDSCheckbox.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSCheckbox/SDDSCheckbox.swift index 78cdccf87..b59692b1a 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSCheckbox/SDDSCheckbox.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSCheckbox/SDDSCheckbox.swift @@ -1,60 +1,6 @@ import Foundation import SwiftUI -/** - `CheckboxData` представляет собой структуру, содержащую данные для чекбокса. - - - Properties: - - state: Состояние чекбокса. - - title: Текст заголовка для чекбокса. - - subtitle: Текст подзаголовка для чекбокса. - - isEnabled: Флаг, указывающий, включен ли чекбокс. - - images: Изображения для различных состояний чекбокса. - - size: Конфигурация размеров для чекбокса. - - appearance: Параметры внешнего вида чекбокса. - - accessibility: Параметры доступности для чекбокса. - */ -public struct CheckboxData: Hashable { - let id = UUID() - let state: Binding - let title: String - let subtitle: String? - let isEnabled: Bool - let images: SelectionControlStateImages - let size: SelectionControlSizeConfiguration - let appearance: CheckboxAppearance - let accessibility: SelectionControlAccessibility - - public init( - state: Binding, - title: String, - subtitle: String? = nil, - isEnabled: Bool, - images: SelectionControlStateImages, - size: SelectionControlSizeConfiguration, - appearance: CheckboxAppearance, - accessibility: SelectionControlAccessibility = SelectionControlAccessibility() - ) { - self.state = state - self.title = title - self.subtitle = subtitle - self.isEnabled = isEnabled - self.images = images - self.size = size - self.appearance = appearance - self.accessibility = accessibility - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(id.uuidString) - hasher.combine(state.wrappedValue.rawValue) - } - - public static func == (lhs: CheckboxData, rhs: CheckboxData) -> Bool { - lhs.id == rhs.id && lhs.state.wrappedValue == rhs.state.wrappedValue - } -} - /** `SDDSCheckbox` представляет собой настраиваемый чекбокс, который может быть настроен с помощью различных параметров. @@ -64,7 +10,6 @@ public struct CheckboxData: Hashable { - subtitle: Текст подзаголовка для чекбокса. - isEnabled: Флаг, указывающий, включен ли чекбокс. - images: Изображения для различных состояний чекбокса. - - size: Конфигурация размеров для чекбокса. - appearance: Параметры внешнего вида чекбокса. - accessibility: Параметры доступности для чекбокса. */ @@ -74,7 +19,6 @@ public struct SDDSCheckbox: View { let subtitle: String? let isEnabled: Bool let images: SelectionControlStateImages - let size: SelectionControlSizeConfiguration let appearance: CheckboxAppearance let accessibility: SelectionControlAccessibility @@ -97,7 +41,6 @@ public struct SDDSCheckbox: View { subtitle: String? = nil, isEnabled: Bool, images: SelectionControlStateImages, - size: SelectionControlSizeConfiguration, appearance: CheckboxAppearance, accessibility: SelectionControlAccessibility = SelectionControlAccessibility() ) { @@ -106,7 +49,6 @@ public struct SDDSCheckbox: View { self.subtitle = subtitle self.isEnabled = isEnabled self.images = images - self.size = size self.appearance = appearance self.accessibility = accessibility } @@ -123,7 +65,6 @@ public struct SDDSCheckbox: View { self.subtitle = data.subtitle self.isEnabled = data.isEnabled self.images = data.images - self.size = data.size self.appearance = data.appearance self.accessibility = data.accessibility } @@ -135,7 +76,6 @@ public struct SDDSCheckbox: View { title: title, subtitle: subtitle, isEnabled: isEnabled, - size: size, appearance: appearance, images: images, accessibility: accessibility diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSCheckboxGroup/SDDSCheckboxGroup.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSCheckboxGroup/SDDSCheckboxGroup.swift index ff3757cc7..7c39657b6 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSCheckboxGroup/SDDSCheckboxGroup.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSCheckboxGroup/SDDSCheckboxGroup.swift @@ -77,7 +77,6 @@ public struct SDDSCheckboxGroup: View { subtitle: parent.subtitle, isEnabled: parent.isEnabled, images: parent.images, - size: parent.size, appearance: parent.appearance, accessibility: parent.accessibility ) @@ -94,7 +93,6 @@ public struct SDDSCheckboxGroup: View { subtitle: child.subtitle, isEnabled: child.isEnabled, images: child.images, - size: child.size, appearance: child.appearance, accessibility: child.accessibility ) @@ -114,7 +112,6 @@ public struct SDDSCheckboxGroup: View { subtitle: item.subtitle, isEnabled: item.isEnabled, images: item.images, - size: item.size, appearance: item.appearance, accessibility: item.accessibility ) diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/ChipAppearance/ChipAccessibility.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/ChipAppearance/ChipAccessibility.swift new file mode 100644 index 000000000..17a076994 --- /dev/null +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/ChipAppearance/ChipAccessibility.swift @@ -0,0 +1,25 @@ +import Foundation + +/** + `ChipAccessibility` определяет параметры доступности для чипа. + + - Properties: + - titleLabel: Метка доступности для заголовка. + - removeButtonLabel: Метка доступности для кнопки удаления. + - removeButtonHint: Подсказка для кнопки удаления. + */ +public struct ChipAccessibility { + public var titleLabel: String + public var removeButtonLabel: String + public var removeButtonHint: String + + public init( + titleLabel: String = "Chip Label", + removeButtonLabel: String = "Remove", + removeButtonHint: String = "Double-tap to remove the chip." + ) { + self.titleLabel = titleLabel + self.removeButtonLabel = removeButtonLabel + self.removeButtonHint = removeButtonHint + } +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/ChipAppearance/ChipAppearance+Extensions.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/ChipAppearance/ChipAppearance+Extensions.swift new file mode 100644 index 000000000..0eb75750c --- /dev/null +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/ChipAppearance/ChipAppearance+Extensions.swift @@ -0,0 +1,100 @@ +// MARK: - ChipAppearance Extension +import Foundation + +public extension ChipAppearance { + func size(_ size: ChipSizeConfiguration) -> ChipAppearance { + return ChipAppearance( + size: size, + titleColor: self.titleColor, + titleTypography: self.titleTypography, + imageTintColor: self.imageTintColor, + buttonTintColor: self.buttonTintColor, + backgroundColor: self.backgroundColor, + disabledAlpha: self.disabledAlpha + ) + } + + func titleColor(_ titleColor: ColorToken) -> ChipAppearance { + return ChipAppearance( + size: self.size, + titleColor: titleColor, + titleTypography: self.titleTypography, + imageTintColor: self.imageTintColor, + buttonTintColor: self.buttonTintColor, + backgroundColor: self.backgroundColor, + disabledAlpha: self.disabledAlpha + ) + } + + func titleTypography(_ titleTypography: TypographyConfiguration) -> ChipAppearance { + return ChipAppearance( + size: self.size, + titleColor: self.titleColor, + titleTypography: titleTypography, + imageTintColor: self.imageTintColor, + buttonTintColor: self.buttonTintColor, + backgroundColor: self.backgroundColor, + disabledAlpha: self.disabledAlpha + ) + } + + func imageTintColor(_ imageTintColor: ColorToken) -> ChipAppearance { + return ChipAppearance( + size: self.size, + titleColor: self.titleColor, + titleTypography: self.titleTypography, + imageTintColor: imageTintColor, + buttonTintColor: self.buttonTintColor, + backgroundColor: self.backgroundColor, + disabledAlpha: self.disabledAlpha + ) + } + + func buttonTintColor(_ buttonTintColor: ColorToken) -> ChipAppearance { + return ChipAppearance( + size: self.size, + titleColor: self.titleColor, + titleTypography: self.titleTypography, + imageTintColor: self.imageTintColor, + buttonTintColor: buttonTintColor, + backgroundColor: self.backgroundColor, + disabledAlpha: self.disabledAlpha + ) + } + + func backgroundColor(_ backgroundColor: ColorToken) -> ChipAppearance { + return ChipAppearance( + size: self.size, + titleColor: self.titleColor, + titleTypography: self.titleTypography, + imageTintColor: self.imageTintColor, + buttonTintColor: self.buttonTintColor, + backgroundColor: backgroundColor, + disabledAlpha: self.disabledAlpha + ) + } + + func disabledAlpha(_ disabledAlpha: CGFloat) -> ChipAppearance { + return ChipAppearance( + size: self.size, + titleColor: self.titleColor, + titleTypography: self.titleTypography, + imageTintColor: self.imageTintColor, + buttonTintColor: self.buttonTintColor, + backgroundColor: self.backgroundColor, + disabledAlpha: disabledAlpha + ) + } + + func applyColorVariation(variation: ChipAppearance) -> ChipAppearance { + return ChipAppearance( + size: self.size, + titleColor: variation.titleColor, + titleTypography: self.titleTypography, + imageTintColor: variation.imageTintColor, + buttonTintColor: variation.buttonTintColor, + backgroundColor: variation.backgroundColor, + disabledAlpha: variation.disabledAlpha + ) + } +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/ChipAppearance.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/ChipAppearance/ChipAppearance.swift similarity index 73% rename from SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/ChipAppearance.swift rename to SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/ChipAppearance/ChipAppearance.swift index 4afef70c9..3094fc698 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/ChipAppearance.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/ChipAppearance/ChipAppearance.swift @@ -5,6 +5,7 @@ import Foundation `ChipAppearance` определяет внешний вид чипа, включая цвета и типографику. - Properties: + - size: Конфигурация размеров для чипа. - titleColor: Цвет текста заголовка. - titleTypography: Типографика заголовка. - imageTintColor: Цвет иконки. @@ -14,6 +15,7 @@ import Foundation */ public struct ChipAppearance: Hashable { let id = UUID() + public let size: ChipSizeConfiguration public let titleColor: ColorToken public let titleTypography: TypographyConfiguration public let imageTintColor: ColorToken @@ -22,13 +24,15 @@ public struct ChipAppearance: Hashable { public let disabledAlpha: CGFloat public init( - titleColor: ColorToken, - titleTypography: TypographyConfiguration, - imageTintColor: ColorToken, - buttonTintColor: ColorToken, - backgroundColor: ColorToken, - disabledAlpha: CGFloat + size: ChipSizeConfiguration = ZeroChipSize(), + titleColor: ColorToken = .clearColor, + titleTypography: TypographyConfiguration = .default, + imageTintColor: ColorToken = .clearColor, + buttonTintColor: ColorToken = .clearColor, + backgroundColor: ColorToken = .clearColor, + disabledAlpha: CGFloat = 0 ) { + self.size = size self.titleColor = titleColor self.titleTypography = titleTypography self.imageTintColor = imageTintColor diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/ChipAppearance/ChipBorderStyle.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/ChipAppearance/ChipBorderStyle.swift new file mode 100644 index 000000000..b677e71c0 --- /dev/null +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/ChipAppearance/ChipBorderStyle.swift @@ -0,0 +1,22 @@ +import Foundation + +/** + `ChipBorderStyle` определяет стиль границы для чипа. + + - `default`: Стиль по умолчанию с заданным радиусом скругления. + - `pilled`: Закругленный стиль с максимальным радиусом скругления. + */ +public enum ChipBorderStyle: Hashable { + case `default`(_ cornerRadius: CGFloat) + case pilled + + public func hash(into hasher: inout Hasher) { + switch self { + case .default(let cornerRadius): + hasher.combine("default") + hasher.combine(cornerRadius) + case .pilled: + hasher.combine("pilled") + } + } +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/ChipAppearance/ChipSizeConfiguration.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/ChipAppearance/ChipSizeConfiguration.swift new file mode 100644 index 000000000..2e28edd68 --- /dev/null +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/ChipAppearance/ChipSizeConfiguration.swift @@ -0,0 +1,35 @@ +import Foundation + +/** + `ChipSizeConfiguration` определяет конфигурацию размеров для чипа. + + - Properties: + - iconImageSize: Размер изображения иконки. + - buttonImageSize: Размер изображения кнопки. + - leadingInset: Внутренний отступ слева. + - trailingInset: Внутренний отступ справа. + - spacing: Расстояние между элементами. + - borderStyle: Стиль границы чипа. + - height: Высота чипа. + */ +public protocol ChipSizeConfiguration: SizeConfiguration, CustomDebugStringConvertible { + var iconImageSize: CGSize? { get } + var buttonImageSize: CGSize? { get } + var leadingInset: CGFloat { get } + var trailingInset: CGFloat { get } + var spacing: CGFloat { get } + var borderStyle: ChipBorderStyle { get } + var height: CGFloat { get } +} + +public struct ZeroChipSize: ChipSizeConfiguration { + public var iconImageSize: CGSize? { nil } + public var buttonImageSize: CGSize? { nil } + public var leadingInset: CGFloat { 0 } + public var trailingInset: CGFloat { 0 } + public var spacing: CGFloat { 0 } + public var borderStyle: ChipBorderStyle { .default(0) } + public var height: CGFloat { 0 } + public var debugDescription: String { "ZeroChipSize" } + public init() {} +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/ChipData.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/ChipData.swift new file mode 100644 index 000000000..3eb7d9fb8 --- /dev/null +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/ChipData.swift @@ -0,0 +1,45 @@ +import Foundation +import SwiftUI + +/** + Структура, представляющая данные для чипа. + + - Properties: + - id: Уникальный идентификатор чипа. + - title: Текст заголовка чипа. + - isEnabled: Флаг, указывающий, включен ли чип. + - iconImage: Изображение иконки для чипа. + - buttonImage: Изображение кнопки для чипа. + - appearance: Параметры внешнего вида чипа. + - accessibility: Параметры доступности для чипа. + - removeAction: Действие при нажатии на кнопку удаления. + */ +public struct ChipData: Hashable { + public let id: UUID + public let title: String + public let isEnabled: Bool + public let iconImage: Image? + public let buttonImage: Image? + public let appearance: ChipAppearance + public let accessibility: ChipAccessibility + public let removeAction: () -> Void + + public init(id: UUID = UUID(), title: String, isEnabled: Bool, iconImage: Image?, buttonImage: Image?, appearance: ChipAppearance, accessibility: ChipAccessibility, removeAction: @escaping () -> Void) { + self.id = id + self.title = title + self.isEnabled = isEnabled + self.iconImage = iconImage + self.buttonImage = buttonImage + self.appearance = appearance + self.accessibility = accessibility + self.removeAction = removeAction + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(id.uuidString) + } + + public static func == (lhs: ChipData, rhs: ChipData) -> Bool { + lhs.id == rhs.id + } +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/SDDSChip.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/SDDSChip.swift index 7f89cef27..41b0daa6d 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/SDDSChip.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSChip/SDDSChip.swift @@ -2,73 +2,6 @@ import Foundation import SwiftUI @_exported import SDDSThemeCore -/** - `ChipBorderStyle` определяет стиль границы для чипа. - - - `default`: Стиль по умолчанию с заданным радиусом скругления. - - `pilled`: Закругленный стиль с максимальным радиусом скругления. - */ -public enum ChipBorderStyle: Hashable { - case `default`(_ cornerRadius: CGFloat) - case pilled - - public func hash(into hasher: inout Hasher) { - switch self { - case .default(let cornerRadius): - hasher.combine("default") - hasher.combine(cornerRadius) - case .pilled: - hasher.combine("pilled") - } - } -} - -/** - `ChipSizeConfiguration` определяет конфигурацию размеров для чипа. - - - Properties: - - iconImageSize: Размер изображения иконки. - - buttonImageSize: Размер изображения кнопки. - - leadingInset: Внутренний отступ слева. - - trailingInset: Внутренний отступ справа. - - spacing: Расстояние между элементами. - - borderStyle: Стиль границы чипа. - - height: Высота чипа. - */ -public protocol ChipSizeConfiguration: SizeConfiguration, CustomDebugStringConvertible { - var iconImageSize: CGSize? { get } - var buttonImageSize: CGSize? { get } - var leadingInset: CGFloat { get } - var trailingInset: CGFloat { get } - var spacing: CGFloat { get } - var borderStyle: ChipBorderStyle { get } - var height: CGFloat { get } -} - -/** - `ChipAccessibility` определяет параметры доступности для чипа. - - - Properties: - - titleLabel: Метка доступности для заголовка. - - removeButtonLabel: Метка доступности для кнопки удаления. - - removeButtonHint: Подсказка для кнопки удаления. - */ -public struct ChipAccessibility { - public var titleLabel: String - public var removeButtonLabel: String - public var removeButtonHint: String - - public init( - titleLabel: String = "Chip Label", - removeButtonLabel: String = "Remove", - removeButtonHint: String = "Double-tap to remove the chip." - ) { - self.titleLabel = titleLabel - self.removeButtonLabel = removeButtonLabel - self.removeButtonHint = removeButtonHint - } -} - /** `SDDSChip` представляет собой настраиваемый чип, который может быть настроен с помощью различных параметров. @@ -78,7 +11,6 @@ public struct ChipAccessibility { - iconImage: Изображение иконки для чипа. - buttonImage: Изображение кнопки для чипа. - appearance: Параметры внешнего вида чипа. - - size: Конфигурация размеров для чипа. - accessibility: Параметры доступности для чипа. - removeAction: Действие при нажатии на кнопку удаления. */ @@ -88,7 +20,6 @@ public struct SDDSChip: View { let iconImage: Image? let buttonImage: Image? let appearance: ChipAppearance - let size: ChipSizeConfiguration let accessibility: ChipAccessibility let removeAction: () -> Void @@ -103,17 +34,15 @@ public struct SDDSChip: View { - iconImage: Изображение иконки для чипа (по умолчанию nil). - buttonImage: Изображение кнопки для чипа (по умолчанию nil). - appearance: Параметры внешнего вида чипа. - - size: Конфигурация размеров для чипа. - accessibility: Параметры доступности для чипа (по умолчанию `ChipAccessibility`). - removeAction: Действие при нажатии на кнопку удаления. */ - public init(title: String, isEnabled: Bool, iconImage: Image? = nil, buttonImage: Image? = nil, appearance: ChipAppearance, size: ChipSizeConfiguration, accessibility: ChipAccessibility = ChipAccessibility(), removeAction: @escaping () -> Void) { + public init(title: String, isEnabled: Bool, iconImage: Image? = nil, buttonImage: Image? = nil, appearance: ChipAppearance, accessibility: ChipAccessibility = ChipAccessibility(), removeAction: @escaping () -> Void) { self.title = title self.isEnabled = isEnabled self.iconImage = iconImage self.buttonImage = buttonImage self.appearance = appearance - self.size = size self.accessibility = accessibility self.removeAction = removeAction } @@ -130,7 +59,6 @@ public struct SDDSChip: View { self.iconImage = data.iconImage self.buttonImage = data.buttonImage self.appearance = data.appearance - self.size = data.size self.accessibility = data.accessibility self.removeAction = data.removeAction } @@ -138,8 +66,8 @@ public struct SDDSChip: View { public var body: some View { HStack(spacing: 0) { Spacer() - .frame(width: size.leadingInset) - if let iconImage = iconImage, let iconImageSize = size.iconImageSize { + .frame(width: appearance.size.leadingInset) + if let iconImage = iconImage, let iconImageSize = appearance.size.iconImageSize { iconImage .resizable() .renderingMode(.template) @@ -148,20 +76,20 @@ public struct SDDSChip: View { .foregroundColor(appearance.imageTintColor.color(for: colorScheme)) .accessibilityHidden(true) Spacer() - .frame(width: size.spacing) + .frame(width: appearance.size.spacing) } Text(title) .lineLimit(1) - .typography(appearance.titleTypography.typography(with: size) ?? .undefined) + .typography(appearance.titleTypography.typography(with: appearance.size) ?? .undefined) .frame(width: textWidth) .foregroundColor(appearance.titleColor.color(for: colorScheme)) .accessibilityLabel(Text(accessibility.titleLabel)) .accessibilityValue(Text(title)) - if let buttonImageSize = size.buttonImageSize, let buttonImage = buttonImage { + if let buttonImageSize = appearance.size.buttonImageSize, let buttonImage = buttonImage { Spacer() - .frame(width: size.spacing) + .frame(width: appearance.size.spacing) Button(action: handleRemove) { buttonImage .resizable() @@ -175,10 +103,10 @@ public struct SDDSChip: View { } } Spacer() - .frame(width: size.trailingInset) + .frame(width: appearance.size.trailingInset) } .onTapGesture(perform: handleRemove) - .frame(height: size.height) + .frame(height: appearance.size.height) .background( RoundedRectangle(cornerRadius: borderRadius) .fill(appearance.backgroundColor.color(for: colorScheme)) @@ -188,18 +116,18 @@ public struct SDDSChip: View { } private var textWidth: CGFloat { - let titleTypography = appearance.titleTypography.typography(with: size) ?? .undefined + let titleTypography = appearance.titleTypography.typography(with: appearance.size) ?? .undefined let textWidth = title.size(withAttributes: [.font: titleTypography.uiFont]).width return textWidth } private var borderRadius: CGFloat { - switch size.borderStyle { + switch appearance.size.borderStyle { case .default(let cornerRadius): return cornerRadius case .pilled: - return size.height / 2 + return appearance.size.height / 2 } } diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSChipGroup/SDDSChipGroup.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSChipGroup/SDDSChipGroup.swift index 5f543a7e3..ac419cd78 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSChipGroup/SDDSChipGroup.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSChipGroup/SDDSChipGroup.swift @@ -1,52 +1,6 @@ import Foundation import SwiftUI -/** - Структура, представляющая данные для чипа. - - - Properties: - - id: Уникальный идентификатор чипа. - - title: Текст заголовка чипа. - - isEnabled: Флаг, указывающий, включен ли чип. - - iconImage: Изображение иконки для чипа. - - buttonImage: Изображение кнопки для чипа. - - appearance: Параметры внешнего вида чипа. - - size: Конфигурация размеров для чипа. - - accessibility: Параметры доступности для чипа. - - removeAction: Действие при нажатии на кнопку удаления. - */ -public struct ChipData: Hashable { - public let id: UUID - public let title: String - public let isEnabled: Bool - public let iconImage: Image? - public let buttonImage: Image? - public let appearance: ChipAppearance - public let size: ChipSizeConfiguration - public let accessibility: ChipAccessibility - public let removeAction: () -> Void - - public init(id: UUID = UUID(), title: String, isEnabled: Bool, iconImage: Image?, buttonImage: Image?, appearance: ChipAppearance, size: ChipSizeConfiguration, accessibility: ChipAccessibility, removeAction: @escaping () -> Void) { - self.id = id - self.title = title - self.isEnabled = isEnabled - self.iconImage = iconImage - self.buttonImage = buttonImage - self.appearance = appearance - self.size = size - self.accessibility = accessibility - self.removeAction = removeAction - } - - public func hash(into hasher: inout Hasher) { - hasher.combine(id.uuidString) - } - - public static func == (lhs: ChipData, rhs: ChipData) -> Bool { - lhs.id == rhs.id - } -} - /** Перечисление, определяющее варианты выравнивания группы чипов. @@ -169,21 +123,21 @@ public struct SDDSChipGroup: View { private func calculateChipWidth(for chipData: ChipData) -> CGFloat { var totalWidth = CGFloat(0) - totalWidth += chipData.size.leadingInset - if let _ = chipData.iconImage, let iconImageSize = chipData.size.iconImageSize { + totalWidth += chipData.appearance.size.leadingInset + if let _ = chipData.iconImage, let iconImageSize = chipData.appearance.size.iconImageSize { totalWidth += iconImageSize.width - totalWidth += chipData.size.spacing + totalWidth += chipData.appearance.size.spacing } - let titleTypography = chipData.appearance.titleTypography.typography(with: chipData.size) ?? .undefined + let titleTypography = chipData.appearance.titleTypography.typography(with: chipData.appearance.size) ?? .undefined let textWidth = chipData.title.size(withAttributes: [.font: titleTypography.uiFont]).width totalWidth += textWidth - if let _ = chipData.buttonImage, let buttomImageSize = chipData.size.buttonImageSize { + if let _ = chipData.buttonImage, let buttomImageSize = chipData.appearance.size.buttonImageSize { totalWidth += buttomImageSize.width - totalWidth += chipData.size.spacing + totalWidth += chipData.appearance.size.spacing } - totalWidth += chipData.size.trailingInset + totalWidth += chipData.appearance.size.trailingInset return totalWidth } @@ -202,6 +156,6 @@ public struct SDDSChipGroup: View { guard let chipData = data.first else { return 0 } - return chipData.size.height + return chipData.appearance.size.height } } diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSProgressBar/ProgressBarAppearance.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSProgressBar/ProgressBarAppearance.swift deleted file mode 100644 index c7351d4ca..000000000 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSProgressBar/ProgressBarAppearance.swift +++ /dev/null @@ -1,18 +0,0 @@ -import Foundation - -/** - `ProgressBarAppearance` определяет внешний вид прогресс-бара, включая цвет индикатора и фона. - - - Properties: - - tintColor: Цвет индикатора прогресса. - - trackColor: Цвет фона прогресс-бара. - */ -public struct ProgressBarAppearance { - public let tintFillStyle: FillStyle - public let trackColor: ColorToken - - public init(tintFillStyle: FillStyle, trackColor: ColorToken) { - self.tintFillStyle = tintFillStyle - self.trackColor = trackColor - } -} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSProgressBar/ProgressBarAppearance/ProgressBarAccessibility.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSProgressBar/ProgressBarAppearance/ProgressBarAccessibility.swift new file mode 100644 index 000000000..211f19666 --- /dev/null +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSProgressBar/ProgressBarAppearance/ProgressBarAccessibility.swift @@ -0,0 +1,30 @@ +import Foundation +import SwiftUI +@_exported import SDDSThemeCore + +/** + `ProgressBarAccessibility` определяет параметры доступности для прогресс-бара. + + - Properties: + - progressLabel: Метка доступности для прогресс-бара. + - progressHint: Подсказка для прогресс-бара. + */ +public struct ProgressBarAccessibility { + public let progressLabel: String + public let progressHint: String + + /** + Инициализатор для создания параметров доступности прогресс-бара. + + - Parameters: + - progressLabel: Метка доступности для прогресс-бара. + - progressHint: Подсказка для прогресс-бара. + */ + public init( + progressLabel: String = "Progress", + progressHint: String = "Shows the current progress." + ) { + self.progressLabel = progressLabel + self.progressHint = progressHint + } +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSProgressBar/ProgressBarAppearance/ProgressBarAppearance+Extensions.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSProgressBar/ProgressBarAppearance/ProgressBarAppearance+Extensions.swift new file mode 100644 index 000000000..545d0ef0d --- /dev/null +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSProgressBar/ProgressBarAppearance/ProgressBarAppearance+Extensions.swift @@ -0,0 +1,35 @@ +import Foundation + +public extension ProgressBarAppearance { + func size(_ size: ProgressBarSizeConfiguration) -> ProgressBarAppearance { + return ProgressBarAppearance( + size: size, + tintFillStyle: self.tintFillStyle, + trackColor: self.trackColor + ) + } + + func tintFillStyle(_ tintFillStyle: FillStyle) -> ProgressBarAppearance { + return ProgressBarAppearance( + size: self.size, + tintFillStyle: tintFillStyle, + trackColor: self.trackColor + ) + } + + func trackColor(_ trackColor: ColorToken) -> ProgressBarAppearance { + return ProgressBarAppearance( + size: self.size, + tintFillStyle: self.tintFillStyle, + trackColor: trackColor + ) + } + + func applyColorVariation(variation: ProgressBarAppearance) -> ProgressBarAppearance { + return ProgressBarAppearance( + size: self.size, + tintFillStyle: variation.tintFillStyle, + trackColor: variation.trackColor + ) + } +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSProgressBar/ProgressBarAppearance/ProgressBarAppearance.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSProgressBar/ProgressBarAppearance/ProgressBarAppearance.swift new file mode 100644 index 000000000..c8cee2e35 --- /dev/null +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSProgressBar/ProgressBarAppearance/ProgressBarAppearance.swift @@ -0,0 +1,30 @@ +import Foundation + +/** + `ProgressBarAppearance` определяет внешний вид прогресс-бара, включая цвет индикатора и фона. + + - Properties: + - size: Конфигурация размеров для прогресс-бара. + - tintColor: Цвет индикатора прогресса. + - trackColor: Цвет фона прогресс-бара. + */ +public struct ProgressBarAppearance: Hashable { + let id = UUID() + public let size: ProgressBarSizeConfiguration + public let tintFillStyle: FillStyle + public let trackColor: ColorToken + + public init(size: ProgressBarSizeConfiguration = ZeroProgressBarSize(), tintFillStyle: FillStyle = .color(.clearColor), trackColor: ColorToken = .clearColor) { + self.size = size + self.tintFillStyle = tintFillStyle + self.trackColor = trackColor + } + + public static func == (lhs: ProgressBarAppearance, rhs: ProgressBarAppearance) -> Bool { + lhs.id == rhs.id + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSProgressBar/ProgressBarAppearance/ProgressBarSizeConfiguration.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSProgressBar/ProgressBarAppearance/ProgressBarSizeConfiguration.swift new file mode 100644 index 000000000..86a9e632e --- /dev/null +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSProgressBar/ProgressBarAppearance/ProgressBarSizeConfiguration.swift @@ -0,0 +1,28 @@ +import Foundation +import SwiftUI +@_exported import SDDSThemeCore + +/** + `ProgressBarSizeConfiguration` определяет конфигурацию размеров для прогресс-бара. + + - Properties: + - height: Высота прогресс-бара. + - indicatorHeight: Высота индикатора прогресса. + - cornerRadius: Радиус скругления углов прогресс-бара. + - indicatorCornerRadius: Радиус скругления углов индикатора прогресса. + */ +public protocol ProgressBarSizeConfiguration: SizeConfiguration, CustomDebugStringConvertible { + var height: CGFloat { get } + var indicatorHeight: CGFloat { get } + var cornerRadius: CGFloat { get } + var indicatorCornerRadius: CGFloat { get } +} + +public struct ZeroProgressBarSize: ProgressBarSizeConfiguration { + public var debugDescription: String { "ZeroProgressBarSize" } + public var height: CGFloat { 0 } + public var indicatorHeight: CGFloat { 0 } + public var cornerRadius: CGFloat { 0 } + public var indicatorCornerRadius: CGFloat { 0 } + public init() {} +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSProgressBar/SDDSProgressBar.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSProgressBar/SDDSProgressBar.swift index f20025d60..6620c0b14 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSProgressBar/SDDSProgressBar.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSProgressBar/SDDSProgressBar.swift @@ -2,49 +2,6 @@ import Foundation import SwiftUI @_exported import SDDSThemeCore -/** - `ProgressBarSizeConfiguration` определяет конфигурацию размеров для прогресс-бара. - - - Properties: - - height: Высота прогресс-бара. - - indicatorHeight: Высота индикатора прогресса. - - cornerRadius: Радиус скругления углов прогресс-бара. - - indicatorCornerRadius: Радиус скругления углов индикатора прогресса. - */ -public protocol ProgressBarSizeConfiguration: SizeConfiguration, CustomDebugStringConvertible { - var height: CGFloat { get } - var indicatorHeight: CGFloat { get } - var cornerRadius: CGFloat { get } - var indicatorCornerRadius: CGFloat { get } -} - -/** - `ProgressBarAccessibility` определяет параметры доступности для прогресс-бара. - - - Properties: - - progressLabel: Метка доступности для прогресс-бара. - - progressHint: Подсказка для прогресс-бара. - */ -public struct ProgressBarAccessibility { - public let progressLabel: String - public let progressHint: String - - /** - Инициализатор для создания параметров доступности прогресс-бара. - - - Parameters: - - progressLabel: Метка доступности для прогресс-бара. - - progressHint: Подсказка для прогресс-бара. - */ - public init( - progressLabel: String = "Progress", - progressHint: String = "Shows the current progress." - ) { - self.progressLabel = progressLabel - self.progressHint = progressHint - } -} - /** `SDDSProgressView` представляет собой настраиваемый прогресс-бар, который может быть настроен с помощью различных параметров. @@ -52,14 +9,12 @@ public struct ProgressBarAccessibility { - progress: Значение прогресса (от 0 до 1), отображаемое в виде заполняющейся полосы. - isEnabled: Флаг, указывающий, доступен ли прогресс-бар для взаимодействия. - appearance: Параметры внешнего вида прогресс-бара. - - size: Конфигурация размеров для прогресс-бара. - accessibility: Параметры доступности для прогресс-бара. */ public struct SDDSProgressView: View { @Binding var progress: Double let isEnabled: Bool let appearance: ProgressBarAppearance - let size: ProgressBarSizeConfiguration let accessibility: ProgressBarAccessibility @Environment(\.colorScheme) var colorScheme @@ -71,20 +26,17 @@ public struct SDDSProgressView: View { - progress: Значение прогресса (от 0 до 1), отображаемое в виде заполняющейся полосы. - isEnabled: Флаг, указывающий, доступен ли прогресс-бар для взаимодействия. - appearance: Параметры внешнего вида прогресс-бара. - - size: Конфигурация размеров для прогресс-бара. - accessibility: Параметры доступности для прогресс-бара. */ public init( progress: Binding, isEnabled: Bool = true, appearance: ProgressBarAppearance, - size: ProgressBarSizeConfiguration, accessibility: ProgressBarAccessibility = ProgressBarAccessibility() ) { self._progress = progress self.isEnabled = isEnabled self.appearance = appearance - self.size = size self.accessibility = accessibility } @@ -92,17 +44,17 @@ public struct SDDSProgressView: View { GeometryReader { geometry in ZStack(alignment: .leading) { // Background track - RoundedRectangle(cornerRadius: size.cornerRadius) + RoundedRectangle(cornerRadius: appearance.size.cornerRadius) .fill(appearance.trackColor.color(for: colorScheme)) - .frame(width: geometry.size.width, height: size.height) + .frame(width: geometry.size.width, height: appearance.size.height) // Progress indicator rectangle - .frame(width: CGFloat(normalizedProgress) * geometry.size.width, height: size.indicatorHeight) + .frame(width: CGFloat(normalizedProgress) * geometry.size.width, height: appearance.size.indicatorHeight) .position(x: CGFloat(normalizedProgress) * geometry.size.width / 2, y: geometry.size.height / 2) } } - .frame(height: size.indicatorHeight) + .frame(height: appearance.size.indicatorHeight) .accessibilityLabel(Text(accessibility.progressLabel)) .accessibilityValue(Text("\(Int(normalizedProgress * 100))%")) .accessibilityHint(Text(accessibility.progressHint)) @@ -113,11 +65,11 @@ public struct SDDSProgressView: View { private var rectangle: some View { switch appearance.tintFillStyle { case .color(let colorToken): - RoundedRectangle(cornerRadius: size.indicatorCornerRadius) + RoundedRectangle(cornerRadius: appearance.size.indicatorCornerRadius) .fill(colorToken.color(for: colorScheme)) case .gradient(let gradientToken): RoundedCornersMask( - cornerRadius: size.indicatorCornerRadius, + cornerRadius: appearance.size.indicatorCornerRadius, content: Rectangle().gradient(gradientToken) ) } diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSRadiobox/RadioboxAppearance.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSRadiobox/RadioboxAppearance.swift deleted file mode 100644 index 6fa9f05f4..000000000 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSRadiobox/RadioboxAppearance.swift +++ /dev/null @@ -1,21 +0,0 @@ -import Foundation -import SwiftUI -@_exported import SDDSThemeCore - -public struct RadioboxAppearance: SelectionControlAppearance { - public let titleTypography: TypographyConfiguration - public let subtitleTypography: TypographyConfiguration - public let titleColor: ColorToken - public let subtitleColor: ColorToken - public let disabledAlpha: CGFloat - public let imageTintColor: ColorToken? - - public init(titleTypography: TypographyConfiguration, subtitleTypography: TypographyConfiguration, titleColor: ColorToken, subtitleColor: ColorToken, disabledAlpha: CGFloat, imageTintColor: ColorToken?) { - self.titleTypography = titleTypography - self.subtitleTypography = subtitleTypography - self.titleColor = titleColor - self.subtitleColor = subtitleColor - self.disabledAlpha = disabledAlpha - self.imageTintColor = imageTintColor - } -} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSRadiobox/RadioboxAppearance/RadioboxAppearance+Extensions.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSRadiobox/RadioboxAppearance/RadioboxAppearance+Extensions.swift new file mode 100644 index 000000000..5d8884cb1 --- /dev/null +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSRadiobox/RadioboxAppearance/RadioboxAppearance+Extensions.swift @@ -0,0 +1,99 @@ +import Foundation + +public extension RadioboxAppearance { + func size(_ size: SelectionControlSizeConfiguration) -> RadioboxAppearance { + return RadioboxAppearance( + size: size, + titleTypography: self.titleTypography, + subtitleTypography: self.subtitleTypography, + titleColor: self.titleColor, + subtitleColor: self.subtitleColor, + disabledAlpha: self.disabledAlpha, + imageTintColor: self.imageTintColor + ) + } + + func titleTypography(_ titleTypography: TypographyConfiguration) -> RadioboxAppearance { + return RadioboxAppearance( + size: self.size, + titleTypography: titleTypography, + subtitleTypography: self.subtitleTypography, + titleColor: self.titleColor, + subtitleColor: self.subtitleColor, + disabledAlpha: self.disabledAlpha, + imageTintColor: self.imageTintColor + ) + } + + func subtitleTypography(_ subtitleTypography: TypographyConfiguration) -> RadioboxAppearance { + return RadioboxAppearance( + size: self.size, + titleTypography: self.titleTypography, + subtitleTypography: subtitleTypography, + titleColor: self.titleColor, + subtitleColor: self.subtitleColor, + disabledAlpha: self.disabledAlpha, + imageTintColor: self.imageTintColor + ) + } + + func titleColor(_ titleColor: ColorToken) -> RadioboxAppearance { + return RadioboxAppearance( + size: self.size, + titleTypography: self.titleTypography, + subtitleTypography: self.subtitleTypography, + titleColor: titleColor, + subtitleColor: self.subtitleColor, + disabledAlpha: self.disabledAlpha, + imageTintColor: self.imageTintColor + ) + } + + func subtitleColor(_ subtitleColor: ColorToken) -> RadioboxAppearance { + return RadioboxAppearance( + size: self.size, + titleTypography: self.titleTypography, + subtitleTypography: self.subtitleTypography, + titleColor: self.titleColor, + subtitleColor: subtitleColor, + disabledAlpha: self.disabledAlpha, + imageTintColor: self.imageTintColor + ) + } + + func disabledAlpha(_ disabledAlpha: CGFloat) -> RadioboxAppearance { + return RadioboxAppearance( + size: self.size, + titleTypography: self.titleTypography, + subtitleTypography: self.subtitleTypography, + titleColor: self.titleColor, + subtitleColor: self.subtitleColor, + disabledAlpha: disabledAlpha, + imageTintColor: self.imageTintColor + ) + } + + func imageTintColor(_ imageTintColor: ColorToken?) -> RadioboxAppearance { + return RadioboxAppearance( + size: self.size, + titleTypography: self.titleTypography, + subtitleTypography: self.subtitleTypography, + titleColor: self.titleColor, + subtitleColor: self.subtitleColor, + disabledAlpha: self.disabledAlpha, + imageTintColor: imageTintColor + ) + } + + func applyColorVariation(variation: RadioboxAppearance) -> RadioboxAppearance { + return RadioboxAppearance( + size: self.size, + titleTypography: self.titleTypography, + subtitleTypography: self.subtitleTypography, + titleColor: variation.titleColor, + subtitleColor: variation.subtitleColor, + disabledAlpha: variation.disabledAlpha, + imageTintColor: variation.imageTintColor + ) + } +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSRadiobox/RadioboxAppearance/RadioboxAppearance.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSRadiobox/RadioboxAppearance/RadioboxAppearance.swift new file mode 100644 index 000000000..db422a521 --- /dev/null +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSRadiobox/RadioboxAppearance/RadioboxAppearance.swift @@ -0,0 +1,39 @@ +import Foundation +import SwiftUI +@_exported import SDDSThemeCore + +public struct RadioboxAppearance: SelectionControlAppearance, Hashable { + let id = UUID() + public let size: SelectionControlSizeConfiguration + public let titleTypography: TypographyConfiguration + public let subtitleTypography: TypographyConfiguration + public let titleColor: ColorToken + public let subtitleColor: ColorToken + public let disabledAlpha: CGFloat + public let imageTintColor: ColorToken? + + public init( + size: SelectionControlSizeConfiguration = ZeroSelectionControlSize(), + titleTypography: TypographyConfiguration = .default, + subtitleTypography: TypographyConfiguration = .default, + titleColor: ColorToken = .clearColor, + subtitleColor: ColorToken = .clearColor, + disabledAlpha: CGFloat = 0, + imageTintColor: ColorToken? = nil) { + self.size = size + self.titleTypography = titleTypography + self.subtitleTypography = subtitleTypography + self.titleColor = titleColor + self.subtitleColor = subtitleColor + self.disabledAlpha = disabledAlpha + self.imageTintColor = imageTintColor + } + + public static func == (lhs: RadioboxAppearance, rhs: RadioboxAppearance) -> Bool { + lhs.id == rhs.id + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSRadiobox/RadioboxData.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSRadiobox/RadioboxData.swift new file mode 100644 index 000000000..95d43c752 --- /dev/null +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSRadiobox/RadioboxData.swift @@ -0,0 +1,46 @@ +import Foundation +import SwiftUI + +/** + `RadioboxData` представляет собой данные для одного радиобокса. + + - Properties: + - id: Уникальный идентификатор радиобокса. + - title: Название радиобокса, отображаемое пользователю. + - subtitle: Подзаголовок радиобокса, отображаемый под названием (опционально). + - isSelected: Состояние выбранности радиобокса, привязанное к Binding. + - isEnabled: Указывает, включен ли радиобокс. + - images: Изображения для состояния выбранности и невыбранности радиобокса. + - appearance: Внешний вид радиобокса, определяемый `RadioboxAppearance`. + - accessibility: Параметры доступности для радиобокса. + */ +public struct RadioboxData: Identifiable { + public let id: UUID + public let title: String + public let subtitle: String? + public let isSelected: Binding + public let isEnabled: Bool + public let images: RadioboxImages + public let appearance: RadioboxAppearance + public let accessibility: SelectionControlAccessibility + + public init( + id: UUID = UUID(), + title: String, + subtitle: String? = nil, + isSelected: Binding, + isEnabled: Bool = true, + images: RadioboxImages, + appearance: RadioboxAppearance, + accessibility: SelectionControlAccessibility + ) { + self.id = id + self.title = title + self.subtitle = subtitle + self.isSelected = isSelected + self.isEnabled = isEnabled + self.images = images + self.appearance = appearance + self.accessibility = accessibility + } +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSRadiobox/SDDSRadiobox.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSRadiobox/SDDSRadiobox.swift index 5eeb2df0b..fb5875f15 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSRadiobox/SDDSRadiobox.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSRadiobox/SDDSRadiobox.swift @@ -18,7 +18,6 @@ public struct SDDSRadiobox: View { let subtitle: String? let isEnabled: Bool let images: RadioboxImages - let size: SelectionControlSizeConfiguration let appearance: RadioboxAppearance let accessibility: SelectionControlAccessibility @@ -28,7 +27,6 @@ public struct SDDSRadiobox: View { subtitle: String? = nil, isEnabled: Bool, images: RadioboxImages, - size: SelectionControlSizeConfiguration, appearance: RadioboxAppearance, accessibility: SelectionControlAccessibility = SelectionControlAccessibility() ) { @@ -37,7 +35,6 @@ public struct SDDSRadiobox: View { self.subtitle = subtitle self.isEnabled = isEnabled self.images = images - self.size = size self.appearance = appearance self.accessibility = accessibility } @@ -56,7 +53,6 @@ public struct SDDSRadiobox: View { title: title, subtitle: subtitle, isEnabled: isEnabled, - size: size, appearance: appearance, images: .init( selectedImage: images.selectedImage, diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSRadioboxGroup/SDDSRadioboxGroup.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSRadioboxGroup/SDDSRadioboxGroup.swift index cb95d89c9..df3a2d4a8 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSRadioboxGroup/SDDSRadioboxGroup.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSRadioboxGroup/SDDSRadioboxGroup.swift @@ -1,53 +1,5 @@ import SwiftUI -/** - `RadioboxData` представляет собой данные для одного радиобокса. - - - Properties: - - id: Уникальный идентификатор радиобокса. - - title: Название радиобокса, отображаемое пользователю. - - subtitle: Подзаголовок радиобокса, отображаемый под названием (опционально). - - isSelected: Состояние выбранности радиобокса, привязанное к Binding. - - isEnabled: Указывает, включен ли радиобокс. - - images: Изображения для состояния выбранности и невыбранности радиобокса. - - size: Конфигурация размера радиобокса. - - appearance: Внешний вид радиобокса, определяемый `RadioboxAppearance`. - - accessibility: Параметры доступности для радиобокса. - */ -public struct RadioboxData: Identifiable { - public let id: UUID - public let title: String - public let subtitle: String? - public let isSelected: Binding - public let isEnabled: Bool - public let images: RadioboxImages - public let size: SelectionControlSizeConfiguration - public let appearance: RadioboxAppearance - public let accessibility: SelectionControlAccessibility - - public init( - id: UUID = UUID(), - title: String, - subtitle: String? = nil, - isSelected: Binding, - isEnabled: Bool = true, - images: RadioboxImages, - size: SelectionControlSizeConfiguration, - appearance: RadioboxAppearance, - accessibility: SelectionControlAccessibility - ) { - self.id = id - self.title = title - self.subtitle = subtitle - self.isSelected = isSelected - self.isEnabled = isEnabled - self.images = images - self.size = size - self.appearance = appearance - self.accessibility = accessibility - } -} - /** `RadioboxGroupSizeConfiguration` задает конфигурацию размеров`. @@ -86,7 +38,6 @@ public struct SDDSRadioboxGroup: View { subtitle: data.subtitle, isEnabled: data.isEnabled, images: data.images, - size: data.size, appearance: data.appearance, accessibility: data.accessibility ) diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSSwitch/SDDSSwitch.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSSwitch/SDDSSwitch.swift index 84a1f2cde..e1fe664c8 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSSwitch/SDDSSwitch.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSSwitch/SDDSSwitch.swift @@ -2,131 +2,6 @@ import Foundation import SwiftUI @_exported import SDDSThemeCore -/** - `SwitchSizeConfiguration` определяет конфигурацию размеров для переключателя. - - - Properties: - - width: Ширина переключателя. - - verticalGap: Вертикальный зазор между элементами. - */ -public protocol SwitchSizeConfiguration: SizeConfiguration, CustomDebugStringConvertible { - var width: CGFloat? { get } - var verticalGap: CGFloat { get } -} - -/** - `SwitchAppearance` определяет внешний вид переключателя, включая типографику и цвета для различных состояний. - - - Properties: - - titleTypography: Типографика для заголовка переключателя. - - subtitleTypography: Типографика для подзаголовка переключателя. - - titleColor: Цвет заголовка, когда переключатель включен. - - subtitleColor: Цвет подзаголовка, когда переключатель включен. - - tintColor: Цвет переключателя, когда он включен. - */ -public struct SwitchAppearance { - public let titleTypography: TypographyConfiguration - public let subtitleTypography: TypographyConfiguration - public let titleColor: ColorToken - public let subtitleColor: ColorToken - public let tintColor: ColorToken - public let disabledAlpha: CGFloat - - public init(titleTypography: TypographyConfiguration, subtitleTypography: TypographyConfiguration, titleColor: ColorToken, subtitleColor: ColorToken, tintColor: ColorToken, disabledAlpha: CGFloat) { - self.titleTypography = titleTypography - self.subtitleTypography = subtitleTypography - self.titleColor = titleColor - self.subtitleColor = subtitleColor - self.tintColor = tintColor - self.disabledAlpha = disabledAlpha - } - -} - -public extension SwitchAppearance { - /** - Возвращает цвет переключателя в зависимости от его состояния (включен/выключен). - - - Parameter isEnabled: Флаг, указывающий, включен ли переключатель. - - Returns: Цвет переключателя. - */ - func tintColor(for isEnabled: Bool) -> ColorToken { - return isEnabled ? tintColor : tintColor.withOpacity(disabledAlpha) - } - - /** - Возвращает цвет заголовка в зависимости от состояния переключателя (включен/выключен). - - - Parameter isEnabled: Флаг, указывающий, включен ли переключатель. - - Returns: Цвет заголовка. - */ - func titleColor(for isEnabled: Bool) -> ColorToken { - return isEnabled ? titleColor : titleColor.withOpacity(disabledAlpha) - } - - /** - Возвращает цвет подзаголовка в зависимости от состояния переключателя (включен/выключен). - - - Parameter isEnabled: Флаг, указывающий, включен ли переключатель. - - Returns: Цвет подзаголовка. - */ - func subtitleColor(for isEnabled: Bool) -> ColorToken { - return isEnabled ? subtitleColor : subtitleColor.withOpacity(disabledAlpha) - } -} - -/** - `SwitchAccessibility` определяет параметры доступности для переключателя. - - - Properties: - - titleLabel: Метка доступности для заголовка. - - subtitleLabel: Метка доступности для подзаголовка. - - toggleLabel: Метка доступности для переключателя. - - toggleHint: Подсказка для переключателя. - - switchLabel: Метка доступности для всего переключателя. - - switchEnabledValue: Значение доступности, когда переключатель включен. - - switchDisabledValue: Значение доступности, когда переключатель выключен. - */ -public struct SwitchAccessibility { - public var titleLabel: String - public var subtitleLabel: String - public var toggleLabel: String - public var toggleHint: String - public var switchLabel: String - public var switchEnabledValue: String - public var switchDisabledValue: String - - /** - Инициализатор для создания параметров доступности переключателя. - - - Parameters: - - titleLabel: Метка доступности для заголовка. - - subtitleLabel: Метка доступности для подзаголовка. - - toggleLabel: Метка доступности для переключателя. - - toggleHint: Подсказка для переключателя. - - switchLabel: Метка доступности для всего переключателя. - - switchEnabledValue: Значение доступности, когда переключатель включен. - - switchDisabledValue: Значение доступности, когда переключатель выключен. - */ - public init( - titleLabel: String = "Title", - subtitleLabel: String = "Subtitle", - toggleLabel: String = "Toggle", - toggleHint: String = "Double-tap to toggle the switch.", - switchLabel: String = "Switch", - switchEnabledValue: String = "Enabled", - switchDisabledValue: String = "Disabled" - ) { - self.titleLabel = titleLabel - self.subtitleLabel = subtitleLabel - self.toggleLabel = toggleLabel - self.toggleHint = toggleHint - self.switchLabel = switchLabel - self.switchEnabledValue = switchEnabledValue - self.switchDisabledValue = switchDisabledValue - } -} - /** `SDDSSwitch` представляет собой настраиваемый переключатель, который может быть настроен с помощью различных параметров. @@ -135,7 +10,6 @@ public struct SwitchAccessibility { - subtitle: Текст подзаголовка для переключателя. - isOn: Связка состояния включения/выключения переключателя. - isEnabled: Флаг, указывающий, включен ли переключатель. - - size: Конфигурация размеров для переключателя. - appearance: Параметры внешнего вида переключателя. - switchAccessibility: Параметры доступности для переключателя. */ @@ -144,7 +18,6 @@ public struct SDDSSwitch: View { public let subtitle: String @Binding public var isOn: Bool public let isEnabled: Bool - public let size: SwitchSizeConfiguration public let appearance: SwitchAppearance public let switchAccessibility: SwitchAccessibility @@ -158,7 +31,6 @@ public struct SDDSSwitch: View { - subtitle: Текст подзаголовка для переключателя. - isOn: Связка состояния включения/выключения переключателя. - isEnabled: Флаг, указывающий, включен ли переключатель. - - size: Конфигурация размеров для переключателя. - appearance: Параметры внешнего вида переключателя. - switchAccessibility: Параметры доступности для переключателя. */ @@ -167,7 +39,6 @@ public struct SDDSSwitch: View { subtitle: String = "", isOn: Binding = .constant(true), isEnabled: Bool = true, - size: SwitchSizeConfiguration, appearance: SwitchAppearance, switchAccessibility: SwitchAccessibility ) { @@ -175,13 +46,12 @@ public struct SDDSSwitch: View { self.subtitle = subtitle self._isOn = isOn self.isEnabled = isEnabled - self.size = size self.appearance = appearance self.switchAccessibility = switchAccessibility } public var body: some View { - if let width = size.width { + if let width = appearance.size.width { content .frame(width: width) } else { @@ -191,7 +61,7 @@ public struct SDDSSwitch: View { } private var content: some View { - VStack(alignment: .leading, spacing: size.verticalGap) { + VStack(alignment: .leading, spacing: appearance.size.verticalGap) { HStack { if !title.isEmpty { Text(title) @@ -224,18 +94,18 @@ public struct SDDSSwitch: View { } var titleTypography: TypographyToken { - if let typography = appearance.titleTypography.typography(with: size) { + if let typography = appearance.titleTypography.typography(with: appearance.size) { return typography } else { - fatalError("Undefined Switch Typography for size \(size.debugDescription).") + fatalError("Undefined Switch Typography for size \(appearance.size.debugDescription).") } } var subtitleTypography: TypographyToken { - if let typography = appearance.subtitleTypography.typography(with: size) { + if let typography = appearance.subtitleTypography.typography(with: appearance.size) { return typography } else { - fatalError("Undefined Switch Typography for size \(size.debugDescription). Using a default value.") + fatalError("Undefined Switch Typography for size \(appearance.size.debugDescription). Using a default value.") } } diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSSwitch/SwitchAppearance/SwitchAccessibility.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSSwitch/SwitchAppearance/SwitchAccessibility.swift new file mode 100644 index 000000000..2af2606b3 --- /dev/null +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSSwitch/SwitchAppearance/SwitchAccessibility.swift @@ -0,0 +1,53 @@ +import Foundation + +/** + `SwitchAccessibility` определяет параметры доступности для переключателя. + + - Properties: + - titleLabel: Метка доступности для заголовка. + - subtitleLabel: Метка доступности для подзаголовка. + - toggleLabel: Метка доступности для переключателя. + - toggleHint: Подсказка для переключателя. + - switchLabel: Метка доступности для всего переключателя. + - switchEnabledValue: Значение доступности, когда переключатель включен. + - switchDisabledValue: Значение доступности, когда переключатель выключен. + */ +public struct SwitchAccessibility { + public var titleLabel: String + public var subtitleLabel: String + public var toggleLabel: String + public var toggleHint: String + public var switchLabel: String + public var switchEnabledValue: String + public var switchDisabledValue: String + + /** + Инициализатор для создания параметров доступности переключателя. + + - Parameters: + - titleLabel: Метка доступности для заголовка. + - subtitleLabel: Метка доступности для подзаголовка. + - toggleLabel: Метка доступности для переключателя. + - toggleHint: Подсказка для переключателя. + - switchLabel: Метка доступности для всего переключателя. + - switchEnabledValue: Значение доступности, когда переключатель включен. + - switchDisabledValue: Значение доступности, когда переключатель выключен. + */ + public init( + titleLabel: String = "Title", + subtitleLabel: String = "Subtitle", + toggleLabel: String = "Toggle", + toggleHint: String = "Double-tap to toggle the switch.", + switchLabel: String = "Switch", + switchEnabledValue: String = "Enabled", + switchDisabledValue: String = "Disabled" + ) { + self.titleLabel = titleLabel + self.subtitleLabel = subtitleLabel + self.toggleLabel = toggleLabel + self.toggleHint = toggleHint + self.switchLabel = switchLabel + self.switchEnabledValue = switchEnabledValue + self.switchDisabledValue = switchDisabledValue + } +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSSwitch/SwitchAppearance/SwitchAppearance+Extensions.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSSwitch/SwitchAppearance/SwitchAppearance+Extensions.swift new file mode 100644 index 000000000..117b8ff06 --- /dev/null +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSSwitch/SwitchAppearance/SwitchAppearance+Extensions.swift @@ -0,0 +1,100 @@ +// MARK: - SwitchAppearance Extension +import Foundation + +public extension SwitchAppearance { + func size(_ size: SwitchSizeConfiguration) -> SwitchAppearance { + return SwitchAppearance( + size: size, + titleTypography: self.titleTypography, + subtitleTypography: self.subtitleTypography, + titleColor: self.titleColor, + subtitleColor: self.subtitleColor, + tintColor: self.tintColor, + disabledAlpha: self.disabledAlpha + ) + } + + func titleTypography(_ titleTypography: TypographyConfiguration) -> SwitchAppearance { + return SwitchAppearance( + size: self.size, + titleTypography: titleTypography, + subtitleTypography: self.subtitleTypography, + titleColor: self.titleColor, + subtitleColor: self.subtitleColor, + tintColor: self.tintColor, + disabledAlpha: self.disabledAlpha + ) + } + + func subtitleTypography(_ subtitleTypography: TypographyConfiguration) -> SwitchAppearance { + return SwitchAppearance( + size: self.size, + titleTypography: self.titleTypography, + subtitleTypography: subtitleTypography, + titleColor: self.titleColor, + subtitleColor: self.subtitleColor, + tintColor: self.tintColor, + disabledAlpha: self.disabledAlpha + ) + } + + func titleColor(_ titleColor: ColorToken) -> SwitchAppearance { + return SwitchAppearance( + size: self.size, + titleTypography: self.titleTypography, + subtitleTypography: self.subtitleTypography, + titleColor: titleColor, + subtitleColor: self.subtitleColor, + tintColor: self.tintColor, + disabledAlpha: self.disabledAlpha + ) + } + + func subtitleColor(_ subtitleColor: ColorToken) -> SwitchAppearance { + return SwitchAppearance( + size: self.size, + titleTypography: self.titleTypography, + subtitleTypography: self.subtitleTypography, + titleColor: self.titleColor, + subtitleColor: subtitleColor, + tintColor: self.tintColor, + disabledAlpha: self.disabledAlpha + ) + } + + func tintColor(_ tintColor: ColorToken) -> SwitchAppearance { + return SwitchAppearance( + size: self.size, + titleTypography: self.titleTypography, + subtitleTypography: self.subtitleTypography, + titleColor: self.titleColor, + subtitleColor: self.subtitleColor, + tintColor: tintColor, + disabledAlpha: self.disabledAlpha + ) + } + + func disabledAlpha(_ disabledAlpha: CGFloat) -> SwitchAppearance { + return SwitchAppearance( + size: self.size, + titleTypography: self.titleTypography, + subtitleTypography: self.subtitleTypography, + titleColor: self.titleColor, + subtitleColor: self.subtitleColor, + tintColor: self.tintColor, + disabledAlpha: disabledAlpha + ) + } + + func applyColorVariation(variation: SwitchAppearance) -> SwitchAppearance { + return SwitchAppearance( + size: self.size, + titleTypography: self.titleTypography, + subtitleTypography: self.subtitleTypography, + titleColor: variation.titleColor, + subtitleColor: variation.subtitleColor, + tintColor: variation.tintColor, + disabledAlpha: disabledAlpha + ) + } +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSSwitch/SwitchAppearance/SwitchAppearance.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSSwitch/SwitchAppearance/SwitchAppearance.swift new file mode 100644 index 000000000..23e9265cc --- /dev/null +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSSwitch/SwitchAppearance/SwitchAppearance.swift @@ -0,0 +1,82 @@ +import Foundation +@_exported import SDDSThemeCore + +/** + `SwitchAppearance` определяет внешний вид переключателя, включая типографику и цвета для различных состояний. + + - Properties: + - size: Конфигурация размеров для переключателя. + - titleTypography: Типографика для заголовка переключателя. + - subtitleTypography: Типографика для подзаголовка переключателя. + - titleColor: Цвет заголовка, когда переключатель включен. + - subtitleColor: Цвет подзаголовка, когда переключатель включен. + - tintColor: Цвет переключателя, когда он включен. + */ +public struct SwitchAppearance: Hashable { + let id = UUID() + public let size: SwitchSizeConfiguration + public let titleTypography: TypographyConfiguration + public let subtitleTypography: TypographyConfiguration + public let titleColor: ColorToken + public let subtitleColor: ColorToken + public let tintColor: ColorToken + public let disabledAlpha: CGFloat + + public init( + size: SwitchSizeConfiguration = DefaultSwitchSize(), + titleTypography: TypographyConfiguration = .default, + subtitleTypography: TypographyConfiguration = .default, + titleColor: ColorToken = .clearColor, + subtitleColor: ColorToken = .clearColor, + tintColor: ColorToken = .clearColor, + disabledAlpha: CGFloat = 0 + ) { + self.size = size + self.titleTypography = titleTypography + self.subtitleTypography = subtitleTypography + self.titleColor = titleColor + self.subtitleColor = subtitleColor + self.tintColor = tintColor + self.disabledAlpha = disabledAlpha + } + + public static func == (lhs: SwitchAppearance, rhs: SwitchAppearance) -> Bool { + lhs.id == rhs.id + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(id) + } +} + +public extension SwitchAppearance { + /** + Возвращает цвет переключателя в зависимости от его состояния (включен/выключен). + + - Parameter isEnabled: Флаг, указывающий, включен ли переключатель. + - Returns: Цвет переключателя. + */ + func tintColor(for isEnabled: Bool) -> ColorToken { + return isEnabled ? tintColor : tintColor.withOpacity(disabledAlpha) + } + + /** + Возвращает цвет заголовка в зависимости от состояния переключателя (включен/выключен). + + - Parameter isEnabled: Флаг, указывающий, включен ли переключатель. + - Returns: Цвет заголовка. + */ + func titleColor(for isEnabled: Bool) -> ColorToken { + return isEnabled ? titleColor : titleColor.withOpacity(disabledAlpha) + } + + /** + Возвращает цвет подзаголовка в зависимости от состояния переключателя (включен/выключен). + + - Parameter isEnabled: Флаг, указывающий, включен ли переключатель. + - Returns: Цвет подзаголовка. + */ + func subtitleColor(for isEnabled: Bool) -> ColorToken { + return isEnabled ? subtitleColor : subtitleColor.withOpacity(disabledAlpha) + } +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSSwitch/SwitchAppearance/SwitchSizeConfiguration.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSSwitch/SwitchAppearance/SwitchSizeConfiguration.swift new file mode 100644 index 000000000..28d655e97 --- /dev/null +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSSwitch/SwitchAppearance/SwitchSizeConfiguration.swift @@ -0,0 +1,25 @@ +import Foundation +@_exported import SDDSThemeCore + +/** + `SwitchSizeConfiguration` определяет конфигурацию размеров для переключателя. + + - Properties: + - width: Ширина переключателя. + - verticalGap: Вертикальный зазор между элементами. + */ +public protocol SwitchSizeConfiguration: SizeConfiguration, CustomDebugStringConvertible { + var width: CGFloat? { get } + var verticalGap: CGFloat { get } +} + +public struct DefaultSwitchSize: SwitchSizeConfiguration { + public var width: CGFloat? = nil + public var verticalGap: CGFloat = 0 + + public var debugDescription: String { + return "Default Size" + } + + public init() {} +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSTextArea/SDDSTextArea.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSTextArea/SDDSTextArea.swift index dcbca010a..b3491c0bc 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSTextArea/SDDSTextArea.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSTextArea/SDDSTextArea.swift @@ -774,7 +774,7 @@ public struct SDDSTextArea: View { case .single: return 0 case .multiple(_, let chips): - guard let chipSize = chips.first?.size else { + guard let chipSize = chips.first?.appearance.size else { return 0 } switch chipSize.borderStyle { diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSTextField/SDDSTextField.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSTextField/SDDSTextField.swift index b027d789a..5280f11dd 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSTextField/SDDSTextField.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSTextField/SDDSTextField.swift @@ -545,7 +545,7 @@ public struct SDDSTextField: View { private var backgroundColor: Color { if readOnly { - appearance.backgroundColorDefault.color(for: colorScheme) + return appearance.backgroundColorDefault.color(for: colorScheme) } return appearance.backgroundColor(for: style, isFocused: isFocused, readOnly: readOnly).color(for: colorScheme) } @@ -645,10 +645,11 @@ public struct SDDSTextField: View { // MARK: - Computed Properties for Conditions private func calculateTextWidth(text: String, placeholder: String, proxy: GeometryProxy) -> CGFloat { + let deltaPadding: CGFloat = 1.0 let textSize = (text as NSString).size(withAttributes: [NSAttributedString.Key.font: textTypography.uiFont]) if displayChips { if !text.isEmpty { - return textSize.width + size.textHorizontalPadding + return textSize.width + deltaPadding } else { let placeholderSize = (placeholder as NSString).size(withAttributes: [NSAttributedString.Key.font: textTypography.uiFont]) return placeholderSize.width @@ -659,17 +660,17 @@ public struct SDDSTextField: View { maxWidth -= size.textInputPaddings.leading + size.textInputPaddings.trailing if !textBefore.isEmpty && !displayChips { let textBeforeSize = (textBefore as NSString).size(withAttributes: [NSAttributedString.Key.font: textBeforeTypography.uiFont]) - maxWidth -= (textBeforeSize.width + size.textHorizontalPadding) + maxWidth -= (textBeforeSize.width + deltaPadding) maxWidth -= (size.textBeforeLeadingPadding + size.textBeforeTrailingPadding) } if !textAfter.isEmpty && !displayChips { let textBeforeSize = (textAfter as NSString).size(withAttributes: [NSAttributedString.Key.font: textAfterTypography.uiFont]) - maxWidth -= (textBeforeSize.width + size.textHorizontalPadding) + maxWidth -= (textBeforeSize.width + deltaPadding) maxWidth -= (size.textAfterLeadingPadding + size.textAfterTrailingPadding) } return min( - textSize.width + size.textHorizontalPadding, + textSize.width + deltaPadding, maxWidth ) } @@ -768,7 +769,7 @@ public struct SDDSTextField: View { case .single: return 0 case .multiple(_, let chips): - guard let chipSize = chips.first?.size else { + guard let chipSize = chips.first?.appearance.size else { return 0 } switch chipSize.borderStyle { diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSTextField/TextFieldSizeConfiguration.swift b/SDDSComponents/Sources/SDDSComponents/Components/SDDSTextField/TextFieldSizeConfiguration.swift index 4b1d307b0..702744c78 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSTextField/TextFieldSizeConfiguration.swift +++ b/SDDSComponents/Sources/SDDSComponents/Components/SDDSTextField/TextFieldSizeConfiguration.swift @@ -22,8 +22,7 @@ public protocol TextFieldSizeConfiguration: CustomDebugStringConvertible { var textBeforeLeadingPadding: CGFloat { get } var textBeforeTrailingPadding: CGFloat { get } var textAfterLeadingPadding: CGFloat { get } - var textAfterTrailingPadding: CGFloat { get } - var textHorizontalPadding: CGFloat { get } + var textAfterTrailingPadding: CGFloat { get } func indicatorPadding(labelPlacement: TextFieldLabelPlacement, requiredPlacement: TextFieldRequiredPlacement, layout: TextFieldLayout) -> CGFloat func indicatorYOffset(labelPlacement: TextFieldLabelPlacement, requiredPlacement: TextFieldRequiredPlacement, layout: TextFieldLayout) -> CGFloat diff --git a/SDDSComponents/Sources/SDDSComponents/Views/SelectionControl/SelectionControl.swift b/SDDSComponents/Sources/SDDSComponents/Views/SelectionControl/SelectionControl.swift index 3ff8edd0b..3729724f0 100644 --- a/SDDSComponents/Sources/SDDSComponents/Views/SelectionControl/SelectionControl.swift +++ b/SDDSComponents/Sources/SDDSComponents/Views/SelectionControl/SelectionControl.swift @@ -19,6 +19,14 @@ public protocol SelectionControlSizeConfiguration: SizeConfiguration, CustomDebu var verticalGap: CGFloat { get } } +public struct ZeroSelectionControlSize: SelectionControlSizeConfiguration { + public var debugDescription: String { "ZeroSelectionControlSize "} + public var imageSize: CGSize { .zero } + public var horizontalGap: CGFloat { 0 } + public var verticalGap: CGFloat { 0 } + public init() {} +} + public struct SelectionControlStateImages { public let selectedImage: Image public let deselectedImage: Image @@ -62,7 +70,6 @@ struct SelectionControl: View { let title: String let subtitle: String? let isEnabled: Bool - let size: SelectionControlSizeConfiguration let appearance: AppearanceType let images: SelectionControlStateImages let accessibility: SelectionControlAccessibility @@ -70,8 +77,8 @@ struct SelectionControl: View { @Environment(\.colorScheme) var colorScheme var body: some View { - VStack(alignment: .leading, spacing: size.verticalGap) { - HStack(spacing: size.horizontalGap) { + VStack(alignment: .leading, spacing: appearance.size.verticalGap) { + HStack(spacing: appearance.size.horizontalGap) { controlView .accessibilityElement(children: .ignore) .accessibilityLabel(Text(accessibility.controlLabel)) @@ -85,8 +92,8 @@ struct SelectionControl: View { titleText } } - HStack(spacing: size.horizontalGap) { - Spacer().frame(width: size.imageSize.width) + HStack(spacing: appearance.size.horizontalGap) { + Spacer().frame(width: appearance.size.imageSize.width) if !title.isEmpty { subtitleText @@ -104,7 +111,7 @@ struct SelectionControl: View { @ViewBuilder private var titleText: some View { Text(title) - .typography(appearance.titleTypography.typography(with: size) ?? .undefined) + .typography(appearance.titleTypography.typography(with: appearance.size) ?? .undefined) .foregroundColor(appearance.titleColor(for: isEnabled).color(for: colorScheme)) .accessibilityLabel(Text(accessibility.titleLabel)) .accessibilityValue(Text(title)) @@ -114,7 +121,7 @@ struct SelectionControl: View { private var subtitleText: some View { if let subtitle = subtitle { Text(subtitle) - .typography(appearance.subtitleTypography.typography(with: size) ?? .undefined) + .typography(appearance.subtitleTypography.typography(with: appearance.size) ?? .undefined) .foregroundColor(appearance.subtitleColor(for: isEnabled).color(for: colorScheme)) .accessibilityLabel(Text(accessibility.subtitleLabel)) .accessibilityValue(Text(subtitle)) @@ -154,7 +161,7 @@ struct SelectionControl: View { private var controlView: some View { if let image = image { tintImage(image: image) - .frame(width: size.imageSize.width, height: size.imageSize.height) + .frame(width: appearance.size.imageSize.width, height: appearance.size.imageSize.height) .applyIf(!isEnabled) { $0.opacity(appearance.disabledAlpha) } } else { EmptyView() diff --git a/SDDSComponents/Sources/SDDSComponents/Views/SelectionControl/SelectionControlAppearance.swift b/SDDSComponents/Sources/SDDSComponents/Views/SelectionControl/SelectionControlAppearance.swift index de6233674..814f494ba 100644 --- a/SDDSComponents/Sources/SDDSComponents/Views/SelectionControl/SelectionControlAppearance.swift +++ b/SDDSComponents/Sources/SDDSComponents/Views/SelectionControl/SelectionControlAppearance.swift @@ -3,6 +3,7 @@ import SwiftUI @_exported import SDDSThemeCore public protocol SelectionControlAppearance { + var size: SelectionControlSizeConfiguration { get } var titleTypography: TypographyConfiguration { get } var subtitleTypography: TypographyConfiguration { get } var titleColor: ColorToken { get } diff --git a/SDDSDemoApp/SDDSDemoApp.xcodeproj/project.pbxproj b/SDDSDemoApp/SDDSDemoApp.xcodeproj/project.pbxproj index 094fd61fd..56ea845cd 100644 --- a/SDDSDemoApp/SDDSDemoApp.xcodeproj/project.pbxproj +++ b/SDDSDemoApp/SDDSDemoApp.xcodeproj/project.pbxproj @@ -774,7 +774,7 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 5; DEVELOPMENT_ASSET_PATHS = "\"SDDSDemoApp/Preview Content\""; DEVELOPMENT_TEAM = KDMYYG676V; ENABLE_PREVIEWS = YES; @@ -812,10 +812,12 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 5; DEVELOPMENT_ASSET_PATHS = "\"SDDSDemoApp/Preview Content\""; - DEVELOPMENT_TEAM = KDMYYG676V; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=iphoneos*]" = KDMYYG676V; ENABLE_PREVIEWS = YES; ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_OPTIMIZATION_LEVEL = s; @@ -835,6 +837,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.sd.SDDSDemo; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "SDDS Demo Distribution"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; diff --git a/SDDSDemoApp/SDDSDemoApp/Views/AvatarGroupView/AvatarGroupViewModel.swift b/SDDSDemoApp/SDDSDemoApp/Views/AvatarGroupView/AvatarGroupViewModel.swift index d39c01bd6..18e669b0c 100644 --- a/SDDSDemoApp/SDDSDemoApp/Views/AvatarGroupView/AvatarGroupViewModel.swift +++ b/SDDSDemoApp/SDDSDemoApp/Views/AvatarGroupView/AvatarGroupViewModel.swift @@ -25,8 +25,7 @@ final class AvatarGroupViewModel: ObservableObject { image: nil, placeholderImage: nil, status: .online, - appearance: .default, - size: DefaultAvatarSize.extraExtraLarge, + appearance: SDDSAvatar.default.extraExtraLarge.appearance, accessibility: defaultAccessibility ), SDDSAvatarData( @@ -34,8 +33,7 @@ final class AvatarGroupViewModel: ObservableObject { image: .image(Image.image("checker")), placeholderImage: nil, status: .offline, - appearance: .default, - size: DefaultAvatarSize.extraExtraLarge, + appearance: SDDSAvatar.default.extraExtraLarge.appearance, accessibility: defaultAccessibility ), SDDSAvatarData( @@ -43,8 +41,7 @@ final class AvatarGroupViewModel: ObservableObject { image: nil, placeholderImage: nil, status: .online, - appearance: .default, - size: DefaultAvatarSize.extraExtraLarge, + appearance: SDDSAvatar.default.extraExtraLarge.appearance, accessibility: defaultAccessibility ), ] @@ -56,8 +53,7 @@ final class AvatarGroupViewModel: ObservableObject { image: nil, placeholderImage: nil, status: .hidden, - appearance: .default, - size: DefaultAvatarSize.extraExtraLarge, + appearance: SDDSAvatar.default.extraExtraLarge.appearance, accessibility: defaultAccessibility ) } diff --git a/SDDSDemoApp/SDDSDemoApp/Views/AvatarView/AvatarView.swift b/SDDSDemoApp/SDDSDemoApp/Views/AvatarView/AvatarView.swift index e27110f25..0441eca65 100644 --- a/SDDSDemoApp/SDDSDemoApp/Views/AvatarView/AvatarView.swift +++ b/SDDSDemoApp/SDDSDemoApp/Views/AvatarView/AvatarView.swift @@ -3,6 +3,7 @@ import SDDSComponentsPreview import Combine import SDDSComponents import PhotosUI +import SDDSServTheme struct AvatarView: View { @ObservedObject private var viewModel: AvatarViewModel @@ -24,7 +25,6 @@ struct AvatarView: View { placeholderImage: viewModel.placeholderImage, status: viewModel.status, appearance: viewModel.appearance, - size: viewModel.size, accessibility: viewModel.accessibility ) Spacer() @@ -79,23 +79,20 @@ struct AvatarView: View { .buttonStyle(.borderless) .foregroundColor(.red) } - - HStack { - Text("Avatar Size") - Spacer() - Picker("Size", selection: $viewModel.size) { - ForEach(DefaultAvatarSize.allCases, id: \.self) { size in - Text(size.description).tag(size) + + Picker("Size", selection: $viewModel.size) { + ForEach(SDDSAvatarSize.allCases, id: \.self) { size in + Button(size.description) { + viewModel.size = size } } } - - HStack { - Text("Appearance") - Spacer() - Picker("Appearance", selection: $viewModel.appearance) { - ForEach(AvatarAppearance.allCases, id: \.self) { appearance in - Text(appearance.name).tag(appearance) + + Picker("Appearance", selection: $viewModel.appearance) { + ForEach(SDDSAvatar.all, id: \.self) { variation in + Button(variation.name) { + viewModel.appearance = variation.appearance.size(viewModel.size) + viewModel.variationName = variation.name } } } diff --git a/SDDSDemoApp/SDDSDemoApp/Views/AvatarView/AvatarViewModel.swift b/SDDSDemoApp/SDDSDemoApp/Views/AvatarView/AvatarViewModel.swift index e31a265ff..a5e40340d 100644 --- a/SDDSDemoApp/SDDSDemoApp/Views/AvatarView/AvatarViewModel.swift +++ b/SDDSDemoApp/SDDSDemoApp/Views/AvatarView/AvatarViewModel.swift @@ -2,27 +2,34 @@ import SwiftUI import Combine import SDDSComponents import SDDSComponentsPreview +import SDDSServTheme final class AvatarViewModel: ObservableObject { @Published var text: String = "AB" @Published var image: AvatarImageSource? = nil @Published var placeholderImage: AvatarImageSource? = nil @Published var status: AvatarStatus = .online - @Published var appearance: AvatarAppearance = .default - @Published var size: DefaultAvatarSize = .large + @Published var appearance: AvatarAppearance = SDDSAvatar.default.appearance + @Published var variationName: String = SDDSAvatar.default.name + @Published var size: SDDSAvatarSize = .medium @Published var accessibility: AvatarAccessibility = AvatarAccessibility() @Published var isPlaceholder = false + + private var cancellables: Set = [] - init() {} -} - -extension AvatarAppearance: CaseIterable { - public static var allCases: [AvatarAppearance] { - [.default] + init() { + observeSizeChange() } - - public var name: String { - return "Default" + + private func observeSizeChange() { + $size + .sink { [weak self] value in + guard let self = self else { + return + } + self.appearance = self.appearance.size(value) + } + .store(in: &cancellables) } } @@ -34,12 +41,12 @@ extension AvatarStatus: CaseIterable, Identifiable { } } -extension DefaultAvatarSize: CaseIterable, Hashable { - public static func == (lhs: DefaultAvatarSize, rhs: DefaultAvatarSize) -> Bool { +extension SDDSAvatarSize: CaseIterable, Hashable { + public static func == (lhs: SDDSAvatarSize, rhs: SDDSAvatarSize) -> Bool { lhs.hashValue == rhs.hashValue } - public static var allCases: [DefaultAvatarSize] { + public static var allCases: [SDDSAvatarSize] { [.extraExtraLarge, .large, .medium, .small] } diff --git a/SDDSDemoApp/SDDSDemoApp/Views/ButtonView/ButtonView.swift b/SDDSDemoApp/SDDSDemoApp/Views/ButtonView/ButtonView.swift index cef159453..7bc50e4e9 100644 --- a/SDDSDemoApp/SDDSDemoApp/Views/ButtonView/ButtonView.swift +++ b/SDDSDemoApp/SDDSDemoApp/Views/ButtonView/ButtonView.swift @@ -127,6 +127,27 @@ struct ButtonView: View { HStack { Toggle("Icon", isOn: $viewModel.isIconVisible) } + if viewModel.buttonType == .icon { + HStack { + Toggle("Pilled", isOn: $viewModel.isPilled) + } + } + if viewModel.buttonType != .icon { + HStack { + Text("Icon Alignment") + Spacer() + .frame(maxWidth: .infinity) + Menu { + ForEach(ButtonAlignment.allCases, id: \.self) { alignment in + Button(alignment.rawValue) { + viewModel.alignment = alignment + } + } + } label: { + Text(viewModel.alignment.rawValue) + } + } + } HStack { Text("Size") Spacer() diff --git a/SDDSDemoApp/SDDSDemoApp/Views/ButtonView/ButtonViewModel.swift b/SDDSDemoApp/SDDSDemoApp/Views/ButtonView/ButtonViewModel.swift index ad9a88c25..b1ab857de 100644 --- a/SDDSDemoApp/SDDSDemoApp/Views/ButtonView/ButtonViewModel.swift +++ b/SDDSDemoApp/SDDSDemoApp/Views/ButtonView/ButtonViewModel.swift @@ -23,6 +23,7 @@ final class ButtonViewModel: ObservableObject { // MARK: - Screen properties @Published var isIconVisible: Bool = false + @Published var isPilled: Bool = false @Published var alignment: SDDSComponents.ButtonAlignment = .leading @Published var colorStyle: SDDSServeB2CStyle = .accent @@ -48,6 +49,19 @@ final class ButtonViewModel: ObservableObject { } .store(in: &cancellables) + $isPilled + .sink { [weak self] value in + guard let self = self else { + return + } + if value { + self.appearance = self.appearance.shapeStyle(.pilled) + } else { + self.appearance = self.appearance.shapeStyle(.default) + } + } + .store(in: &cancellables) + $alignment .sink { [weak self] value in guard let self = self, isIconVisible else { diff --git a/SDDSDemoApp/SDDSDemoApp/Views/CheckboxGroupView/CheckboxGroupViewModel.swift b/SDDSDemoApp/SDDSDemoApp/Views/CheckboxGroupView/CheckboxGroupViewModel.swift index b20314de3..a9caf1102 100644 --- a/SDDSDemoApp/SDDSDemoApp/Views/CheckboxGroupView/CheckboxGroupViewModel.swift +++ b/SDDSDemoApp/SDDSDemoApp/Views/CheckboxGroupView/CheckboxGroupViewModel.swift @@ -2,6 +2,7 @@ import SwiftUI import Combine import SDDSComponents import SDDSComponentsPreview +import SDDSServTheme final class CheckboxGroupViewModel: ObservableObject { @Published var checkboxViewModels: [CheckboxItemViewModel] = [] @@ -63,8 +64,7 @@ struct CheckboxItemViewModel: Identifiable { subtitle: subtitle, isEnabled: isEnabled, images: CheckboxView.checkbox, - size: size, - appearance: .default, + appearance: SDDSCheckbox.default.appearance.size(size), accessibility: .init() ) } diff --git a/SDDSDemoApp/SDDSDemoApp/Views/CheckboxView/CheckboxView.swift b/SDDSDemoApp/SDDSDemoApp/Views/CheckboxView/CheckboxView.swift index d8baea21f..c4fc94adb 100644 --- a/SDDSDemoApp/SDDSDemoApp/Views/CheckboxView/CheckboxView.swift +++ b/SDDSDemoApp/SDDSDemoApp/Views/CheckboxView/CheckboxView.swift @@ -1,4 +1,5 @@ import Foundation +import SDDSServTheme import SwiftUI import Combine import SDDSComponents @@ -21,7 +22,6 @@ struct CheckboxView: View { subtitle: viewModel.subtitle, isEnabled: viewModel.isEnabled, images: CheckboxView.checkbox, - size: viewModel.size, appearance: viewModel.appearance ) Spacer() @@ -61,54 +61,22 @@ struct CheckboxView: View { Toggle("Enabled", isOn: $viewModel.isEnabled) } - HStack { - Text("Tint Color") - Spacer() - Menu { - ForEach(ColorStyle.allCases, id: \.self) { style in - Button(style.rawValue) { - viewModel.tintColor = style - } - } - } label: { - HStack { - Rectangle() - .frame(width: 24, height: 24) - .foregroundColor(viewModel.tintColor.color) - - Text(viewModel.tintColor.rawValue) + Picker("Size", selection: $viewModel.size) { + ForEach(SDDSCheckboxSize.allCases, id: \.self) { size in + Button(size.description) { + viewModel.size = size } } } - HStack { - Text("Image Size") - Spacer() - VStack { - TextField("Width", value: $viewModel.imageWidth, formatter: NumberFormatter()) - .keyboardType(.decimalPad) - .frame(maxWidth: 100) - TextField("Height", value: $viewModel.imageHeight, formatter: NumberFormatter()) - .keyboardType(.decimalPad) - .frame(maxWidth: 100) + Picker("Appearance", selection: $viewModel.appearance) { + ForEach(SDDSCheckbox.all, id: \.self) { variation in + Button(variation.name) { + viewModel.appearance = variation.appearance.size(viewModel.size) + viewModel.variationName = variation.name + } } } - - HStack { - Text("Horizontal Gap") - Spacer() - TextField("Gap", value: $viewModel.horizontalGap, formatter: NumberFormatter()) - .keyboardType(.decimalPad) - .frame(maxWidth: 100) - } - - HStack { - Text("Vertical Gap") - Spacer() - TextField("Gap", value: $viewModel.verticalGap, formatter: NumberFormatter()) - .keyboardType(.decimalPad) - .frame(maxWidth: 100) - } } } .navigationTitle("SDDSCheckbox") diff --git a/SDDSDemoApp/SDDSDemoApp/Views/CheckboxView/CheckboxViewModel.swift b/SDDSDemoApp/SDDSDemoApp/Views/CheckboxView/CheckboxViewModel.swift index 69943b676..4f43b67d4 100644 --- a/SDDSDemoApp/SDDSDemoApp/Views/CheckboxView/CheckboxViewModel.swift +++ b/SDDSDemoApp/SDDSDemoApp/Views/CheckboxView/CheckboxViewModel.swift @@ -3,6 +3,7 @@ import Combine import SwiftUI import SDDSComponents import SDDSComponentsPreview +import SDDSServTheme final class CheckboxViewModel: ObservableObject { // MARK: - Checkbox Properties @@ -10,88 +11,48 @@ final class CheckboxViewModel: ObservableObject { @Published var subtitle: String = "" @Published var state: SelectionControlState = .deselected @Published var isEnabled: Bool = true - @Published var size: SelectionControlSizeConfiguration = SDDSCheckboxSize.medium - @Published var appearance: CheckboxAppearance = CheckboxAppearance.default + @Published var size: SDDSCheckboxSize = SDDSCheckboxSize.medium + @Published var appearance: CheckboxAppearance = SDDSCheckbox.default.appearance + @Published var variationName: String = SDDSCheckbox.default.name // MARK: - Screen properties - @Published var tintColor: ColorStyle = .none - @Published var imageWidth: CGFloat = 20 - @Published var imageHeight: CGFloat = 20 - @Published var horizontalGap: CGFloat = 8 - @Published var verticalGap: CGFloat = 0 - private var cancellables: Set = [] init() { - observeColors() - observeSize() - } - - private func observeColors() { - $tintColor - .sink { [weak self] style in - self?.appearance = self?.appearance.withTintColor(style == .none ? nil : style.color.token) ?? .default - } - .store(in: &cancellables) + observeSizeChange() } - private func observeSize() { - Publishers.CombineLatest3($imageWidth, $imageHeight, $horizontalGap) - .combineLatest($verticalGap) - .sink { [weak self] (sizeValues, verticalGap) in - let (width, height, horizontalGap) = sizeValues - self?.size = CustomCheckboxSize( - imageSize: CGSize(width: width, height: height), - horizontalGap: horizontalGap, - verticalGap: verticalGap - ) + private func observeSizeChange() { + $size + .sink { [weak self] value in + guard let self = self else { + return + } + self.appearance = self.appearance.size(value) } .store(in: &cancellables) } } -// Custom Size Configuration -struct CustomCheckboxSize: SelectionControlSizeConfiguration { - var imageSize: CGSize - var horizontalGap: CGFloat - var verticalGap: CGFloat - - var debugDescription: String { - String(reflecting: self) +extension SDDSCheckboxSize: Hashable { + public static func == (lhs: SDDSCheckboxSize, rhs: SDDSCheckboxSize) -> Bool { + lhs.rawValue == rhs.rawValue } -} -// Extension for Appearance to update colors -extension CheckboxAppearance { - func withTintColor(_ color: ColorToken?) -> CheckboxAppearance { - .init( - titleTypography: titleTypography, - subtitleTypography: subtitleTypography, - titleColor: titleColor, - subtitleColor: subtitleColor, - disabledAlpha: disabledAlpha, - imageTintColor: color - ) + public static var allCases: [SDDSCheckboxSize] { + [.medium, .small] } -} -enum ColorStyle: String, CaseIterable { - case none, blue, green, red, gray, black - - var color: Color { + var description: String { switch self { - case .none: - return .clear - case .blue: - return .blue - case .green: - return .green - case .red: - return .red - case .gray: - return .gray - case .black: - return .black + case .medium: + return "Medium" + case .small: + return "Small" } } + + public func hash(into hasher: inout Hasher) { + hasher.combine(description) + } } diff --git a/SDDSDemoApp/SDDSDemoApp/Views/ChipGroupView/ChipGroupView.swift b/SDDSDemoApp/SDDSDemoApp/Views/ChipGroupView/ChipGroupView.swift index cdc016dd9..818428589 100644 --- a/SDDSDemoApp/SDDSDemoApp/Views/ChipGroupView/ChipGroupView.swift +++ b/SDDSDemoApp/SDDSDemoApp/Views/ChipGroupView/ChipGroupView.swift @@ -2,6 +2,7 @@ import SwiftUI import SDDSComponentsPreview import Combine import SDDSComponents +import SDDSServTheme struct ChipGroupView: View { @ObservedObject private var viewModel: ChipGroupViewModel @@ -35,9 +36,20 @@ struct ChipGroupView: View { Text(size.debugDescription).tag(size.debugDescription) } } - Picker("Appearance", selection: $viewModel.appearance) { - ForEach(ChipAppearance.allCases, id: \.self) { appearance in - Text(appearance.name).tag(appearance) + + HStack { + Text("Appearance") + Spacer() + .frame(maxWidth: .infinity) + Menu { + ForEach(SDDSChip.all, id: \.self) { variation in + Button(variation.name) { + viewModel.appearance = variation.appearance.size(viewModel.chipSize) + viewModel.variationName = variation.name + } + } + } label: { + Text(viewModel.variationName.capitalized) } } } diff --git a/SDDSDemoApp/SDDSDemoApp/Views/ChipGroupView/ChipGroupViewModel.swift b/SDDSDemoApp/SDDSDemoApp/Views/ChipGroupView/ChipGroupViewModel.swift index 2cf4aa713..e317d2b8d 100644 --- a/SDDSDemoApp/SDDSDemoApp/Views/ChipGroupView/ChipGroupViewModel.swift +++ b/SDDSDemoApp/SDDSDemoApp/Views/ChipGroupView/ChipGroupViewModel.swift @@ -9,7 +9,12 @@ final class ChipGroupViewModel: ObservableObject { @Published var chipSize: SDDSChipSize = .medium(.pilled) @Published var chipGroupSize: DefaultChipGroupSize = .init(alignment: .left) @Published var chips: [ChipData] = [] - @Published var appearance: ChipAppearance = .default + @Published var appearance: ChipAppearance = SDDSChip.default.appearance { + didSet { + updateChips(appearance: appearance, size: chipSize) + } + } + @Published var variationName: String = SDDSChip.default.name private var cancellables: Set = [] @@ -32,8 +37,21 @@ final class ChipGroupViewModel: ObservableObject { isEnabled: chip.isEnabled, iconImage: chip.iconImage, buttonImage: chip.buttonImage, - appearance: chip.appearance, - size: size, + appearance: chip.appearance.size(size), + accessibility: chip.accessibility, + removeAction: chip.removeAction + ) + } + } + + private func updateChips(appearance: ChipAppearance, size: SDDSChipSize) { + chips = chips.map { chip in + ChipData( + title: chip.title, + isEnabled: chip.isEnabled, + iconImage: chip.iconImage, + buttonImage: chip.buttonImage, + appearance: appearance.size(size), accessibility: chip.accessibility, removeAction: chip.removeAction ) @@ -46,8 +64,7 @@ final class ChipGroupViewModel: ObservableObject { isEnabled: true, iconImage: Image.image("chipIcon"), buttonImage: Image.image("chipClose"), - appearance: .default, - size: chipSize, + appearance: appearance.size(chipSize), accessibility: ChipAccessibility(), removeAction: {} ) @@ -62,8 +79,7 @@ final class ChipGroupViewModel: ObservableObject { isEnabled: updatedChip.isEnabled, iconImage: updatedChip.iconImage, buttonImage: updatedChip.buttonImage, - appearance: updatedChip.appearance, - size: updatedChip.size, + appearance: updatedChip.appearance.size(updatedChip.appearance.size), accessibility: updatedChip.accessibility, removeAction: updatedChip.removeAction ) diff --git a/SDDSDemoApp/SDDSDemoApp/Views/ChipView/ChipView.swift b/SDDSDemoApp/SDDSDemoApp/Views/ChipView/ChipView.swift index 6fd79b842..8c5932094 100644 --- a/SDDSDemoApp/SDDSDemoApp/Views/ChipView/ChipView.swift +++ b/SDDSDemoApp/SDDSDemoApp/Views/ChipView/ChipView.swift @@ -21,7 +21,6 @@ struct ChipView: View { iconImage: viewModel.iconImage, buttonImage: viewModel.buttonImage, appearance: viewModel.appearance, - size: viewModel.size, removeAction: viewModel.removeAction ) } @@ -39,10 +38,19 @@ struct ChipView: View { Toggle("Enabled", isOn: $viewModel.isEnabled) Toggle("Icon Image", isOn: $viewModel.iconImageEnabled) Toggle("Button Image", isOn: $viewModel.buttomImageEnabled) - - Picker("Size", selection: $viewModel.size) { - ForEach(SDDSChipSize.allCases, id: \.self) { size in - Text(size.debugDescription).tag(size) + + HStack { + Text("Size") + Spacer() + .frame(maxWidth: .infinity) + Menu { + ForEach(SDDSChipSize.allCases, id: \.self) { size in + Button(size.debugDescription) { + viewModel.size = size + } + } + } label: { + Text(viewModel.size.debugDescription) } } @@ -50,10 +58,20 @@ struct ChipView: View { Text("Default").tag(ChipBorderStyle.default(viewModel.size.shapeToken.cornerRadius)) Text("Pilled").tag(ChipBorderStyle.pilled) } - - Picker("Appearance", selection: $viewModel.appearance) { - ForEach(ChipAppearance.allCases, id: \.self) { appearance in - Text(appearance.name).tag(appearance) + + HStack { + Text("Appearance") + Spacer() + .frame(maxWidth: .infinity) + Menu { + ForEach(SDDSChip.all, id: \.self) { variation in + Button(variation.name) { + viewModel.appearance = variation.appearance.size(viewModel.size) + viewModel.variationName = variation.name + } + } + } label: { + Text(viewModel.variationName.capitalized) } } } diff --git a/SDDSDemoApp/SDDSDemoApp/Views/ChipView/ChipViewModel.swift b/SDDSDemoApp/SDDSDemoApp/Views/ChipView/ChipViewModel.swift index 93c855122..e64f61415 100644 --- a/SDDSDemoApp/SDDSDemoApp/Views/ChipView/ChipViewModel.swift +++ b/SDDSDemoApp/SDDSDemoApp/Views/ChipView/ChipViewModel.swift @@ -11,13 +11,29 @@ final class ChipViewModel: ObservableObject { @Published var buttomImageEnabled: Bool = true @Published var size: SDDSChipSize = .medium(.default(8)) @Published var borderStyle: ChipBorderStyle = .default(8) - @Published var appearance: ChipAppearance = .default + @Published var appearance: ChipAppearance = SDDSChip.accent.appearance + @Published var variationName: String = SDDSChip.accent.name @Published var iconImage: Image? = nil @Published var buttonImage: Image? = nil + private var cancellables: Set = [] + init() { setIconImage() setButtonImage() + + observeSizeChange() + } + + private func observeSizeChange() { + $size + .sink { [weak self] value in + guard let self = self else { + return + } + self.appearance = self.appearance.size(value) + } + .store(in: &cancellables) } var removeAction: () -> Void { @@ -46,21 +62,9 @@ final class ChipViewModel: ObservableObject { } } -// MARK: - ChipAppearance Extensions - -extension ChipAppearance: CaseIterable { - public static var allCases: [ChipAppearance] { - [.default] - } - - public var name: String { - return "Default" - } -} - // MARK: - SDDSChipSize Extensions -extension SDDSChipSize: CaseIterable { +extension SDDSChipSize: Hashable, CaseIterable { public static var allCases: [SDDSChipSize] { [.large(.default(8)), .medium(.default(8)), .small(.default(8)), .extraSmall(.default(8))] } diff --git a/SDDSDemoApp/SDDSDemoApp/Views/ProgressBarView/ProgressBarView.swift b/SDDSDemoApp/SDDSDemoApp/Views/ProgressBarView/ProgressBarView.swift index b7ee0dc2e..9e8b3a57d 100644 --- a/SDDSDemoApp/SDDSDemoApp/Views/ProgressBarView/ProgressBarView.swift +++ b/SDDSDemoApp/SDDSDemoApp/Views/ProgressBarView/ProgressBarView.swift @@ -18,8 +18,7 @@ struct ProgressBarView: View { SDDSProgressView( progress: $viewModel.progress, isEnabled: viewModel.isEnabled, - appearance: viewModel.appearance, - size: viewModel.size + appearance: viewModel.variation.appearance ) Spacer() } @@ -44,77 +43,11 @@ struct ProgressBarView: View { Toggle("Enabled", isOn: $viewModel.isEnabled) } - HStack { - Text("Tint Color") - Spacer() - Menu { - ForEach(ColorStyle.allCases, id: \.self) { style in - Button(style.rawValue) { - viewModel.tintColor = style - } - } - } label: { - HStack { - Rectangle() - .frame(width: 24, height: 24) - .foregroundColor(viewModel.tintColor.color) - - Text(viewModel.tintColor.rawValue) - } - } - } - - HStack { - Text("Track Color") - Spacer() - Menu { - ForEach(ColorStyle.allCases, id: \.self) { style in - Button(style.rawValue) { - viewModel.trackColor = style - } - } - } label: { - HStack { - Rectangle() - .frame(width: 24, height: 24) - .foregroundColor(viewModel.trackColor.color) - - Text(viewModel.trackColor.rawValue) - } + Picker("Appearance", selection: $viewModel.variation) { + ForEach(SDDSProgressView.all, id: \.appearance) { variation in + Text(variation.name).tag(variation) } } - - HStack { - Text("Height") - Spacer() - TextField("Height", value: $viewModel.height, formatter: NumberFormatter()) - .keyboardType(.decimalPad) - .frame(maxWidth: 100) - } - - HStack { - Text("Indicator Height") - Spacer() - TextField("Height", value: $viewModel.indicatorHeight, formatter: NumberFormatter()) - .keyboardType(.decimalPad) - .frame(maxWidth: 100) - } - - HStack { - Text("Corner Radius") - Spacer() - TextField("Radius", value: $viewModel.cornerRadius, formatter: NumberFormatter()) - .keyboardType(.decimalPad) - .frame(maxWidth: 100) - } - - HStack { - Text("Indicator Corner Radius") - Spacer() - TextField("Radius", value: $viewModel.indicatorCornerRadius, formatter: NumberFormatter()) - .keyboardType(.decimalPad) - .frame(maxWidth: 100) - } } } .navigationTitle("SDDSProgressView") diff --git a/SDDSDemoApp/SDDSDemoApp/Views/ProgressBarView/ProgressBarViewModel.swift b/SDDSDemoApp/SDDSDemoApp/Views/ProgressBarView/ProgressBarViewModel.swift index a1cdcfd45..ebcc40dee 100644 --- a/SDDSDemoApp/SDDSDemoApp/Views/ProgressBarView/ProgressBarViewModel.swift +++ b/SDDSDemoApp/SDDSDemoApp/Views/ProgressBarView/ProgressBarViewModel.swift @@ -3,6 +3,7 @@ import Combine import SwiftUI import SDDSComponents import SDDSComponentsPreview +import SDDSServTheme final class ProgressBarViewModel: ObservableObject { // MARK: - Progress Bar Properties @@ -28,78 +29,10 @@ final class ProgressBarViewModel: ObservableObject { } } @Published var isEnabled: Bool = true - @Published var appearance: ProgressBarAppearance = .accent - @Published var size: ProgressBarSizeConfiguration = DefaultProgressBarSize() + @Published var variation: AppearanceVariation = SDDSProgressView.accent // MARK: - Screen properties - @Published var tintColor: ColorStyle = .green - @Published var trackColor: ColorStyle = .gray - @Published var height: CGFloat = 4.0 - @Published var indicatorHeight: CGFloat = 6.0 - @Published var cornerRadius: CGFloat = 2.0 - @Published var indicatorCornerRadius: CGFloat = 6.0 - private var cancellables: Set = [] private var isUpdatingProgress = false private var isUpdatingProgressString = false - - init() { - observeColors() - observeSize() - } - - private func observeColors() { - $tintColor - .sink { [weak self] style in - self?.appearance = self?.appearance.withTintColor(style.color.token) ?? .accent - } - .store(in: &cancellables) - - $trackColor - .sink { [weak self] style in - self?.appearance = self?.appearance.withTrackColor(style.color.token) ?? .accent - } - .store(in: &cancellables) - } - - private func observeSize() { - Publishers.CombineLatest4($height, $indicatorHeight, $cornerRadius, $indicatorCornerRadius) - .sink { [weak self] (height, indicatorHeight, cornerRadius, indicatorCornerRadius) in - self?.size = CustomProgressBarSize( - height: height, - indicatorHeight: indicatorHeight, - cornerRadius: cornerRadius, - indicatorCornerRadius: indicatorCornerRadius - ) - } - .store(in: &cancellables) - } -} - -// Custom Size Configuration -struct CustomProgressBarSize: ProgressBarSizeConfiguration { - var height: CGFloat - var indicatorHeight: CGFloat - var cornerRadius: CGFloat - var indicatorCornerRadius: CGFloat - - var debugDescription: String { - String(reflecting: self) - } -} - -extension ProgressBarAppearance { - func withTintColor(_ color: ColorToken) -> ProgressBarAppearance { - .init( - tintFillStyle: .color(color), - trackColor: trackColor - ) - } - - func withTrackColor(_ color: ColorToken) -> ProgressBarAppearance { - .init( - tintFillStyle: .color(color), - trackColor: color - ) - } } diff --git a/SDDSDemoApp/SDDSDemoApp/Views/RadioboxGroupView/RadioboxGroupViewModel.swift b/SDDSDemoApp/SDDSDemoApp/Views/RadioboxGroupView/RadioboxGroupViewModel.swift index c022c5f54..771c76a5f 100644 --- a/SDDSDemoApp/SDDSDemoApp/Views/RadioboxGroupView/RadioboxGroupViewModel.swift +++ b/SDDSDemoApp/SDDSDemoApp/Views/RadioboxGroupView/RadioboxGroupViewModel.swift @@ -2,6 +2,7 @@ import SwiftUI import Combine import SDDSComponents import SDDSComponentsPreview +import SDDSServTheme final class RadioboxGroupViewModel: ObservableObject { @Published var radioboxViewModels: [RadioboxItemViewModel] @@ -36,8 +37,7 @@ struct RadioboxItemViewModel { isSelected: .constant(isSelected), isEnabled: isEnabled, images: RadioboxView.radiobox, - size: size, - appearance: .default, + appearance: SDDSRadiobox.default.appearance.size(size), accessibility: .init() ) } diff --git a/SDDSDemoApp/SDDSDemoApp/Views/RadioboxView/RadioboxView.swift b/SDDSDemoApp/SDDSDemoApp/Views/RadioboxView/RadioboxView.swift index 2383030da..2a6620e8c 100644 --- a/SDDSDemoApp/SDDSDemoApp/Views/RadioboxView/RadioboxView.swift +++ b/SDDSDemoApp/SDDSDemoApp/Views/RadioboxView/RadioboxView.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import Combine import SDDSComponents +import SDDSServTheme struct RadioboxView: View { @ObservedObject private var viewModel: RadioboxViewModel @@ -21,7 +22,6 @@ struct RadioboxView: View { subtitle: viewModel.subtitle, isEnabled: viewModel.isEnabled, images: RadioboxView.radiobox, - size: viewModel.size, appearance: viewModel.appearance ) Spacer() @@ -53,54 +53,23 @@ struct RadioboxView: View { Toggle("Enabled", isOn: $viewModel.isEnabled) } - HStack { - Text("Tint Color") - Spacer() - Menu { - ForEach(ColorStyle.allCases, id: \.self) { style in - Button(style.rawValue) { - viewModel.tintColor = style - } - } - } label: { - HStack { - Rectangle() - .frame(width: 24, height: 24) - .foregroundColor(viewModel.tintColor.color) - - Text(viewModel.tintColor.rawValue) + Picker("Size", selection: $viewModel.size) { + ForEach(SDDSRadioboxSize.allCases, id: \.self) { size in + Button(size.description) { + viewModel.size = size } } } - HStack { - Text("Image Size") - Spacer() - VStack { - TextField("Width", value: $viewModel.imageWidth, formatter: NumberFormatter()) - .keyboardType(.decimalPad) - .frame(maxWidth: 100) - TextField("Height", value: $viewModel.imageHeight, formatter: NumberFormatter()) - .keyboardType(.decimalPad) - .frame(maxWidth: 100) + Picker("Appearance", selection: $viewModel.appearance) { + ForEach(SDDSRadiobox.all, id: \.self) { variation in + Button(variation.name) { + viewModel.appearance = variation.appearance.size(viewModel.size) + viewModel.variationName = variation.name + } } } - HStack { - Text("Horizontal Gap") - Spacer() - TextField("Gap", value: $viewModel.horizontalGap, formatter: NumberFormatter()) - .keyboardType(.decimalPad) - .frame(maxWidth: 100) - } - - HStack { - Text("Vertical Gap") - Spacer() - TextField("Gap", value: $viewModel.verticalGap, formatter: NumberFormatter()) - .keyboardType(.decimalPad) - .frame(maxWidth: 100) - } } } .navigationTitle("SDDSRadiobox") diff --git a/SDDSDemoApp/SDDSDemoApp/Views/RadioboxView/RadioboxViewModel.swift b/SDDSDemoApp/SDDSDemoApp/Views/RadioboxView/RadioboxViewModel.swift index 54d359f54..ac1ee3522 100644 --- a/SDDSDemoApp/SDDSDemoApp/Views/RadioboxView/RadioboxViewModel.swift +++ b/SDDSDemoApp/SDDSDemoApp/Views/RadioboxView/RadioboxViewModel.swift @@ -3,72 +3,54 @@ import Combine import SwiftUI import SDDSComponents import SDDSComponentsPreview +import SDDSServTheme final class RadioboxViewModel: ObservableObject { @Published var title: String = "" @Published var subtitle: String = "" @Published var isSelected: Bool = false @Published var isEnabled: Bool = true - @Published var size: SelectionControlSizeConfiguration = SDDSRadioboxSize.medium - @Published var appearance: RadioboxAppearance = .default - - @Published var tintColor: ColorStyle = .none - @Published var imageWidth: CGFloat = 20 - @Published var imageHeight: CGFloat = 20 - @Published var horizontalGap: CGFloat = 8 - @Published var verticalGap: CGFloat = 0 + @Published var size: SDDSRadioboxSize = SDDSRadioboxSize.medium + @Published var appearance: RadioboxAppearance = SDDSRadiobox.default.appearance + @Published var variationName: String = SDDSRadiobox.default.name private var cancellables: Set = [] init() { - observeColors() - observeSize() - } - - private func observeColors() { - $tintColor - .sink { [weak self] style in - self?.appearance = self?.appearance.withTintColor(style == .none ? nil : style.color.token) ?? .default - } - .store(in: &cancellables) + observeSizeChange() } - private func observeSize() { - Publishers.CombineLatest3($imageWidth, $imageHeight, $horizontalGap) - .combineLatest($verticalGap) - .sink { [weak self] (sizeValues, verticalGap) in - let (width, height, horizontalGap) = sizeValues - self?.size = CustomRadioboxSize( - imageSize: CGSize(width: width, height: height), - horizontalGap: horizontalGap, - verticalGap: verticalGap - ) + private func observeSizeChange() { + $size + .sink { [weak self] value in + guard let self = self else { + return + } + self.appearance = self.appearance.size(value) } .store(in: &cancellables) } } -// Custom Size Configuration -struct CustomRadioboxSize: SelectionControlSizeConfiguration { - var imageSize: CGSize - var horizontalGap: CGFloat - var verticalGap: CGFloat - - var debugDescription: String { - String(reflecting: self) +extension SDDSRadioboxSize: Hashable { + public static func == (lhs: SDDSRadioboxSize, rhs: SDDSRadioboxSize) -> Bool { + lhs.rawValue == rhs.rawValue + } + + public static var allCases: [SDDSRadioboxSize] { + [.medium, .small] + } + + var description: String { + switch self { + case .medium: + return "Medium" + case .small: + return "Small" + } } -} -// Extension for Appearance to update colors -extension RadioboxAppearance { - func withTintColor(_ color: ColorToken?) -> RadioboxAppearance { - .init( - titleTypography: titleTypography, - subtitleTypography: subtitleTypography, - titleColor: titleColor, - subtitleColor: subtitleColor, - disabledAlpha: disabledAlpha, - imageTintColor: color - ) + public func hash(into hasher: inout Hasher) { + hasher.combine(description) } } diff --git a/SDDSDemoApp/SDDSDemoApp/Views/SwitchView/SwitchView.swift b/SDDSDemoApp/SDDSDemoApp/Views/SwitchView/SwitchView.swift index 726f9d849..658a06626 100644 --- a/SDDSDemoApp/SDDSDemoApp/Views/SwitchView/SwitchView.swift +++ b/SDDSDemoApp/SDDSDemoApp/Views/SwitchView/SwitchView.swift @@ -2,6 +2,7 @@ import Foundation import SwiftUI import Combine import SDDSComponents +import SDDSServTheme struct SwitchView: View { @ObservedObject private var viewModel: SwitchViewModel @@ -20,7 +21,6 @@ struct SwitchView: View { subtitle: viewModel.subtitle, isOn: $viewModel.isOn, isEnabled: viewModel.isEnabled, - size: viewModel.size, appearance: viewModel.appearance, switchAccessibility: viewModel.switchAccessibility ) @@ -51,73 +51,22 @@ struct SwitchView: View { Toggle("On/Off", isOn: $viewModel.isOn) } - HStack { - Text("Tint Color") - Spacer() - Menu { - ForEach(ColorStyle.allCases, id: \.self) { style in - Button(style.rawValue) { - viewModel.tintColor = style - } - } - } label: { - HStack { - Rectangle() - .frame(width: 24, height: 24) - .foregroundColor(viewModel.tintColor.color) - - Text(viewModel.tintColor.rawValue) + Picker("Size", selection: $viewModel.size) { + ForEach(SDDSSwitchSize.allCases, id: \.self) { size in + Button(size.description) { + viewModel.size = size } } } - HStack { - Text("Title Color") - Spacer() - Menu { - ForEach(ColorStyle.allCases, id: \.self) { style in - Button(style.rawValue) { - viewModel.titleColor = style - } - } - } label: { - HStack { - Rectangle() - .frame(width: 24, height: 24) - .foregroundColor(viewModel.titleColor.color) - - Text(viewModel.titleColor.rawValue) + Picker("Appearance", selection: $viewModel.appearance) { + ForEach(SDDSSwitch.all, id: \.self) { variation in + Button(variation.name) { + viewModel.appearance = variation.appearance.size(viewModel.size) + viewModel.variationName = variation.name } } } - - HStack { - Text("Subtitle Color") - Spacer() - Menu { - ForEach(ColorStyle.allCases, id: \.self) { style in - Button(style.rawValue) { - viewModel.subtitleColor = style - } - } - } label: { - HStack { - Rectangle() - .frame(width: 24, height: 24) - .foregroundColor(viewModel.subtitleColor.color) - - Text(viewModel.subtitleColor.rawValue) - } - } - } - - HStack { - Text("Vertical Gap") - Spacer() - TextField("Gap", value: $viewModel.verticalGap, formatter: NumberFormatter()) - .keyboardType(.decimalPad) - .frame(maxWidth: 100) - } } } .navigationTitle("SDDSSwitch") diff --git a/SDDSDemoApp/SDDSDemoApp/Views/SwitchView/SwitchViewModel.swift b/SDDSDemoApp/SDDSDemoApp/Views/SwitchView/SwitchViewModel.swift index 4eee86d9a..caf17707f 100644 --- a/SDDSDemoApp/SDDSDemoApp/Views/SwitchView/SwitchViewModel.swift +++ b/SDDSDemoApp/SDDSDemoApp/Views/SwitchView/SwitchViewModel.swift @@ -3,6 +3,7 @@ import Combine import SwiftUI import SDDSComponents import SDDSComponentsPreview +import SDDSServTheme final class SwitchViewModel: ObservableObject { // MARK: - Switch Properties @@ -10,99 +11,50 @@ final class SwitchViewModel: ObservableObject { @Published var subtitle: String = "Switch Subtitle" @Published var isOn: Bool = true @Published var isEnabled: Bool = true - @Published var size: SwitchSizeConfiguration = SwitchSize() - @Published var appearance: SwitchAppearance = .defaultAppearance + @Published var size: SDDSSwitchSize = .medium + @Published var appearance: SwitchAppearance = SDDSSwitch.default.appearance + @Published var variationName: String = SDDSSwitch.default.name @Published var switchAccessibility: SwitchAccessibility = SwitchAccessibility() - // MARK: - Screen properties - @Published var tintColor: ColorStyle = .green - @Published var titleColor: ColorStyle = .black - @Published var subtitleColor: ColorStyle = .gray - @Published var verticalGap: CGFloat = 0 - private var cancellables: Set = [] init() { - observeColors() - observeSize() + observeSizeChange() } - private func observeColors() { - $tintColor - .sink { [weak self] style in - self?.appearance = self?.appearance.withTintColor(style.color.token) ?? .defaultAppearance - } - .store(in: &cancellables) - - $titleColor - .sink { [weak self] style in - self?.appearance = self?.appearance.withTitleColor(style.color.token) ?? .defaultAppearance - } - .store(in: &cancellables) - - $subtitleColor - .sink { [weak self] style in - self?.appearance = self?.appearance.withSubtitleColor(style.color.token) ?? .defaultAppearance - } - .store(in: &cancellables) - } - - private func observeSize() { - $verticalGap - .sink { [weak self] gap in - self?.size = SwitchSize(verticalGap: gap) + private func observeSizeChange() { + $size + .sink { [weak self] value in + guard let self = self else { + return + } + self.appearance = self.appearance.size(value) } .store(in: &cancellables) } } -// Custom Size Configuration -struct SwitchSize: SwitchSizeConfiguration { - var debugDescription: String { - String(reflecting: self) +extension SDDSSwitchSize: Hashable, CaseIterable { + public static func == (lhs: SDDSSwitchSize, rhs: SDDSSwitchSize) -> Bool { + lhs.hashValue == rhs.hashValue } - var width: CGFloat? - var verticalGap: CGFloat - - init(width: CGFloat? = 170, verticalGap: CGFloat = 0) { - self.width = width - self.verticalGap = verticalGap + public static var allCases: [SDDSSwitchSize] { + [.large, .medium, .small] } -} -// Extension for Appearance to update colors -extension SwitchAppearance { - func withTintColor(_ color: ColorToken) -> SwitchAppearance { - .init( - titleTypography: titleTypography, - subtitleTypography: subtitleTypography, - titleColor: titleColor, - subtitleColor: subtitleColor, - tintColor: color, - disabledAlpha: disabledAlpha - ) + var description: String { + switch self { + case .large: + return "Large" + case .medium: + return "Medium" + case .small: + return "Small" + } } - - func withTitleColor(_ color: ColorToken) -> SwitchAppearance { - .init( - titleTypography: titleTypography, - subtitleTypography: subtitleTypography, - titleColor: color, - subtitleColor: subtitleColor, - tintColor: tintColor, - disabledAlpha: disabledAlpha - ) - } - - func withSubtitleColor(_ color: ColorToken) -> SwitchAppearance { - .init( - titleTypography: titleTypography, - subtitleTypography: subtitleTypography, - titleColor: titleColor, - subtitleColor: color, - tintColor: tintColor, - disabledAlpha: disabledAlpha - ) + + public func hash(into hasher: inout Hasher) { + hasher.combine(description) } } diff --git a/SDDSDemoApp/SDDSDemoApp/Views/TextAreaView/TextAreaViewModel.swift b/SDDSDemoApp/SDDSDemoApp/Views/TextAreaView/TextAreaViewModel.swift index 703c66ec5..e71881c08 100644 --- a/SDDSDemoApp/SDDSDemoApp/Views/TextAreaView/TextAreaViewModel.swift +++ b/SDDSDemoApp/SDDSDemoApp/Views/TextAreaView/TextAreaViewModel.swift @@ -55,8 +55,7 @@ final class TextAreaViewModel: ObservableObject { isEnabled: true, iconImage: nil, buttonImage: Image.image("textFieldChipIcon"), - appearance: .textField, - size: chipSize, + appearance: .textField.size(chipSize), accessibility: ChipAccessibility(), removeAction: { [weak self] in self?.removeChip(with: id) @@ -73,8 +72,7 @@ final class TextAreaViewModel: ObservableObject { isEnabled: updatedChip.isEnabled, iconImage: updatedChip.iconImage, buttonImage: updatedChip.buttonImage, - appearance: updatedChip.appearance, - size: updatedChip.size, + appearance: updatedChip.appearance.size(updatedChip.appearance.size), accessibility: updatedChip.accessibility, removeAction: updatedChip.removeAction ) @@ -93,8 +91,7 @@ final class TextAreaViewModel: ObservableObject { isEnabled: chip.isEnabled, iconImage: chip.iconImage, buttonImage: chip.buttonImage, - appearance: chip.appearance, - size: chipSize, + appearance: chip.appearance.size(chipSize), accessibility: chip.accessibility, removeAction: chip.removeAction ) diff --git a/SDDSDemoApp/SDDSDemoApp/Views/TextFieldView/TextFieldViewModel.swift b/SDDSDemoApp/SDDSDemoApp/Views/TextFieldView/TextFieldViewModel.swift index 65c047298..ef622de64 100644 --- a/SDDSDemoApp/SDDSDemoApp/Views/TextFieldView/TextFieldViewModel.swift +++ b/SDDSDemoApp/SDDSDemoApp/Views/TextFieldView/TextFieldViewModel.swift @@ -54,8 +54,7 @@ final class TextFieldViewModel: ObservableObject { isEnabled: true, iconImage: nil, buttonImage: Image.image("textFieldChipIcon"), - appearance: .textField, - size: chipSize, + appearance: .textField.size(chipSize), accessibility: ChipAccessibility(), removeAction: {} ) @@ -70,8 +69,7 @@ final class TextFieldViewModel: ObservableObject { isEnabled: updatedChip.isEnabled, iconImage: updatedChip.iconImage, buttonImage: updatedChip.buttonImage, - appearance: updatedChip.appearance, - size: updatedChip.size, + appearance: updatedChip.appearance.size(updatedChip.appearance.size), accessibility: updatedChip.accessibility, removeAction: updatedChip.removeAction ) diff --git a/SDDSIcons/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata b/SDDSIcons/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..919434a62 --- /dev/null +++ b/SDDSIcons/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/ColorToken+Generated.swift b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/ColorToken+Generated.swift index 202c950f7..5180c4764 100644 --- a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/ColorToken+Generated.swift +++ b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/ColorToken+Generated.swift @@ -1,3 +1,5 @@ +/* This file is code generated. */ + import SwiftUI import UIKit @_exported import SDDSThemeCore @@ -27,6 +29,12 @@ public extension ColorToken { lightColor: Color(UIColor(hex: "#F9F9F9")) ) } + static var backgroundDefaultPrimaryBrightness: Self { + Self( + darkColor: Color(UIColor(hex: "#171717FF")), + lightColor: Color(UIColor(hex: "#F9F9F9FF")) + ) + } static var backgroundDefaultSecondary: Self { Self( darkColor: Color(UIColor(hex: "#FFFFFFFF")), @@ -45,6 +53,12 @@ public extension ColorToken { lightColor: Color(UIColor(hex: "#080808")) ) } + static var backgroundInversePrimaryBrightness: Self { + Self( + darkColor: Color(UIColor(hex: "#F9F9F9FF")), + lightColor: Color(UIColor(hex: "#171717FF")) + ) + } static var backgroundInverseSecondary: Self { Self( darkColor: Color(UIColor(hex: "#FFFFFFFF")), @@ -77,164 +91,164 @@ public extension ColorToken { } static var outlineDefaultAccent: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#24B23E")), + lightColor: Color(UIColor(hex: "#108E26")) ) } static var outlineDefaultAccentActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#1F9835FF")), + lightColor: Color(UIColor(hex: "#0C6A1BFF")) ) } static var outlineDefaultAccentHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#2ACB47FF")), + lightColor: Color(UIColor(hex: "#14B32EFF")) ) } static var outlineDefaultAccentMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#095C18")), + lightColor: Color(UIColor(hex: "#28D247")) ) } static var outlineDefaultAccentMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#0C7920FF")), + lightColor: Color(UIColor(hex: "#21B03CFF")) ) } static var outlineDefaultAccentMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#0F9527FF")), + lightColor: Color(UIColor(hex: "#47DC62FF")) ) } static var outlineDefaultClear: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#00000000")), + lightColor: Color(UIColor(hex: "#00000000")) ) } static var outlineDefaultClearActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#00000000")), + lightColor: Color(UIColor(hex: "#00000000")) ) } static var outlineDefaultClearHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#00000000")), + lightColor: Color(UIColor(hex: "#00000000")) ) } static var outlineDefaultInfo: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#199AF0")), + lightColor: Color(UIColor(hex: "#0B7ECB")) ) } static var outlineDefaultInfoActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#0E8ADDFF")), + lightColor: Color(UIColor(hex: "#0966A5FF")) ) } static var outlineDefaultInfoHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#66BCF5FF")), + lightColor: Color(UIColor(hex: "#0D96F2FF")) ) } static var outlineDefaultInfoMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#0D5382")), + lightColor: Color(UIColor(hex: "#52BAFF")) ) } static var outlineDefaultInfoMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#10659EFF")), + lightColor: Color(UIColor(hex: "#29A9FFFF")) ) } static var outlineDefaultInfoMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#1277BAFF")), + lightColor: Color(UIColor(hex: "#7ACAFFFF")) ) } static var outlineDefaultNegative: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FF3D51")), + lightColor: Color(UIColor(hex: "#F31B31")) ) } static var outlineDefaultNegativeActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#FF1F35FF")), + lightColor: Color(UIColor(hex: "#DA0B20FF")) ) } static var outlineDefaultNegativeHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#FF5C6CFF")), + lightColor: Color(UIColor(hex: "#F54254FF")) ) } static var outlineDefaultNegativeMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#9C1422")), + lightColor: Color(UIColor(hex: "#FF8F9A")) ) } static var outlineDefaultNegativeMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#83111CFF")), + lightColor: Color(UIColor(hex: "#FF6675FF")) ) } static var outlineDefaultNegativeMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#B91828FF")), + lightColor: Color(UIColor(hex: "#FFB8BFFF")) ) } static var outlineDefaultPositive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#24B23E")), + lightColor: Color(UIColor(hex: "#108E26")) ) } static var outlineDefaultPositiveActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#1F9835FF")), + lightColor: Color(UIColor(hex: "#0C6A1BFF")) ) } static var outlineDefaultPositiveHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#2ACB47FF")), + lightColor: Color(UIColor(hex: "#14B32EFF")) ) } static var outlineDefaultPositiveMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#095C18")), + lightColor: Color(UIColor(hex: "#28D247")) ) } static var outlineDefaultPositiveMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#0C7920FF")), + lightColor: Color(UIColor(hex: "#21B03CFF")) ) } static var outlineDefaultPositiveMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#0F9527FF")), + lightColor: Color(UIColor(hex: "#47DC62FF")) ) } static var outlineDefaultPromo: Self { @@ -275,416 +289,416 @@ public extension ColorToken { } static var outlineDefaultSolidPrimary: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#262626")), + lightColor: Color(UIColor(hex: "#DDDDDD")) ) } static var outlineDefaultSolidPrimaryActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#ADADADFF")), + lightColor: Color(UIColor(hex: "#B3B3B3FF")) ) } static var outlineDefaultSolidPrimaryHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), + darkColor: Color(UIColor(hex: "#FFFFFFFF")), lightColor: Color(UIColor(hex: "#000000FF")) ) } static var outlineDefaultSolidSecondary: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#4E4E4E")), + lightColor: Color(UIColor(hex: "#B3B3B3")) ) } static var outlineDefaultSolidSecondaryActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#4A4A4AFF")), + lightColor: Color(UIColor(hex: "#A8A8A8FF")) ) } static var outlineDefaultSolidSecondaryHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#595959FF")), + lightColor: Color(UIColor(hex: "#C2C2C2FF")) ) } static var outlineDefaultSolidTertiary: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#858585")), + lightColor: Color(UIColor(hex: "#707070")) ) } static var outlineDefaultSolidTertiaryActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#808080FF")), + lightColor: Color(UIColor(hex: "#595959FF")) ) } static var outlineDefaultSolidTertiaryHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), + darkColor: Color(UIColor(hex: "#8F8F8FFF")), lightColor: Color(UIColor(hex: "#000000FF")) ) } static var outlineDefaultTransparentAccent: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#24B23E47")), + lightColor: Color(UIColor(hex: "#108E2633")) ) } static var outlineDefaultTransparentAccentActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#24B23E56")), + lightColor: Color(UIColor(hex: "#108E253D")) ) } static var outlineDefaultTransparentAccentHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#24B23EFF")), + lightColor: Color(UIColor(hex: "#108E25FF")) ) } static var outlineDefaultTransparentDefault: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), + darkColor: Color(UIColor(hex: "#F9F9F9")), lightColor: Color(UIColor(hex: "#FFFFFFFF")) ) } static var outlineDefaultTransparentDefaultActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), + darkColor: Color(UIColor(hex: "#E0E0E0FF")), lightColor: Color(UIColor(hex: "#CCCCCCFF")) ) } static var outlineDefaultTransparentDefaultHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), + darkColor: Color(UIColor(hex: "#C7C7C7FF")), lightColor: Color(UIColor(hex: "#000000FF")) ) } static var outlineDefaultTransparentInfo: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#199AF047")), + lightColor: Color(UIColor(hex: "#0B7ECB33")) ) } static var outlineDefaultTransparentInfoActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#199AF056")), + lightColor: Color(UIColor(hex: "#0B7ECB3D")) ) } static var outlineDefaultTransparentInfoHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#199AF0FF")), + lightColor: Color(UIColor(hex: "#0B7ECBFF")) ) } static var outlineDefaultTransparentNegative: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FF3D5147")), + lightColor: Color(UIColor(hex: "#F31B3133")) ) } static var outlineDefaultTransparentNegativeActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#FF3D5156")), + lightColor: Color(UIColor(hex: "#F31B313D")) ) } static var outlineDefaultTransparentNegativeHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#FF3D51FF")), + lightColor: Color(UIColor(hex: "#F31B31FF")) ) } static var outlineDefaultTransparentPositive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#24B23E47")), + lightColor: Color(UIColor(hex: "#108E2633")) ) } static var outlineDefaultTransparentPositiveActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#24B23E56")), + lightColor: Color(UIColor(hex: "#108E253D")) ) } static var outlineDefaultTransparentPositiveHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#24B23EFF")), + lightColor: Color(UIColor(hex: "#108E25FF")) ) } static var outlineDefaultTransparentPrimary: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FFFFFF1F")), + lightColor: Color(UIColor(hex: "#0808081F")) ) } static var outlineDefaultTransparentPrimaryActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#FFFFFF0F")), + lightColor: Color(UIColor(hex: "#08080829")) ) } static var outlineDefaultTransparentPrimaryHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#FFFFFF3D")), + lightColor: Color(UIColor(hex: "#0808080A")) ) } static var outlineDefaultTransparentSecondary: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FFFFFF47")), + lightColor: Color(UIColor(hex: "#08080847")) ) } static var outlineDefaultTransparentSecondaryActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#FFFFFF38")), + lightColor: Color(UIColor(hex: "#08080852")) ) } static var outlineDefaultTransparentSecondaryHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#FFFFFF66")), + lightColor: Color(UIColor(hex: "#08080833")) ) } static var outlineDefaultTransparentTertiary: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FFFFFF8F")), + lightColor: Color(UIColor(hex: "#0808088F")) ) } static var outlineDefaultTransparentTertiaryActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#FFFFFF80")), + lightColor: Color(UIColor(hex: "#08080899")) ) } static var outlineDefaultTransparentTertiaryHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#FFFFFFAD")), + lightColor: Color(UIColor(hex: "#0808087A")) ) } static var outlineDefaultTransparentWarning: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FF702447")), + lightColor: Color(UIColor(hex: "#E8570233")) ) } static var outlineDefaultTransparentWarningActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#FF702456")), + lightColor: Color(UIColor(hex: "#E857023D")) ) } static var outlineDefaultTransparentWarningHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#FF7024FF")), + lightColor: Color(UIColor(hex: "#E85702FF")) ) } static var outlineDefaultWarning: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FF7024")), + lightColor: Color(UIColor(hex: "#E85702")) ) } static var outlineDefaultWarningActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#FF5D05FF")), + lightColor: Color(UIColor(hex: "#C04802FF")) ) } static var outlineDefaultWarningHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#FF8442FF")), + lightColor: Color(UIColor(hex: "#FD6B17FF")) ) } static var outlineDefaultWarningMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#85380C")), + lightColor: Color(UIColor(hex: "#FD9C68")) ) } static var outlineDefaultWarningMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#9F440FFF")), + lightColor: Color(UIColor(hex: "#FC8240FF")) ) } static var outlineDefaultWarningMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#BB4F11FF")), + lightColor: Color(UIColor(hex: "#FDB790FF")) ) } static var outlineInverseAccent: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#108E26")), + lightColor: Color(UIColor(hex: "#24B23E")) ) } static var outlineInverseAccentActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#0D731EFF")), + lightColor: Color(UIColor(hex: "#1D9032FF")) ) } static var outlineInverseAccentHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#13AA2CFF")), + lightColor: Color(UIColor(hex: "#2BD44AFF")) ) } static var outlineInverseAccentMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#28D247")), + lightColor: Color(UIColor(hex: "#095C18")) ) } static var outlineInverseAccentMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#23B83EFF")), + lightColor: Color(UIColor(hex: "#0D8222FF")) ) } static var outlineInverseAccentMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#3EDA5BFF")), + lightColor: Color(UIColor(hex: "#11A72CFF")) ) } static var outlineInverseClear: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#00000000")), + lightColor: Color(UIColor(hex: "#00000000")) ) } static var outlineInverseClearActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#00000000")), + lightColor: Color(UIColor(hex: "#00000000")) ) } static var outlineInverseClearHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#00000000")), + lightColor: Color(UIColor(hex: "#00000000")) ) } static var outlineInverseInfo: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#0B7ECB")), + lightColor: Color(UIColor(hex: "#199AF0")) ) } static var outlineInverseInfoActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#096CAEFF")), + lightColor: Color(UIColor(hex: "#0D84D3FF")) ) } static var outlineInverseInfoHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#34A7F4FF")), + lightColor: Color(UIColor(hex: "#3FABF3FF")) ) } static var outlineInverseInfoMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#52BAFF")), + lightColor: Color(UIColor(hex: "#0D5382")) ) } static var outlineInverseInfoMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#33ADFFFF")), + lightColor: Color(UIColor(hex: "#116BA7FF")) ) } static var outlineInverseInfoMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#A3DAFFFF")), + lightColor: Color(UIColor(hex: "#1483CCFF")) ) } static var outlineInverseNegative: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#F31B31")), + lightColor: Color(UIColor(hex: "#FF3D51")) ) } static var outlineInverseNegativeActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#E40C22FF")), + lightColor: Color(UIColor(hex: "#FF142CFF")) ) } static var outlineInverseNegativeHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#F5384BFF")), + lightColor: Color(UIColor(hex: "#FF6675FF")) ) } static var outlineInverseNegativeMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FF8F9A")), + lightColor: Color(UIColor(hex: "#9C1422")) ) } static var outlineInverseNegativeMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#FF707EFF")), + lightColor: Color(UIColor(hex: "#7A101AFF")) ) } static var outlineInverseNegativeMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#FFADB6FF")), + lightColor: Color(UIColor(hex: "#C2192AFF")) ) } static var outlineInversePositive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#108E26")), + lightColor: Color(UIColor(hex: "#24B23E")) ) } static var outlineInversePositiveActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#0D731EFF")), + lightColor: Color(UIColor(hex: "#1D9032FF")) ) } static var outlineInversePositiveHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) - ) + darkColor: Color(UIColor(hex: "#13AA2CFF")), + lightColor: Color(UIColor(hex: "#2BD44AFF")) + ) } static var outlineInversePositiveMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#28D247")), + lightColor: Color(UIColor(hex: "#095C18")) ) } static var outlineInversePositiveMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#23B83EFF")), + lightColor: Color(UIColor(hex: "#0D8222FF")) ) } static var outlineInversePositiveMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#3EDA5BFF")), + lightColor: Color(UIColor(hex: "#11A72CFF")) ) } static var outlineInversePromo: Self { @@ -725,74 +739,74 @@ public extension ColorToken { } static var outlineInverseSolidPrimary: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#DDDDDD")), + lightColor: Color(UIColor(hex: "#262626")) ) } static var outlineInverseSolidPrimaryActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#C4C4C4FF")), + lightColor: Color(UIColor(hex: "#4F4F4FFF")) ) } static var outlineInverseSolidPrimaryHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#ABABABFF")), + lightColor: Color(UIColor(hex: "#787878FF")) ) } static var outlineInverseSolidSecondary: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#B3B3B3")), + lightColor: Color(UIColor(hex: "#4E4E4E")) ) } static var outlineInverseSolidSecondaryActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#ADADADFF")), + lightColor: Color(UIColor(hex: "#454545FF")) ) } static var outlineInverseSolidSecondaryHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#BDBDBDFF")), + lightColor: Color(UIColor(hex: "#636363FF")) ) } static var outlineInverseSolidTertiary: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#707070")), + lightColor: Color(UIColor(hex: "#858585")) ) } static var outlineInverseSolidTertiaryActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#737373FF")), + lightColor: Color(UIColor(hex: "#7A7A7AFF")) ) } static var outlineInverseSolidTertiaryHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#FFFFFFFF")), + lightColor: Color(UIColor(hex: "#949494FF")) ) } static var outlineInverseTransparentAccent: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#108E2633")), + lightColor: Color(UIColor(hex: "#24B23E47")) ) } static var outlineInverseTransparentAccentActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#108E253D")), + lightColor: Color(UIColor(hex: "#24B23E56")) ) } static var outlineInverseTransparentAccentHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#108E25FF")), + lightColor: Color(UIColor(hex: "#24B23EFF")) ) } static var outlineInverseTransparentDefault: Self { @@ -815,326 +829,326 @@ public extension ColorToken { } static var outlineInverseTransparentInfo: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#0B7ECB33")), + lightColor: Color(UIColor(hex: "#199AF047")) ) } static var outlineInverseTransparentInfoActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#0B7ECB3D")), + lightColor: Color(UIColor(hex: "#199AF056")) ) } static var outlineInverseTransparentInfoHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#0B7ECBFF")), + lightColor: Color(UIColor(hex: "#199AF0FF")) ) } static var outlineInverseTransparentNegative: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#F31B3133")), + lightColor: Color(UIColor(hex: "#FF3D5147")) ) } static var outlineInverseTransparentNegativeActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#F31B313D")), + lightColor: Color(UIColor(hex: "#FF3D5156")) ) } static var outlineInverseTransparentNegativeHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#F31B31FF")), + lightColor: Color(UIColor(hex: "#FF3D51FF")) ) } static var outlineInverseTransparentPositive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#108E2633")), + lightColor: Color(UIColor(hex: "#24B23E47")) ) } static var outlineInverseTransparentPositiveActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#108E253D")), + lightColor: Color(UIColor(hex: "#24B23E56")) ) } static var outlineInverseTransparentPositiveHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#108E25FF")), + lightColor: Color(UIColor(hex: "#24B23EFF")) ) } static var outlineInverseTransparentPrimary: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#0808081F")), + lightColor: Color(UIColor(hex: "#FFFFFF1F")) ) } static var outlineInverseTransparentPrimaryActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#0808080F")), + lightColor: Color(UIColor(hex: "#FFFFFF29")) ) } static var outlineInverseTransparentPrimaryHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#0808083D")), + lightColor: Color(UIColor(hex: "#FFFFFF0A")) ) } static var outlineInverseTransparentSecondary: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#08080847")), + lightColor: Color(UIColor(hex: "#FFFFFF47")) ) } static var outlineInverseTransparentSecondaryActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#08080838")), + lightColor: Color(UIColor(hex: "#FFFFFF52")) ) } static var outlineInverseTransparentSecondaryHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#08080866")), + lightColor: Color(UIColor(hex: "#FFFFFF33")) ) } static var outlineInverseTransparentTertiary: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#0808088F")), + lightColor: Color(UIColor(hex: "#FFFFFF8F")) ) } static var outlineInverseTransparentTertiaryActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#08080880")), + lightColor: Color(UIColor(hex: "#FFFFFF99")) ) } static var outlineInverseTransparentTertiaryHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#080808AD")), + lightColor: Color(UIColor(hex: "#FFFFFF7A")) ) } static var outlineInverseTransparentWarning: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#E8570233")), + lightColor: Color(UIColor(hex: "#FF702447")) ) } static var outlineInverseTransparentWarningActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#E857023D")), + lightColor: Color(UIColor(hex: "#FF702456")) ) } static var outlineInverseTransparentWarningHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#E85702FF")), + lightColor: Color(UIColor(hex: "#FF7024FF")) ) } static var outlineInverseWarning: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#E85702")), + lightColor: Color(UIColor(hex: "#FF7024")) ) } static var outlineInverseWarningActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#CA4B02FF")), + lightColor: Color(UIColor(hex: "#FA5700FF")) ) } static var outlineInverseWarningHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#FD650DFF")), + lightColor: Color(UIColor(hex: "#FF8B4DFF")) ) } static var outlineInverseWarningMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FD9C68")), + lightColor: Color(UIColor(hex: "#85380C")) ) } static var outlineInverseWarningMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#FC884AFF")), + lightColor: Color(UIColor(hex: "#A84710FF")) ) } static var outlineInverseWarningMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#FDB086FF")), + lightColor: Color(UIColor(hex: "#CD5713FF")) ) } static var outlineOnDarkAccent: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#24B23E")), + lightColor: Color(UIColor(hex: "#24B23E")) ) } static var outlineOnDarkAccentActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#1F9835FF")), + lightColor: Color(UIColor(hex: "#1D9032FF")) ) } static var outlineOnDarkAccentHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#2ACB47FF")), + lightColor: Color(UIColor(hex: "#2BD44AFF")) ) } static var outlineOnDarkAccentMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#095C18")), + lightColor: Color(UIColor(hex: "#095C18")) ) } static var outlineOnDarkAccentMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#0C7920FF")), + lightColor: Color(UIColor(hex: "#0D8222FF")) ) } static var outlineOnDarkAccentMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#0F9527FF")), + lightColor: Color(UIColor(hex: "#11A72CFF")) ) } static var outlineOnDarkClear: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#00000000")), + lightColor: Color(UIColor(hex: "#00000000")) ) } static var outlineOnDarkClearActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#00000000")), + lightColor: Color(UIColor(hex: "#00000000")) ) } static var outlineOnDarkClearHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#00000000")), + lightColor: Color(UIColor(hex: "#00000000")) ) } static var outlineOnDarkInfo: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#199AF0")), + lightColor: Color(UIColor(hex: "#199AF0")) ) } static var outlineOnDarkInfoActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#0E8ADDFF")), + lightColor: Color(UIColor(hex: "#0D84D3FF")) ) } static var outlineOnDarkInfoHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#66BCF5FF")), + lightColor: Color(UIColor(hex: "#3FABF3FF")) ) } static var outlineOnDarkInfoMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#0D5382")), + lightColor: Color(UIColor(hex: "#199AF0")) ) } static var outlineOnDarkInfoMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#10659EFF")), + lightColor: Color(UIColor(hex: "#0D84D3FF")) ) } static var outlineOnDarkInfoMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#1277BAFF")), + lightColor: Color(UIColor(hex: "#3FABF3FF")) ) } static var outlineOnDarkNegative: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FF3D51")), + lightColor: Color(UIColor(hex: "#FF3D51")) ) } static var outlineOnDarkNegativeActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#FF1F35FF")), + lightColor: Color(UIColor(hex: "#FF142CFF")) ) } static var outlineOnDarkNegativeHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#FF5C6CFF")), + lightColor: Color(UIColor(hex: "#FF6675FF")) ) } static var outlineOnDarkNegativeMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#9C1422")), + lightColor: Color(UIColor(hex: "#FF3D51")) ) } static var outlineOnDarkNegativeMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#83111CFF")), + lightColor: Color(UIColor(hex: "#FF142CFF")) ) } static var outlineOnDarkNegativeMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#B91828FF")), + lightColor: Color(UIColor(hex: "#FF6675FF")) ) } static var outlineOnDarkPositive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#24B23E")), + lightColor: Color(UIColor(hex: "#24B23E")) ) } static var outlineOnDarkPositiveActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#1F9835FF")), + lightColor: Color(UIColor(hex: "#1D9032FF")) ) } static var outlineOnDarkPositiveHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#2ACB47FF")), + lightColor: Color(UIColor(hex: "#2BD44AFF")) ) } static var outlineOnDarkPositiveMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#095C18")), + lightColor: Color(UIColor(hex: "#095C18")) ) } static var outlineOnDarkPositiveMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#0C7920FF")), + lightColor: Color(UIColor(hex: "#0D8222FF")) ) } static var outlineOnDarkPositiveMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#0F9527FF")), + lightColor: Color(UIColor(hex: "#11A72CFF")) ) } static var outlineOnDarkPromo: Self { @@ -1175,416 +1189,416 @@ public extension ColorToken { } static var outlineOnDarkSolidPrimary: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#262626")), + lightColor: Color(UIColor(hex: "#262626")) ) } static var outlineOnDarkSolidPrimaryActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#ADADADFF")), + lightColor: Color(UIColor(hex: "#4F4F4FFF")) ) } static var outlineOnDarkSolidPrimaryHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#FFFFFFFF")), + lightColor: Color(UIColor(hex: "#787878FF")) ) } static var outlineOnDarkSolidSecondary: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#4E4E4E")), + lightColor: Color(UIColor(hex: "#4E4E4E")) ) } static var outlineOnDarkSolidSecondaryActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#4A4A4AFF")), + lightColor: Color(UIColor(hex: "#454545FF")) ) } static var outlineOnDarkSolidSecondaryHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#595959FF")), + lightColor: Color(UIColor(hex: "#636363FF")) ) } static var outlineOnDarkSolidTertiary: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#858585")), + lightColor: Color(UIColor(hex: "#858585")) ) } static var outlineOnDarkSolidTertiaryActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#808080FF")), + lightColor: Color(UIColor(hex: "#7A7A7AFF")) ) } static var outlineOnDarkSolidTertiaryHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#8F8F8FFF")), + lightColor: Color(UIColor(hex: "#949494FF")) ) } static var outlineOnDarkTransparentAccent: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#24B23E47")), + lightColor: Color(UIColor(hex: "#24B23E47")) ) } static var outlineOnDarkTransparentAccentActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#24B23E56")), + lightColor: Color(UIColor(hex: "#24B23E56")) ) } static var outlineOnDarkTransparentAccentHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#24B23EFF")), + lightColor: Color(UIColor(hex: "#24B23EFF")) ) } static var outlineOnDarkTransparentDefault: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), + darkColor: Color(UIColor(hex: "#F9F9F9")), lightColor: Color(UIColor(hex: "#FFFFFFFF")) ) } static var outlineOnDarkTransparentDefaultActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), + darkColor: Color(UIColor(hex: "#E0E0E0FF")), lightColor: Color(UIColor(hex: "#CCCCCCFF")) ) } static var outlineOnDarkTransparentDefaultHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), + darkColor: Color(UIColor(hex: "#C7C7C7FF")), lightColor: Color(UIColor(hex: "#000000FF")) ) } static var outlineOnDarkTransparentInfo: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#199AF047")), + lightColor: Color(UIColor(hex: "#199AF047")) ) } static var outlineOnDarkTransparentInfoActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#199AF056")), + lightColor: Color(UIColor(hex: "#199AF056")) ) } static var outlineOnDarkTransparentInfoHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#199AF0FF")), + lightColor: Color(UIColor(hex: "#199AF0FF")) ) } static var outlineOnDarkTransparentNegative: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FF3D5147")), + lightColor: Color(UIColor(hex: "#FF3D5147")) ) } static var outlineOnDarkTransparentNegativeActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#FF3D5156")), + lightColor: Color(UIColor(hex: "#FF3D5156")) ) } static var outlineOnDarkTransparentNegativeHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#FF3D51FF")), + lightColor: Color(UIColor(hex: "#FF3D51FF")) ) } static var outlineOnDarkTransparentPositive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#24B23E47")), + lightColor: Color(UIColor(hex: "#24B23E47")) ) } static var outlineOnDarkTransparentPositiveActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#24B23E56")), + lightColor: Color(UIColor(hex: "#24B23E56")) ) } static var outlineOnDarkTransparentPositiveHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#24B23EFF")), + lightColor: Color(UIColor(hex: "#24B23EFF")) ) } static var outlineOnDarkTransparentPrimary: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FFFFFF1F")), + lightColor: Color(UIColor(hex: "#FFFFFF1F")) ) } static var outlineOnDarkTransparentPrimaryActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#FFFFFF0F")), + lightColor: Color(UIColor(hex: "#FFFFFF29")) ) } static var outlineOnDarkTransparentPrimaryHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#FFFFFF3D")), + lightColor: Color(UIColor(hex: "#FFFFFF0A")) ) } static var outlineOnDarkTransparentSecondary: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FFFFFF47")), + lightColor: Color(UIColor(hex: "#FFFFFF47")) ) } static var outlineOnDarkTransparentSecondaryActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#FFFFFF38")), + lightColor: Color(UIColor(hex: "#FFFFFF52")) ) } static var outlineOnDarkTransparentSecondaryHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#FFFFFF66")), + lightColor: Color(UIColor(hex: "#FFFFFF33")) ) } static var outlineOnDarkTransparentTertiary: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FFFFFF8F")), + lightColor: Color(UIColor(hex: "#FFFFFF8F")) ) } static var outlineOnDarkTransparentTertiaryActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#FFFFFF80")), + lightColor: Color(UIColor(hex: "#FFFFFF99")) ) } static var outlineOnDarkTransparentTertiaryHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#FFFFFFAD")), + lightColor: Color(UIColor(hex: "#FFFFFF7A")) ) } static var outlineOnDarkTransparentWarning: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FF702447")), + lightColor: Color(UIColor(hex: "#FF702447")) ) } static var outlineOnDarkTransparentWarningActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#FF702456")), + lightColor: Color(UIColor(hex: "#FF702456")) ) } static var outlineOnDarkTransparentWarningHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#FF7024FF")), + lightColor: Color(UIColor(hex: "#FF7024FF")) ) } static var outlineOnDarkWarning: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FF7024")), + lightColor: Color(UIColor(hex: "#FF7024")) ) } static var outlineOnDarkWarningActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#FF5D05FF")), + lightColor: Color(UIColor(hex: "#FA5700FF")) ) } static var outlineOnDarkWarningHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#FF8442FF")), + lightColor: Color(UIColor(hex: "#FF8B4DFF")) ) } static var outlineOnDarkWarningMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#85380C")), + lightColor: Color(UIColor(hex: "#FF7024")) ) } static var outlineOnDarkWarningMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#9F440FFF")), + lightColor: Color(UIColor(hex: "#FA5700FF")) ) } static var outlineOnDarkWarningMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#BB4F11FF")), + lightColor: Color(UIColor(hex: "#FF8B4DFF")) ) } static var outlineOnLightAccent: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#108E26")), + lightColor: Color(UIColor(hex: "#108E26")) ) } static var outlineOnLightAccentActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#0D731EFF")), + lightColor: Color(UIColor(hex: "#0C6A1BFF")) ) } static var outlineOnLightAccentHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#13AA2CFF")), + lightColor: Color(UIColor(hex: "#14B32EFF")) ) } static var outlineOnLightAccentMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#28D247")), + lightColor: Color(UIColor(hex: "#28D247")) ) } static var outlineOnLightAccentMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#23B83EFF")), + lightColor: Color(UIColor(hex: "#21B03CFF")) ) } static var outlineOnLightAccentMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#3EDA5BFF")), + lightColor: Color(UIColor(hex: "#47DC62FF")) ) } static var outlineOnLightClear: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#00000000")), + lightColor: Color(UIColor(hex: "#00000000")) ) } static var outlineOnLightClearActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#00000000")), + lightColor: Color(UIColor(hex: "#00000000")) ) } static var outlineOnLightClearHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#00000000")), + lightColor: Color(UIColor(hex: "#00000000")) ) } static var outlineOnLightInfo: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#0B7ECB")), + lightColor: Color(UIColor(hex: "#0B7ECB")) ) } static var outlineOnLightInfoActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#096CAEFF")), + lightColor: Color(UIColor(hex: "#0966A5FF")) ) } static var outlineOnLightInfoHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#34A7F4FF")), + lightColor: Color(UIColor(hex: "#0D96F2FF")) ) } static var outlineOnLightInfoMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#52BAFF")), + lightColor: Color(UIColor(hex: "#52BAFF")) ) } static var outlineOnLightInfoMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#33ADFFFF")), + lightColor: Color(UIColor(hex: "#29A9FFFF")) ) } static var outlineOnLightInfoMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#A3DAFFFF")), + lightColor: Color(UIColor(hex: "#7ACAFFFF")) ) } static var outlineOnLightNegative: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#F31B31")), + lightColor: Color(UIColor(hex: "#F31B31")) ) } static var outlineOnLightNegativeActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#E40C22FF")), + lightColor: Color(UIColor(hex: "#DA0B20FF")) ) } static var outlineOnLightNegativeHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#F5384BFF")), + lightColor: Color(UIColor(hex: "#F54254FF")) ) } static var outlineOnLightNegativeMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FF8F9A")), + lightColor: Color(UIColor(hex: "#FF8F9A")) ) } static var outlineOnLightNegativeMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#FF707EFF")), + lightColor: Color(UIColor(hex: "#FF6675FF")) ) } static var outlineOnLightNegativeMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#FFADB6FF")), + lightColor: Color(UIColor(hex: "#FFB8BFFF")) ) } static var outlineOnLightPositive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#108E26")), + lightColor: Color(UIColor(hex: "#108E26")) ) } static var outlineOnLightPositiveActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#0D731EFF")), + lightColor: Color(UIColor(hex: "#0C6A1BFF")) ) } static var outlineOnLightPositiveHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#13AA2CFF")), + lightColor: Color(UIColor(hex: "#14B32EFF")) ) } static var outlineOnLightPositiveMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#28D247")), + lightColor: Color(UIColor(hex: "#28D247")) ) } static var outlineOnLightPositiveMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#23B83EFF")), + lightColor: Color(UIColor(hex: "#21B03CFF")) ) } static var outlineOnLightPositiveMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#3EDA5BFF")), + lightColor: Color(UIColor(hex: "#47DC62FF")) ) } static var outlineOnLightPromo: Self { @@ -1625,254 +1639,254 @@ public extension ColorToken { } static var outlineOnLightSolidPrimary: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#DDDDDD")), + lightColor: Color(UIColor(hex: "#DDDDDD")) ) } static var outlineOnLightSolidPrimaryActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#C4C4C4FF")), + lightColor: Color(UIColor(hex: "#B3B3B3FF")) ) } static var outlineOnLightSolidPrimaryHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), + darkColor: Color(UIColor(hex: "#ABABABFF")), lightColor: Color(UIColor(hex: "#000000FF")) ) } static var outlineOnLightSolidSecondary: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#B3B3B3")), + lightColor: Color(UIColor(hex: "#B3B3B3")) ) } static var outlineOnLightSolidSecondaryActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#ADADADFF")), + lightColor: Color(UIColor(hex: "#A8A8A8FF")) ) } static var outlineOnLightSolidSecondaryHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#BDBDBDFF")), + lightColor: Color(UIColor(hex: "#C2C2C2FF")) ) } static var outlineOnLightSolidTertiary: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#707070")), + lightColor: Color(UIColor(hex: "#707070")) ) } static var outlineOnLightSolidTertiaryActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#737373FF")), + lightColor: Color(UIColor(hex: "#595959FF")) ) } static var outlineOnLightSolidTertiaryHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), + darkColor: Color(UIColor(hex: "#FFFFFFFF")), lightColor: Color(UIColor(hex: "#000000FF")) ) } static var outlineOnLightTransparentAccent: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#108E2633")), + lightColor: Color(UIColor(hex: "#108E2633")) ) } static var outlineOnLightTransparentAccentActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#108E253D")), + lightColor: Color(UIColor(hex: "#108E253D")) ) } static var outlineOnLightTransparentAccentHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#108E25FF")), + lightColor: Color(UIColor(hex: "#108E25FF")) ) } static var outlineOnLightTransparentDefault: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), + darkColor: Color(UIColor(hex: "#080808")), lightColor: Color(UIColor(hex: "#FFFFFFFF")) ) } static var outlineOnLightTransparentDefaultActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), + darkColor: Color(UIColor(hex: "#C7C7C7FF")), lightColor: Color(UIColor(hex: "#CCCCCCFF")) ) } static var outlineOnLightTransparentDefaultHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), + darkColor: Color(UIColor(hex: "#FFFFFFFF")), lightColor: Color(UIColor(hex: "#000000FF")) ) } static var outlineOnLightTransparentInfo: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#0B7ECB33")), + lightColor: Color(UIColor(hex: "#0B7ECB33")) ) } static var outlineOnLightTransparentInfoActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#0B7ECB3D")), + lightColor: Color(UIColor(hex: "#0B7ECB3D")) ) } static var outlineOnLightTransparentInfoHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#0B7ECBFF")), + lightColor: Color(UIColor(hex: "#0B7ECBFF")) ) } static var outlineOnLightTransparentNegative: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#F31B3133")), + lightColor: Color(UIColor(hex: "#F31B3133")) ) } static var outlineOnLightTransparentNegativeActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#F31B313D")), + lightColor: Color(UIColor(hex: "#F31B313D")) ) } static var outlineOnLightTransparentNegativeHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#F31B31FF")), + lightColor: Color(UIColor(hex: "#F31B31FF")) ) } static var outlineOnLightTransparentPositive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#108E2633")), + lightColor: Color(UIColor(hex: "#108E2633")) ) } static var outlineOnLightTransparentPositiveActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#108E253D")), + lightColor: Color(UIColor(hex: "#108E253D")) ) } static var outlineOnLightTransparentPositiveHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#108E25FF")), + lightColor: Color(UIColor(hex: "#108E25FF")) ) } static var outlineOnLightTransparentPrimary: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#0808081F")), + lightColor: Color(UIColor(hex: "#0808081F")) ) } static var outlineOnLightTransparentPrimaryActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#0808080F")), + lightColor: Color(UIColor(hex: "#08080829")) ) } static var outlineOnLightTransparentPrimaryHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#0808083D")), + lightColor: Color(UIColor(hex: "#0808080A")) ) } static var outlineOnLightTransparentSecondary: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#08080847")), + lightColor: Color(UIColor(hex: "#08080847")) ) } static var outlineOnLightTransparentSecondaryActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#08080838")), + lightColor: Color(UIColor(hex: "#08080852")) ) } static var outlineOnLightTransparentSecondaryHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#08080866")), + lightColor: Color(UIColor(hex: "#08080833")) ) } static var outlineOnLightTransparentTertiary: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#0808088F")), + lightColor: Color(UIColor(hex: "#0808088F")) ) } static var outlineOnLightTransparentTertiaryActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#08080880")), + lightColor: Color(UIColor(hex: "#08080899")) ) } static var outlineOnLightTransparentTertiaryHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#080808AD")), + lightColor: Color(UIColor(hex: "#0808087A")) ) } static var outlineOnLightTransparentWarning: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#E8570233")), + lightColor: Color(UIColor(hex: "#E8570233")) ) } static var outlineOnLightTransparentWarningActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#E857023D")), + lightColor: Color(UIColor(hex: "#E857023D")) ) } static var outlineOnLightTransparentWarningHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#E85702FF")), + lightColor: Color(UIColor(hex: "#E85702FF")) ) } static var outlineOnLightWarning: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#E85702")), + lightColor: Color(UIColor(hex: "#E85702")) ) } static var outlineOnLightWarningActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#CA4B02FF")), + lightColor: Color(UIColor(hex: "#C04802FF")) ) } static var outlineOnLightWarningHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#FD650DFF")), + lightColor: Color(UIColor(hex: "#FD6B17FF")) ) } static var outlineOnLightWarningMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FD9C68")), + lightColor: Color(UIColor(hex: "#FD9C68")) ) } static var outlineOnLightWarningMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#FC884AFF")), + lightColor: Color(UIColor(hex: "#FC8240FF")) ) } static var outlineOnLightWarningMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#FDB086FF")), + lightColor: Color(UIColor(hex: "#FDB790FF")) ) } static var overlayDefaultBlur: Self { @@ -1967,20 +1981,20 @@ public extension ColorToken { } static var surfaceDefaultAccentMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#0A2B10")), + lightColor: Color(UIColor(hex: "#9EFAAF")) ) } static var surfaceDefaultAccentMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#08210CFF")), + lightColor: Color(UIColor(hex: "#8BF99FFF")) ) } static var surfaceDefaultAccentMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#0E3A16FF")), + lightColor: Color(UIColor(hex: "#B1FBBFFF")) ) } static var surfaceDefaultClear: Self { @@ -2003,38 +2017,38 @@ public extension ColorToken { } static var surfaceDefaultInfo: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#118CDF")), + lightColor: Color(UIColor(hex: "#118CDF")) ) } static var surfaceDefaultInfoActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#1086D5FF")), + lightColor: Color(UIColor(hex: "#0F81CCFF")) ) } static var surfaceDefaultInfoHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#1798EEFF")), + lightColor: Color(UIColor(hex: "#1798EEFF")) ) } static var surfaceDefaultInfoMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#0C283B")), + lightColor: Color(UIColor(hex: "#CFECFF")) ) } static var surfaceDefaultInfoMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#0A2333FF")), + lightColor: Color(UIColor(hex: "#C7E9FFFF")) ) } static var surfaceDefaultInfoMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#10344CFF")), + lightColor: Color(UIColor(hex: "#E5F5FFFF")) ) } static var surfaceDefaultNegative: Self { @@ -2057,20 +2071,20 @@ public extension ColorToken { } static var surfaceDefaultNegativeMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#4A0D13")), + lightColor: Color(UIColor(hex: "#FFE0E3")) ) } static var surfaceDefaultNegativeMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#410B11FF")), + lightColor: Color(UIColor(hex: "#FFD6DAFF")) ) } static var surfaceDefaultNegativeMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#5B1018FF")), + lightColor: Color(UIColor(hex: "#FFF5F6FF")) ) } static var surfaceDefaultPositive: Self { @@ -2093,20 +2107,20 @@ public extension ColorToken { } static var surfaceDefaultPositiveMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#0A2B10")), + lightColor: Color(UIColor(hex: "#9EFAAF")) ) } static var surfaceDefaultPositiveMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#08210CFF")), + lightColor: Color(UIColor(hex: "#8BF99FFF")) ) } static var surfaceDefaultPositiveMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#0E3A16FF")), + lightColor: Color(UIColor(hex: "#B1FBBFFF")) ) } static var surfaceDefaultPromo: Self { @@ -2157,6 +2171,12 @@ public extension ColorToken { lightColor: Color(UIColor(hex: "#FFFFFFFF")) ) } + static var surfaceDefaultSolidCardBrightness: Self { + Self( + darkColor: Color(UIColor(hex: "#252525FF")), + lightColor: Color(UIColor(hex: "#FFFFFFFF")) + ) + } static var surfaceDefaultSolidCardHover: Self { Self( darkColor: Color(UIColor(hex: "#1C1C1CFF")), @@ -2193,6 +2213,12 @@ public extension ColorToken { lightColor: Color(UIColor(hex: "#F0F0F0FF")) ) } + static var surfaceDefaultSolidPrimaryBrightness: Self { + Self( + darkColor: Color(UIColor(hex: "#252525FF")), + lightColor: Color(UIColor(hex: "#F6F6F6FF")) + ) + } static var surfaceDefaultSolidPrimaryHover: Self { Self( darkColor: Color(UIColor(hex: "#1C1C1CFF")), @@ -2237,19 +2263,19 @@ public extension ColorToken { } static var surfaceDefaultTransparentAccent: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), + darkColor: Color(UIColor(hex: "#1A9E3233")), lightColor: Color(UIColor(hex: "#FFFFFFFF")) ) } static var surfaceDefaultTransparentAccentActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), + darkColor: Color(UIColor(hex: "#1A9E3224")), lightColor: Color(UIColor(hex: "#FFFFFFFF")) ) } static var surfaceDefaultTransparentAccentHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), + darkColor: Color(UIColor(hex: "#1A9E3252")), lightColor: Color(UIColor(hex: "#FFFFFFFF")) ) } @@ -2265,6 +2291,12 @@ public extension ColorToken { lightColor: Color(UIColor(hex: "#FFFFFFFF")) ) } + static var surfaceDefaultTransparentCardBrightness: Self { + Self( + darkColor: Color(UIColor(hex: "#FFFF1DFF")), + lightColor: Color(UIColor(hex: "#FFFFFFFF")) + ) + } static var surfaceDefaultTransparentCardHover: Self { Self( darkColor: Color(UIColor(hex: "#FFFFFF1F")), @@ -2291,74 +2323,74 @@ public extension ColorToken { } static var surfaceDefaultTransparentInfo: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#118CDF33")), + lightColor: Color(UIColor(hex: "#118CDF1F")) ) } static var surfaceDefaultTransparentInfoActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#118CDF24")), + lightColor: Color(UIColor(hex: "#118CDF29")) ) } static var surfaceDefaultTransparentInfoHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#118CDF52")), + lightColor: Color(UIColor(hex: "#118CDF0A")) ) } static var surfaceDefaultTransparentNegative: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FF293E33")), + lightColor: Color(UIColor(hex: "#FF293E1F")) ) } static var surfaceDefaultTransparentNegativeActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FF293E24")), + lightColor: Color(UIColor(hex: "#FF293E29")) ) } static var surfaceDefaultTransparentNegativeHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FF293E52")), + lightColor: Color(UIColor(hex: "#FF293E0A")) ) } static var surfaceDefaultTransparentPositive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#1A9E3233")), + lightColor: Color(UIColor(hex: "#1A9E321F")) ) } static var surfaceDefaultTransparentPositiveActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#1A9E3224")), + lightColor: Color(UIColor(hex: "#1A9E3229")) ) } static var surfaceDefaultTransparentPositiveHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#1A9E3252")), + lightColor: Color(UIColor(hex: "#1A9E320A")) ) } static var surfaceDefaultTransparentPrimary: Self { Self( darkColor: Color(UIColor(hex: "#FFFFFF0F")), - lightColor: Color(UIColor(hex: "#08080805")) + lightColor: Color(UIColor(hex: "#08080808")) ) } static var surfaceDefaultTransparentPrimaryActive: Self { Self( darkColor: Color(UIColor(hex: "#FFFFFF0A")), - lightColor: Color(UIColor(hex: "#0808080A")) + lightColor: Color(UIColor(hex: "#0808080D")) ) } static var surfaceDefaultTransparentPrimaryHover: Self { Self( darkColor: Color(UIColor(hex: "#FFFFFF1F")), - lightColor: Color(UIColor(hex: "#08080800")) + lightColor: Color(UIColor(hex: "#08080803")) ) } static var surfaceDefaultTransparentPromo: Self { @@ -2417,20 +2449,20 @@ public extension ColorToken { } static var surfaceDefaultTransparentWarning: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FA5F0533")), + lightColor: Color(UIColor(hex: "#FA5F051F")) ) } static var surfaceDefaultTransparentWarningActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FA5F0524")), + lightColor: Color(UIColor(hex: "#FA5F0529")) ) } static var surfaceDefaultTransparentWarningHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FA5F0552")), + lightColor: Color(UIColor(hex: "#FA5F050A")) ) } static var surfaceDefaultWarning: Self { @@ -2453,20 +2485,20 @@ public extension ColorToken { } static var surfaceDefaultWarningMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#3D1D0A")), + lightColor: Color(UIColor(hex: "#FEE2D2")) ) } static var surfaceDefaultWarningMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#351909FF")), + lightColor: Color(UIColor(hex: "#FEDCC8FF")) ) } static var surfaceDefaultWarningMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#4F250DFF")), + lightColor: Color(UIColor(hex: "#FEEFE6FF")) ) } static var surfaceInverseAccent: Self { @@ -2489,20 +2521,20 @@ public extension ColorToken { } static var surfaceInverseAccentMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#9EFAAF")), + lightColor: Color(UIColor(hex: "#0A2B10")) ) } static var surfaceInverseAccentMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#94F9A7FF")), + lightColor: Color(UIColor(hex: "#061909FF")) ) } static var surfaceInverseAccentMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#B1FBBFFF")), + lightColor: Color(UIColor(hex: "#0E3A16FF")) ) } static var surfaceInverseClear: Self { @@ -2525,38 +2557,38 @@ public extension ColorToken { } static var surfaceInverseInfo: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#118CDF")), + lightColor: Color(UIColor(hex: "#118CDF")) ) } static var surfaceInverseInfoActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#1086D5FF")), + lightColor: Color(UIColor(hex: "#0F81CCFF")) ) } static var surfaceInverseInfoHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#1798EEFF")), + lightColor: Color(UIColor(hex: "#1798EEFF")) ) } static var surfaceInverseInfoMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#CFECFF")), + lightColor: Color(UIColor(hex: "#0C283B")) ) } static var surfaceInverseInfoMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#C7E9FFFF")), + lightColor: Color(UIColor(hex: "#091D2AFF")) ) } static var surfaceInverseInfoMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#DBF1FFFF")), + lightColor: Color(UIColor(hex: "#10344CFF")) ) } static var surfaceInverseNegative: Self { @@ -2579,20 +2611,20 @@ public extension ColorToken { } static var surfaceInverseNegativeMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FFE0E3")), + lightColor: Color(UIColor(hex: "#4A0D13")) ) } static var surfaceInverseNegativeMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FFD6DAFF")), + lightColor: Color(UIColor(hex: "#380A0FFF")) ) } static var surfaceInverseNegativeMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FFEBEDFF")), + lightColor: Color(UIColor(hex: "#64121AFF")) ) } static var surfaceInversePositive: Self { @@ -2615,20 +2647,20 @@ public extension ColorToken { } static var surfaceInversePositiveMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#9EFAAF")), + lightColor: Color(UIColor(hex: "#0A2B10")) ) } static var surfaceInversePositiveMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#94F9A7FF")), + lightColor: Color(UIColor(hex: "#061909FF")) ) } static var surfaceInversePositiveMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#B1FBBFFF")), + lightColor: Color(UIColor(hex: "#0E3A16FF")) ) } static var surfaceInversePromo: Self { @@ -2679,6 +2711,12 @@ public extension ColorToken { lightColor: Color(UIColor(hex: "#0D0D0DFF")) ) } + static var surfaceInverseSolidCardBrightness: Self { + Self( + darkColor: Color(UIColor(hex: "#FFFFFFFF")), + lightColor: Color(UIColor(hex: "#252525FF")) + ) + } static var surfaceInverseSolidCardHover: Self { Self( darkColor: Color(UIColor(hex: "#FFFFFFFF")), @@ -2715,6 +2753,12 @@ public extension ColorToken { lightColor: Color(UIColor(hex: "#0D0D0DFF")) ) } + static var surfaceInverseSolidPrimaryBrightness: Self { + Self( + darkColor: Color(UIColor(hex: "#F6F6F6FF")), + lightColor: Color(UIColor(hex: "#252525FF")) + ) + } static var surfaceInverseSolidPrimaryHover: Self { Self( darkColor: Color(UIColor(hex: "#FAFAFAFF")), @@ -2759,20 +2803,20 @@ public extension ColorToken { } static var surfaceInverseTransparentAccent: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#1A9E321F")), + lightColor: Color(UIColor(hex: "#1A9E3233")) ) } static var surfaceInverseTransparentAccentActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#1A9E320F")), + lightColor: Color(UIColor(hex: "#1A9E323D")) ) } static var surfaceInverseTransparentAccentHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#1A9E323D")), + lightColor: Color(UIColor(hex: "#1A9E321F")) ) } static var surfaceInverseTransparentCard: Self { @@ -2787,6 +2831,12 @@ public extension ColorToken { lightColor: Color(UIColor(hex: "#FFFFFF1A")) ) } + static var surfaceInverseTransparentCardBrightness: Self { + Self( + darkColor: Color(UIColor(hex: "#FFFFFFFF")), + lightColor: Color(UIColor(hex: "#FFFF1DFF")) + ) + } static var surfaceInverseTransparentCardHover: Self { Self( darkColor: Color(UIColor(hex: "#FFFFFFFF")), @@ -2813,73 +2863,73 @@ public extension ColorToken { } static var surfaceInverseTransparentInfo: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#118CDF1F")), + lightColor: Color(UIColor(hex: "#118CDF33")) ) } static var surfaceInverseTransparentInfoActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#118CDF0F")), + lightColor: Color(UIColor(hex: "#118CDF3D")) ) } static var surfaceInverseTransparentInfoHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#118CDF3D")), + lightColor: Color(UIColor(hex: "#118CDF1F")) ) } static var surfaceInverseTransparentNegative: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FF293E1F")), + lightColor: Color(UIColor(hex: "#FF293E33")) ) } static var surfaceInverseTransparentNegativeActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FF293E0F")), + lightColor: Color(UIColor(hex: "#FF293E3D")) ) } static var surfaceInverseTransparentNegativeHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FF293E3D")), + lightColor: Color(UIColor(hex: "#FF293E1F")) ) } static var surfaceInverseTransparentPositive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#1A9E321F")), + lightColor: Color(UIColor(hex: "#1A9E3233")) ) } static var surfaceInverseTransparentPositiveActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#1A9E320F")), + lightColor: Color(UIColor(hex: "#1A9E323D")) ) } static var surfaceInverseTransparentPositiveHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#1A9E323D")), + lightColor: Color(UIColor(hex: "#1A9E321F")) ) } static var surfaceInverseTransparentPrimary: Self { Self( - darkColor: Color(UIColor(hex: "#08080805")), + darkColor: Color(UIColor(hex: "#08080808")), lightColor: Color(UIColor(hex: "#FFFFFF0F")) ) } static var surfaceInverseTransparentPrimaryActive: Self { Self( - darkColor: Color(UIColor(hex: "#08080800")), + darkColor: Color(UIColor(hex: "#08080803")), lightColor: Color(UIColor(hex: "#FFFFFF1A")) ) } static var surfaceInverseTransparentPrimaryHover: Self { Self( - darkColor: Color(UIColor(hex: "#0808080F")), + darkColor: Color(UIColor(hex: "#08080812")), lightColor: Color(UIColor(hex: "#FFFFFF05")) ) } @@ -2939,20 +2989,20 @@ public extension ColorToken { } static var surfaceInverseTransparentWarning: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FA5F051F")), + lightColor: Color(UIColor(hex: "#FA5F0533")) ) } static var surfaceInverseTransparentWarningActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FA5F050F")), + lightColor: Color(UIColor(hex: "#FA5F053D")) ) } static var surfaceInverseTransparentWarningHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FA5F053D")), + lightColor: Color(UIColor(hex: "#FA5F051F")) ) } static var surfaceInverseWarning: Self { @@ -2975,20 +3025,20 @@ public extension ColorToken { } static var surfaceInverseWarningMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FEE2D2")), + lightColor: Color(UIColor(hex: "#3D1D0A")) ) } static var surfaceInverseWarningMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FEDCC8FF")), + lightColor: Color(UIColor(hex: "#2C1507FF")) ) } static var surfaceInverseWarningMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FEE9DCFF")), + lightColor: Color(UIColor(hex: "#58290EFF")) ) } static var surfaceOnDarkAccent: Self { @@ -3011,20 +3061,20 @@ public extension ColorToken { } static var surfaceOnDarkAccentMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#0A2B10")), + lightColor: Color(UIColor(hex: "#0A2B10")) ) } static var surfaceOnDarkAccentMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#08210CFF")), + lightColor: Color(UIColor(hex: "#061909FF")) ) } static var surfaceOnDarkAccentMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#0E3A16FF")), + lightColor: Color(UIColor(hex: "#0E3A16FF")) ) } static var surfaceOnDarkClear: Self { @@ -3047,38 +3097,38 @@ public extension ColorToken { } static var surfaceOnDarkInfo: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#118CDF")), + lightColor: Color(UIColor(hex: "#118CDF")) ) } static var surfaceOnDarkInfoActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#1086D5FF")), + lightColor: Color(UIColor(hex: "#0F81CCFF")) ) } static var surfaceOnDarkInfoHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#1798EEFF")), + lightColor: Color(UIColor(hex: "#1798EEFF")) ) } static var surfaceOnDarkInfoMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#0C283B")), + lightColor: Color(UIColor(hex: "#0C283B")) ) } static var surfaceOnDarkInfoMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#0A2333FF")), + lightColor: Color(UIColor(hex: "#091D2AFF")) ) } static var surfaceOnDarkInfoMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#10344CFF")), + lightColor: Color(UIColor(hex: "#10344CFF")) ) } static var surfaceOnDarkNegative: Self { @@ -3101,20 +3151,20 @@ public extension ColorToken { } static var surfaceOnDarkNegativeMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#4A0D13")), + lightColor: Color(UIColor(hex: "#4A0D13")) ) } static var surfaceOnDarkNegativeMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#410B11FF")), + lightColor: Color(UIColor(hex: "#380A0FFF")) ) } static var surfaceOnDarkNegativeMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#5B1018FF")), + lightColor: Color(UIColor(hex: "#64121AFF")) ) } static var surfaceOnDarkPositive: Self { @@ -3137,20 +3187,20 @@ public extension ColorToken { } static var surfaceOnDarkPositiveMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#0A2B10")), + lightColor: Color(UIColor(hex: "#0A2B10")) ) } static var surfaceOnDarkPositiveMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#08210CFF")), + lightColor: Color(UIColor(hex: "#061909FF")) ) } static var surfaceOnDarkPositiveMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#0E3A16FF")), + lightColor: Color(UIColor(hex: "#0E3A16FF")) ) } static var surfaceOnDarkPromo: Self { @@ -3201,6 +3251,12 @@ public extension ColorToken { lightColor: Color(UIColor(hex: "#0D0D0DFF")) ) } + static var surfaceOnDarkSolidCardBrightness: Self { + Self( + darkColor: Color(UIColor(hex: "#252525FF")), + lightColor: Color(UIColor(hex: "#252525FF")) + ) + } static var surfaceOnDarkSolidCardHover: Self { Self( darkColor: Color(UIColor(hex: "#1C1C1CFF")), @@ -3237,6 +3293,12 @@ public extension ColorToken { lightColor: Color(UIColor(hex: "#0D0D0DFF")) ) } + static var surfaceOnDarkSolidPrimaryBrightness: Self { + Self( + darkColor: Color(UIColor(hex: "#252525FF")), + lightColor: Color(UIColor(hex: "#252525FF")) + ) + } static var surfaceOnDarkSolidPrimaryHover: Self { Self( darkColor: Color(UIColor(hex: "#1C1C1CFF")), @@ -3281,20 +3343,20 @@ public extension ColorToken { } static var surfaceOnDarkTransparentAccent: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#1A9E3233")), + lightColor: Color(UIColor(hex: "#1A9E3233")) ) } static var surfaceOnDarkTransparentAccentActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#1A9E3224")), + lightColor: Color(UIColor(hex: "#1A9E323D")) ) } static var surfaceOnDarkTransparentAccentHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#1A9E3252")), + lightColor: Color(UIColor(hex: "#1A9E321F")) ) } static var surfaceOnDarkTransparentCard: Self { @@ -3309,6 +3371,12 @@ public extension ColorToken { lightColor: Color(UIColor(hex: "#FFFFFF1A")) ) } + static var surfaceOnDarkTransparentCardBrightness: Self { + Self( + darkColor: Color(UIColor(hex: "#FFFF1DFF")), + lightColor: Color(UIColor(hex: "#FFFF1DFF")) + ) + } static var surfaceOnDarkTransparentCardHover: Self { Self( darkColor: Color(UIColor(hex: "#FFFFFF1F")), @@ -3335,56 +3403,56 @@ public extension ColorToken { } static var surfaceOnDarkTransparentInfo: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#118CDF33")), + lightColor: Color(UIColor(hex: "#118CDF33")) ) } static var surfaceOnDarkTransparentInfoActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#118CDF24")), + lightColor: Color(UIColor(hex: "#118CDF3D")) ) } static var surfaceOnDarkTransparentInfoHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#118CDF52")), + lightColor: Color(UIColor(hex: "#118CDF1F")) ) } static var surfaceOnDarkTransparentNegative: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FF293E33")), + lightColor: Color(UIColor(hex: "#FF293E33")) ) } static var surfaceOnDarkTransparentNegativeActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FF293E24")), + lightColor: Color(UIColor(hex: "#FF293E3D")) ) } static var surfaceOnDarkTransparentNegativeHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FF293E52")), + lightColor: Color(UIColor(hex: "#FF293E1F")) ) } static var surfaceOnDarkTransparentPositive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#1A9E3233")), + lightColor: Color(UIColor(hex: "#1A9E3233")) ) } static var surfaceOnDarkTransparentPositiveActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#1A9E3224")), + lightColor: Color(UIColor(hex: "#1A9E323D")) ) } static var surfaceOnDarkTransparentPositiveHover: Self { - Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + Self( + darkColor: Color(UIColor(hex: "#1A9E3252")), + lightColor: Color(UIColor(hex: "#1A9E321F")) ) } static var surfaceOnDarkTransparentPrimary: Self { @@ -3461,20 +3529,20 @@ public extension ColorToken { } static var surfaceOnDarkTransparentWarning: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FA5F0533")), + lightColor: Color(UIColor(hex: "#FA5F0533")) ) } static var surfaceOnDarkTransparentWarningActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FA5F0524")), + lightColor: Color(UIColor(hex: "#FA5F053D")) ) } static var surfaceOnDarkTransparentWarningHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FA5F0552")), + lightColor: Color(UIColor(hex: "#FA5F051F")) ) } static var surfaceOnDarkWarning: Self { @@ -3497,20 +3565,20 @@ public extension ColorToken { } static var surfaceOnDarkWarningMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#3D1D0A")), + lightColor: Color(UIColor(hex: "#3D1D0A")) ) } static var surfaceOnDarkWarningMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#351909FF")), + lightColor: Color(UIColor(hex: "#2C1507FF")) ) } static var surfaceOnDarkWarningMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#4F250DFF")), + lightColor: Color(UIColor(hex: "#58290EFF")) ) } static var surfaceOnLightAccent: Self { @@ -3533,20 +3601,20 @@ public extension ColorToken { } static var surfaceOnLightAccentMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#9EFAAF")), + lightColor: Color(UIColor(hex: "#9EFAAF")) ) } static var surfaceOnLightAccentMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#94F9A7FF")), + lightColor: Color(UIColor(hex: "#8BF99FFF")) ) } static var surfaceOnLightAccentMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#B1FBBFFF")), + lightColor: Color(UIColor(hex: "#B1FBBFFF")) ) } static var surfaceOnLightClear: Self { @@ -3569,38 +3637,38 @@ public extension ColorToken { } static var surfaceOnLightInfo: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#118CDF")), + lightColor: Color(UIColor(hex: "#118CDF")) ) } static var surfaceOnLightInfoActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#1086D5FF")), + lightColor: Color(UIColor(hex: "#0F81CCFF")) ) } static var surfaceOnLightInfoHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#1798EEFF")), + lightColor: Color(UIColor(hex: "#1798EEFF")) ) } static var surfaceOnLightInfoMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#CFECFF")), + lightColor: Color(UIColor(hex: "#CFECFF")) ) } static var surfaceOnLightInfoMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#C7E9FFFF")), + lightColor: Color(UIColor(hex: "#C7E9FFFF")) ) } static var surfaceOnLightInfoMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#DBF1FFFF")), + lightColor: Color(UIColor(hex: "#E5F5FFFF")) ) } static var surfaceOnLightNegative: Self { @@ -3623,20 +3691,20 @@ public extension ColorToken { } static var surfaceOnLightNegativeMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FFE0E3")), + lightColor: Color(UIColor(hex: "#FFE0E3")) ) } static var surfaceOnLightNegativeMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FFD6DAFF")), + lightColor: Color(UIColor(hex: "#FFD6DAFF")) ) } static var surfaceOnLightNegativeMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FFEBEDFF")), + lightColor: Color(UIColor(hex: "#FFF5F6FF")) ) } static var surfaceOnLightPositive: Self { @@ -3659,20 +3727,20 @@ public extension ColorToken { } static var surfaceOnLightPositiveMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#9EFAAF")), + lightColor: Color(UIColor(hex: "#9EFAAF")) ) } static var surfaceOnLightPositiveMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#94F9A7FF")), + lightColor: Color(UIColor(hex: "#8BF99FFF")) ) } static var surfaceOnLightPositiveMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#B1FBBFFF")), + lightColor: Color(UIColor(hex: "#B1FBBFFF")) ) } static var surfaceOnLightPromo: Self { @@ -3723,6 +3791,12 @@ public extension ColorToken { lightColor: Color(UIColor(hex: "#FFFFFFFF")) ) } + static var surfaceOnLightSolidCardBrightness: Self { + Self( + darkColor: Color(UIColor(hex: "#FFFFFFFF")), + lightColor: Color(UIColor(hex: "#FFFFFFFF")) + ) + } static var surfaceOnLightSolidCardHover: Self { Self( darkColor: Color(UIColor(hex: "#FFFFFFFF")), @@ -3759,6 +3833,12 @@ public extension ColorToken { lightColor: Color(UIColor(hex: "#F0F0F0FF")) ) } + static var surfaceOnLightSolidPrimaryBrightness: Self { + Self( + darkColor: Color(UIColor(hex: "#F6F6F6FF")), + lightColor: Color(UIColor(hex: "#F6F6F6FF")) + ) + } static var surfaceOnLightSolidPrimaryHover: Self { Self( darkColor: Color(UIColor(hex: "#FAFAFAFF")), @@ -3803,20 +3883,20 @@ public extension ColorToken { } static var surfaceOnLightTransparentAccent: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#1A9E321F")), + lightColor: Color(UIColor(hex: "#1A9E321F")) ) } static var surfaceOnLightTransparentAccentActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#1A9E320F")), + lightColor: Color(UIColor(hex: "#1A9E3229")) ) } static var surfaceOnLightTransparentAccentHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#1A9E323D")), + lightColor: Color(UIColor(hex: "#1A9E320A")) ) } static var surfaceOnLightTransparentCard: Self { @@ -3831,6 +3911,12 @@ public extension ColorToken { lightColor: Color(UIColor(hex: "#FFFFFFFF")) ) } + static var surfaceOnLightTransparentCardBrightness: Self { + Self( + darkColor: Color(UIColor(hex: "#171717FF")), + lightColor: Color(UIColor(hex: "#FFFFFFFF")) + ) + } static var surfaceOnLightTransparentCardHover: Self { Self( darkColor: Color(UIColor(hex: "#0808081F")), @@ -3857,74 +3943,74 @@ public extension ColorToken { } static var surfaceOnLightTransparentInfo: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#118CDF1F")), + lightColor: Color(UIColor(hex: "#118CDF1F")) ) } static var surfaceOnLightTransparentInfoActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#118CDF0F")), + lightColor: Color(UIColor(hex: "#118CDF29")) ) } static var surfaceOnLightTransparentInfoHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#118CDF3D")), + lightColor: Color(UIColor(hex: "#118CDF0A")) ) } static var surfaceOnLightTransparentNegative: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FF293E1F")), + lightColor: Color(UIColor(hex: "#FF293E1F")) ) } static var surfaceOnLightTransparentNegativeActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FF293E0F")), + lightColor: Color(UIColor(hex: "#FF293E29")) ) } static var surfaceOnLightTransparentNegativeHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FF293E3D")), + lightColor: Color(UIColor(hex: "#FF293E0A")) ) } static var surfaceOnLightTransparentPositive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#1A9E321F")), + lightColor: Color(UIColor(hex: "#1A9E321F")) ) } static var surfaceOnLightTransparentPositiveActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#1A9E320F")), + lightColor: Color(UIColor(hex: "#1A9E3229")) ) } static var surfaceOnLightTransparentPositiveHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#1A9E323D")), + lightColor: Color(UIColor(hex: "#1A9E320A")) ) } static var surfaceOnLightTransparentPrimary: Self { Self( - darkColor: Color(UIColor(hex: "#08080805")), - lightColor: Color(UIColor(hex: "#08080805")) + darkColor: Color(UIColor(hex: "#08080808")), + lightColor: Color(UIColor(hex: "#08080808")) ) } static var surfaceOnLightTransparentPrimaryActive: Self { Self( - darkColor: Color(UIColor(hex: "#08080800")), - lightColor: Color(UIColor(hex: "#0808080A")) + darkColor: Color(UIColor(hex: "#08080803")), + lightColor: Color(UIColor(hex: "#0808080D")) ) } static var surfaceOnLightTransparentPrimaryHover: Self { Self( - darkColor: Color(UIColor(hex: "#0808080F")), - lightColor: Color(UIColor(hex: "#08080800")) + darkColor: Color(UIColor(hex: "#08080812")), + lightColor: Color(UIColor(hex: "#08080803")) ) } static var surfaceOnLightTransparentPromo: Self { @@ -3983,20 +4069,20 @@ public extension ColorToken { } static var surfaceOnLightTransparentWarning: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FA5F051F")), + lightColor: Color(UIColor(hex: "#FA5F051F")) ) } static var surfaceOnLightTransparentWarningActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FA5F050F")), + lightColor: Color(UIColor(hex: "#FA5F0529")) ) } static var surfaceOnLightTransparentWarningHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FA5F053D")), + lightColor: Color(UIColor(hex: "#FA5F050A")) ) } static var surfaceOnLightWarning: Self { @@ -4019,20 +4105,20 @@ public extension ColorToken { } static var surfaceOnLightWarningMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FEE2D2")), + lightColor: Color(UIColor(hex: "#FEE2D2")) ) } static var surfaceOnLightWarningMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FEDCC8FF")), + lightColor: Color(UIColor(hex: "#FEDCC8FF")) ) } static var surfaceOnLightWarningMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FEE9DCFF")), + lightColor: Color(UIColor(hex: "#FEEFE6FF")) ) } static var textDefaultAccent: Self { @@ -4055,56 +4141,56 @@ public extension ColorToken { } static var textDefaultAccentMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#095C18")), + lightColor: Color(UIColor(hex: "#28D247")) ) } static var textDefaultAccentMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#0C7920FF")), + lightColor: Color(UIColor(hex: "#21B03CFF")) ) } static var textDefaultAccentMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#0F9527FF")), + lightColor: Color(UIColor(hex: "#47DC62FF")) ) } static var textDefaultInfo: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#199AF0")), + lightColor: Color(UIColor(hex: "#0B7ECB")) ) } static var textDefaultInfoActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#0E8ADDFF")), + lightColor: Color(UIColor(hex: "#0966A5FF")) ) } static var textDefaultInfoHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#66BCF5FF")), + lightColor: Color(UIColor(hex: "#0D96F2FF")) ) } static var textDefaultInfoMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#0D5382")), + lightColor: Color(UIColor(hex: "#52BAFF")) ) } static var textDefaultInfoMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#10659EFF")), + lightColor: Color(UIColor(hex: "#29A9FFFF")) ) } static var textDefaultInfoMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#1277BAFF")), + lightColor: Color(UIColor(hex: "#7ACAFFFF")) ) } static var textDefaultNegative: Self { @@ -4127,20 +4213,20 @@ public extension ColorToken { } static var textDefaultNegativeMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#9C1422")), + lightColor: Color(UIColor(hex: "#FF8F9A")) ) } static var textDefaultNegativeMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#83111CFF")), + lightColor: Color(UIColor(hex: "#FF6675FF")) ) } static var textDefaultNegativeMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#B91828FF")), + lightColor: Color(UIColor(hex: "#FFB8BFFF")) ) } static var textDefaultParagraph: Self { @@ -4181,20 +4267,20 @@ public extension ColorToken { } static var textDefaultPositiveMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#095C18")), + lightColor: Color(UIColor(hex: "#28D247")) ) } static var textDefaultPositiveMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#0C7920FF")), + lightColor: Color(UIColor(hex: "#21B03CFF")) ) } static var textDefaultPositiveMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#0F9527FF")), + lightColor: Color(UIColor(hex: "#47DC62FF")) ) } static var textDefaultPrimary: Self { @@ -4209,6 +4295,12 @@ public extension ColorToken { lightColor: Color(UIColor(hex: "#171717C4")) ) } + static var textDefaultPrimaryBrightness: Self { + Self( + darkColor: Color(UIColor(hex: "#F6F6F6FF")), + lightColor: Color(UIColor(hex: "#2525F6FF")) + ) + } static var textDefaultPrimaryHover: Self { Self( darkColor: Color(UIColor(hex: "#F5F5F593")), @@ -4307,20 +4399,20 @@ public extension ColorToken { } static var textDefaultWarningMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#85380C")), + lightColor: Color(UIColor(hex: "#FD9C68")) ) } static var textDefaultWarningMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#9F440FFF")), + lightColor: Color(UIColor(hex: "#FC8240FF")) ) } static var textDefaultWarningMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#BB4F11FF")), + lightColor: Color(UIColor(hex: "#FDB790FF")) ) } static var textInverseAccent: Self { @@ -4343,56 +4435,56 @@ public extension ColorToken { } static var textInverseAccentMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#28D247")), + lightColor: Color(UIColor(hex: "#095C18")) ) } static var textInverseAccentMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#23B83EFF")), + lightColor: Color(UIColor(hex: "#0D8222FF")) ) } static var textInverseAccentMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#3EDA5BFF")), + lightColor: Color(UIColor(hex: "#11A72CFF")) ) } static var textInverseInfo: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#0B7ECB")), + lightColor: Color(UIColor(hex: "#199AF0")) ) } static var textInverseInfoActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#096CAEFF")), + lightColor: Color(UIColor(hex: "#0D84D3FF")) ) } static var textInverseInfoHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#34A7F4FF")), + lightColor: Color(UIColor(hex: "#3FABF3FF")) ) } static var textInverseInfoMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#52BAFF")), + lightColor: Color(UIColor(hex: "#0D5382")) ) } static var textInverseInfoMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#33ADFFFF")), + lightColor: Color(UIColor(hex: "#116BA7FF")) ) } static var textInverseInfoMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#A3DAFFFF")), + lightColor: Color(UIColor(hex: "#1483CCFF")) ) } static var textInverseNegative: Self { @@ -4415,20 +4507,20 @@ public extension ColorToken { } static var textInverseNegativeMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FF8F9A")), + lightColor: Color(UIColor(hex: "#9C1422")) ) } static var textInverseNegativeMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#FF707EFF")), + lightColor: Color(UIColor(hex: "#7A101AFF")) ) } static var textInverseNegativeMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#FFADB6FF")), + lightColor: Color(UIColor(hex: "#C2192AFF")) ) } static var textInverseParagraph: Self { @@ -4469,20 +4561,20 @@ public extension ColorToken { } static var textInversePositiveMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#28D247")), + lightColor: Color(UIColor(hex: "#095C18")) ) } static var textInversePositiveMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#23B83EFF")), + lightColor: Color(UIColor(hex: "#0D8222FF")) ) } static var textInversePositiveMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#3EDA5BFF")), + lightColor: Color(UIColor(hex: "#11A72CFF")) ) } static var textInversePrimary: Self { @@ -4497,6 +4589,12 @@ public extension ColorToken { lightColor: Color(UIColor(hex: "#F5F5F5C4")) ) } + static var textInversePrimaryBrightness: Self { + Self( + darkColor: Color(UIColor(hex: "#2525F6FF")), + lightColor: Color(UIColor(hex: "#F6F6F6FF")) + ) + } static var textInversePrimaryHover: Self { Self( darkColor: Color(UIColor(hex: "#17171793")), @@ -4595,20 +4693,20 @@ public extension ColorToken { } static var textInverseWarningMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FD9C68")), + lightColor: Color(UIColor(hex: "#85380C")) ) } static var textInverseWarningMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#FC884AFF")), + lightColor: Color(UIColor(hex: "#A84710FF")) ) } static var textInverseWarningMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#FDB086FF")), + lightColor: Color(UIColor(hex: "#CD5713FF")) ) } static var textOnDarkAccent: Self { @@ -4631,56 +4729,56 @@ public extension ColorToken { } static var textOnDarkAccentMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#095C18")), + lightColor: Color(UIColor(hex: "#24B23E")) ) } static var textOnDarkAccentMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#0C7920FF")), + lightColor: Color(UIColor(hex: "#1D9032FF")) ) } static var textOnDarkAccentMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#0F9527FF")), + lightColor: Color(UIColor(hex: "#2BD44AFF")) ) } static var textOnDarkInfo: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#199AF0")), + lightColor: Color(UIColor(hex: "#199AF0")) ) } static var textOnDarkInfoActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#0E8ADDFF")), + lightColor: Color(UIColor(hex: "#0D84D3FF")) ) } static var textOnDarkInfoHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#66BCF5FF")), + lightColor: Color(UIColor(hex: "#3FABF3FF")) ) } static var textOnDarkInfoMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#0D5382")), + lightColor: Color(UIColor(hex: "#0D5382")) ) } static var textOnDarkInfoMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#10659EFF")), + lightColor: Color(UIColor(hex: "#116BA7FF")) ) } static var textOnDarkInfoMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#1277BAFF")), + lightColor: Color(UIColor(hex: "#1483CCFF")) ) } static var textOnDarkNegative: Self { @@ -4703,20 +4801,20 @@ public extension ColorToken { } static var textOnDarkNegativeMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#9C1422")), + lightColor: Color(UIColor(hex: "#9C1422")) ) } static var textOnDarkNegativeMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#83111CFF")), + lightColor: Color(UIColor(hex: "#7A101AFF")) ) } static var textOnDarkNegativeMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#B91828FF")), + lightColor: Color(UIColor(hex: "#C2192AFF")) ) } static var textOnDarkParagraph: Self { @@ -4757,20 +4855,20 @@ public extension ColorToken { } static var textOnDarkPositiveMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#095C18")), + lightColor: Color(UIColor(hex: "#095C18")) ) } static var textOnDarkPositiveMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#0C7920FF")), + lightColor: Color(UIColor(hex: "#0D8222FF")) ) } static var textOnDarkPositiveMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#0F9527FF")), + lightColor: Color(UIColor(hex: "#11A72CFF")) ) } static var textOnDarkPrimary: Self { @@ -4785,6 +4883,12 @@ public extension ColorToken { lightColor: Color(UIColor(hex: "#F5F5F5C4")) ) } + static var textOnDarkPrimaryBrightness: Self { + Self( + darkColor: Color(UIColor(hex: "#F6F6F6FF")), + lightColor: Color(UIColor(hex: "#F6F6F6FF")) + ) + } static var textOnDarkPrimaryHover: Self { Self( darkColor: Color(UIColor(hex: "#F5F5F593")), @@ -4883,20 +4987,20 @@ public extension ColorToken { } static var textOnDarkWarningMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#85380C")), + lightColor: Color(UIColor(hex: "#85380C")) ) } static var textOnDarkWarningMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#9F440FFF")), + lightColor: Color(UIColor(hex: "#A84710FF")) ) } static var textOnDarkWarningMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#BB4F11FF")), + lightColor: Color(UIColor(hex: "#CD5713FF")) ) } static var textOnLightAccent: Self { @@ -4919,56 +5023,56 @@ public extension ColorToken { } static var textOnLightAccentMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#17D317")), + lightColor: Color(UIColor(hex: "#28D247")) ) } static var textOnLightAccentMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#14B814FF")), + lightColor: Color(UIColor(hex: "#21B03CFF")) ) } static var textOnLightAccentMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#23E723FF")), + lightColor: Color(UIColor(hex: "#47DC62FF")) ) } static var textOnLightInfo: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#0B7ECB")), + lightColor: Color(UIColor(hex: "#0B7ECB")) ) } static var textOnLightInfoActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#096CAEFF")), + lightColor: Color(UIColor(hex: "#0966A5FF")) ) } static var textOnLightInfoHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#34A7F4FF")), + lightColor: Color(UIColor(hex: "#0D96F2FF")) ) } static var textOnLightInfoMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#52BAFF")), + lightColor: Color(UIColor(hex: "#52BAFF")) ) } static var textOnLightInfoMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#33ADFFFF")), + lightColor: Color(UIColor(hex: "#29A9FFFF")) ) } static var textOnLightInfoMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#A3DAFFFF")), + lightColor: Color(UIColor(hex: "#7ACAFFFF")) ) } static var textOnLightNegative: Self { @@ -4991,20 +5095,20 @@ public extension ColorToken { } static var textOnLightNegativeMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FF8F9A")), + lightColor: Color(UIColor(hex: "#FF8F9A")) ) } static var textOnLightNegativeMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#FF707EFF")), + lightColor: Color(UIColor(hex: "#FF6675FF")) ) } static var textOnLightNegativeMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#FFADB6FF")), + lightColor: Color(UIColor(hex: "#FFB8BFFF")) ) } static var textOnLightParagraph: Self { @@ -5045,20 +5149,20 @@ public extension ColorToken { } static var textOnLightPositiveMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#28D247")), + lightColor: Color(UIColor(hex: "#28D247")) ) } static var textOnLightPositiveMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#23B83EFF")), + lightColor: Color(UIColor(hex: "#21B03CFF")) ) } static var textOnLightPositiveMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#3EDA5BFF")), + lightColor: Color(UIColor(hex: "#47DC62FF")) ) } static var textOnLightPrimary: Self { @@ -5073,6 +5177,12 @@ public extension ColorToken { lightColor: Color(UIColor(hex: "#171717C4")) ) } + static var textOnLightPrimaryBrightness: Self { + Self( + darkColor: Color(UIColor(hex: "#2525F6FF")), + lightColor: Color(UIColor(hex: "#2525F6FF")) + ) + } static var textOnLightPrimaryHover: Self { Self( darkColor: Color(UIColor(hex: "#17171793")), @@ -5171,20 +5281,20 @@ public extension ColorToken { } static var textOnLightWarningMinor: Self { Self( - darkColor: Color(UIColor(hex: "#FFFFFFFF")), - lightColor: Color(UIColor(hex: "#FFFFFFFF")) + darkColor: Color(UIColor(hex: "#FD9C68")), + lightColor: Color(UIColor(hex: "#FD9C68")) ) } static var textOnLightWarningMinorActive: Self { Self( - darkColor: Color(UIColor(hex: "#E6E6E6FF")), - lightColor: Color(UIColor(hex: "#CCCCCCFF")) + darkColor: Color(UIColor(hex: "#FC884AFF")), + lightColor: Color(UIColor(hex: "#FC8240FF")) ) } static var textOnLightWarningMinorHover: Self { Self( - darkColor: Color(UIColor(hex: "#CCCCCCFF")), - lightColor: Color(UIColor(hex: "#000000FF")) + darkColor: Color(UIColor(hex: "#FDB086FF")), + lightColor: Color(UIColor(hex: "#FDB790FF")) ) } } diff --git a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/Colors+Generated.swift b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/Colors+Generated.swift index 020c96e3e..9dd2462fb 100644 --- a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/Colors+Generated.swift +++ b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/Colors+Generated.swift @@ -1,3 +1,5 @@ +/* This file is code generated. */ + import SwiftUI import UIKit @_exported import SDDSThemeCore @@ -7,9 +9,11 @@ public struct Colors { public static let backgroundDarkSecondary = ColorToken.backgroundDarkSecondary public static let backgroundDarkTertiary = ColorToken.backgroundDarkTertiary public static let backgroundDefaultPrimary = ColorToken.backgroundDefaultPrimary + public static let backgroundDefaultPrimaryBrightness = ColorToken.backgroundDefaultPrimaryBrightness public static let backgroundDefaultSecondary = ColorToken.backgroundDefaultSecondary public static let backgroundDefaultTertiary = ColorToken.backgroundDefaultTertiary public static let backgroundInversePrimary = ColorToken.backgroundInversePrimary + public static let backgroundInversePrimaryBrightness = ColorToken.backgroundInversePrimaryBrightness public static let backgroundInverseSecondary = ColorToken.backgroundInverseSecondary public static let backgroundInverseTertiary = ColorToken.backgroundInverseTertiary public static let backgroundLightPrimary = ColorToken.backgroundLightPrimary @@ -362,12 +366,14 @@ public struct Colors { public static let surfaceDefaultPromoMinorHover = ColorToken.surfaceDefaultPromoMinorHover public static let surfaceDefaultSolidCard = ColorToken.surfaceDefaultSolidCard public static let surfaceDefaultSolidCardActive = ColorToken.surfaceDefaultSolidCardActive + public static let surfaceDefaultSolidCardBrightness = ColorToken.surfaceDefaultSolidCardBrightness public static let surfaceDefaultSolidCardHover = ColorToken.surfaceDefaultSolidCardHover public static let surfaceDefaultSolidDefault = ColorToken.surfaceDefaultSolidDefault public static let surfaceDefaultSolidDefaultActive = ColorToken.surfaceDefaultSolidDefaultActive public static let surfaceDefaultSolidDefaultHover = ColorToken.surfaceDefaultSolidDefaultHover public static let surfaceDefaultSolidPrimary = ColorToken.surfaceDefaultSolidPrimary public static let surfaceDefaultSolidPrimaryActive = ColorToken.surfaceDefaultSolidPrimaryActive + public static let surfaceDefaultSolidPrimaryBrightness = ColorToken.surfaceDefaultSolidPrimaryBrightness public static let surfaceDefaultSolidPrimaryHover = ColorToken.surfaceDefaultSolidPrimaryHover public static let surfaceDefaultSolidSecondary = ColorToken.surfaceDefaultSolidSecondary public static let surfaceDefaultSolidSecondaryActive = ColorToken.surfaceDefaultSolidSecondaryActive @@ -380,6 +386,7 @@ public struct Colors { public static let surfaceDefaultTransparentAccentHover = ColorToken.surfaceDefaultTransparentAccentHover public static let surfaceDefaultTransparentCard = ColorToken.surfaceDefaultTransparentCard public static let surfaceDefaultTransparentCardActive = ColorToken.surfaceDefaultTransparentCardActive + public static let surfaceDefaultTransparentCardBrightness = ColorToken.surfaceDefaultTransparentCardBrightness public static let surfaceDefaultTransparentCardHover = ColorToken.surfaceDefaultTransparentCardHover public static let surfaceDefaultTransparentDeep = ColorToken.surfaceDefaultTransparentDeep public static let surfaceDefaultTransparentDeepActive = ColorToken.surfaceDefaultTransparentDeepActive @@ -449,12 +456,14 @@ public struct Colors { public static let surfaceInversePromoMinorHover = ColorToken.surfaceInversePromoMinorHover public static let surfaceInverseSolidCard = ColorToken.surfaceInverseSolidCard public static let surfaceInverseSolidCardActive = ColorToken.surfaceInverseSolidCardActive + public static let surfaceInverseSolidCardBrightness = ColorToken.surfaceInverseSolidCardBrightness public static let surfaceInverseSolidCardHover = ColorToken.surfaceInverseSolidCardHover public static let surfaceInverseSolidDefault = ColorToken.surfaceInverseSolidDefault public static let surfaceInverseSolidDefaultActive = ColorToken.surfaceInverseSolidDefaultActive public static let surfaceInverseSolidDefaultHover = ColorToken.surfaceInverseSolidDefaultHover public static let surfaceInverseSolidPrimary = ColorToken.surfaceInverseSolidPrimary public static let surfaceInverseSolidPrimaryActive = ColorToken.surfaceInverseSolidPrimaryActive + public static let surfaceInverseSolidPrimaryBrightness = ColorToken.surfaceInverseSolidPrimaryBrightness public static let surfaceInverseSolidPrimaryHover = ColorToken.surfaceInverseSolidPrimaryHover public static let surfaceInverseSolidSecondary = ColorToken.surfaceInverseSolidSecondary public static let surfaceInverseSolidSecondaryActive = ColorToken.surfaceInverseSolidSecondaryActive @@ -467,6 +476,7 @@ public struct Colors { public static let surfaceInverseTransparentAccentHover = ColorToken.surfaceInverseTransparentAccentHover public static let surfaceInverseTransparentCard = ColorToken.surfaceInverseTransparentCard public static let surfaceInverseTransparentCardActive = ColorToken.surfaceInverseTransparentCardActive + public static let surfaceInverseTransparentCardBrightness = ColorToken.surfaceInverseTransparentCardBrightness public static let surfaceInverseTransparentCardHover = ColorToken.surfaceInverseTransparentCardHover public static let surfaceInverseTransparentDeep = ColorToken.surfaceInverseTransparentDeep public static let surfaceInverseTransparentDeepActive = ColorToken.surfaceInverseTransparentDeepActive @@ -536,12 +546,14 @@ public struct Colors { public static let surfaceOnDarkPromoMinorHover = ColorToken.surfaceOnDarkPromoMinorHover public static let surfaceOnDarkSolidCard = ColorToken.surfaceOnDarkSolidCard public static let surfaceOnDarkSolidCardActive = ColorToken.surfaceOnDarkSolidCardActive + public static let surfaceOnDarkSolidCardBrightness = ColorToken.surfaceOnDarkSolidCardBrightness public static let surfaceOnDarkSolidCardHover = ColorToken.surfaceOnDarkSolidCardHover public static let surfaceOnDarkSolidDefault = ColorToken.surfaceOnDarkSolidDefault public static let surfaceOnDarkSolidDefaultActive = ColorToken.surfaceOnDarkSolidDefaultActive public static let surfaceOnDarkSolidDefaultHover = ColorToken.surfaceOnDarkSolidDefaultHover public static let surfaceOnDarkSolidPrimary = ColorToken.surfaceOnDarkSolidPrimary public static let surfaceOnDarkSolidPrimaryActive = ColorToken.surfaceOnDarkSolidPrimaryActive + public static let surfaceOnDarkSolidPrimaryBrightness = ColorToken.surfaceOnDarkSolidPrimaryBrightness public static let surfaceOnDarkSolidPrimaryHover = ColorToken.surfaceOnDarkSolidPrimaryHover public static let surfaceOnDarkSolidSecondary = ColorToken.surfaceOnDarkSolidSecondary public static let surfaceOnDarkSolidSecondaryActive = ColorToken.surfaceOnDarkSolidSecondaryActive @@ -554,6 +566,7 @@ public struct Colors { public static let surfaceOnDarkTransparentAccentHover = ColorToken.surfaceOnDarkTransparentAccentHover public static let surfaceOnDarkTransparentCard = ColorToken.surfaceOnDarkTransparentCard public static let surfaceOnDarkTransparentCardActive = ColorToken.surfaceOnDarkTransparentCardActive + public static let surfaceOnDarkTransparentCardBrightness = ColorToken.surfaceOnDarkTransparentCardBrightness public static let surfaceOnDarkTransparentCardHover = ColorToken.surfaceOnDarkTransparentCardHover public static let surfaceOnDarkTransparentDeep = ColorToken.surfaceOnDarkTransparentDeep public static let surfaceOnDarkTransparentDeepActive = ColorToken.surfaceOnDarkTransparentDeepActive @@ -623,12 +636,14 @@ public struct Colors { public static let surfaceOnLightPromoMinorHover = ColorToken.surfaceOnLightPromoMinorHover public static let surfaceOnLightSolidCard = ColorToken.surfaceOnLightSolidCard public static let surfaceOnLightSolidCardActive = ColorToken.surfaceOnLightSolidCardActive + public static let surfaceOnLightSolidCardBrightness = ColorToken.surfaceOnLightSolidCardBrightness public static let surfaceOnLightSolidCardHover = ColorToken.surfaceOnLightSolidCardHover public static let surfaceOnLightSolidDefault = ColorToken.surfaceOnLightSolidDefault public static let surfaceOnLightSolidDefaultActive = ColorToken.surfaceOnLightSolidDefaultActive public static let surfaceOnLightSolidDefaultHover = ColorToken.surfaceOnLightSolidDefaultHover public static let surfaceOnLightSolidPrimary = ColorToken.surfaceOnLightSolidPrimary public static let surfaceOnLightSolidPrimaryActive = ColorToken.surfaceOnLightSolidPrimaryActive + public static let surfaceOnLightSolidPrimaryBrightness = ColorToken.surfaceOnLightSolidPrimaryBrightness public static let surfaceOnLightSolidPrimaryHover = ColorToken.surfaceOnLightSolidPrimaryHover public static let surfaceOnLightSolidSecondary = ColorToken.surfaceOnLightSolidSecondary public static let surfaceOnLightSolidSecondaryActive = ColorToken.surfaceOnLightSolidSecondaryActive @@ -641,6 +656,7 @@ public struct Colors { public static let surfaceOnLightTransparentAccentHover = ColorToken.surfaceOnLightTransparentAccentHover public static let surfaceOnLightTransparentCard = ColorToken.surfaceOnLightTransparentCard public static let surfaceOnLightTransparentCardActive = ColorToken.surfaceOnLightTransparentCardActive + public static let surfaceOnLightTransparentCardBrightness = ColorToken.surfaceOnLightTransparentCardBrightness public static let surfaceOnLightTransparentCardHover = ColorToken.surfaceOnLightTransparentCardHover public static let surfaceOnLightTransparentDeep = ColorToken.surfaceOnLightTransparentDeep public static let surfaceOnLightTransparentDeepActive = ColorToken.surfaceOnLightTransparentDeepActive @@ -704,6 +720,7 @@ public struct Colors { public static let textDefaultPositiveMinorHover = ColorToken.textDefaultPositiveMinorHover public static let textDefaultPrimary = ColorToken.textDefaultPrimary public static let textDefaultPrimaryActive = ColorToken.textDefaultPrimaryActive + public static let textDefaultPrimaryBrightness = ColorToken.textDefaultPrimaryBrightness public static let textDefaultPrimaryHover = ColorToken.textDefaultPrimaryHover public static let textDefaultPromo = ColorToken.textDefaultPromo public static let textDefaultPromoActive = ColorToken.textDefaultPromoActive @@ -752,6 +769,7 @@ public struct Colors { public static let textInversePositiveMinorHover = ColorToken.textInversePositiveMinorHover public static let textInversePrimary = ColorToken.textInversePrimary public static let textInversePrimaryActive = ColorToken.textInversePrimaryActive + public static let textInversePrimaryBrightness = ColorToken.textInversePrimaryBrightness public static let textInversePrimaryHover = ColorToken.textInversePrimaryHover public static let textInversePromo = ColorToken.textInversePromo public static let textInversePromoActive = ColorToken.textInversePromoActive @@ -800,6 +818,7 @@ public struct Colors { public static let textOnDarkPositiveMinorHover = ColorToken.textOnDarkPositiveMinorHover public static let textOnDarkPrimary = ColorToken.textOnDarkPrimary public static let textOnDarkPrimaryActive = ColorToken.textOnDarkPrimaryActive + public static let textOnDarkPrimaryBrightness = ColorToken.textOnDarkPrimaryBrightness public static let textOnDarkPrimaryHover = ColorToken.textOnDarkPrimaryHover public static let textOnDarkPromo = ColorToken.textOnDarkPromo public static let textOnDarkPromoActive = ColorToken.textOnDarkPromoActive @@ -848,6 +867,7 @@ public struct Colors { public static let textOnLightPositiveMinorHover = ColorToken.textOnLightPositiveMinorHover public static let textOnLightPrimary = ColorToken.textOnLightPrimary public static let textOnLightPrimaryActive = ColorToken.textOnLightPrimaryActive + public static let textOnLightPrimaryBrightness = ColorToken.textOnLightPrimaryBrightness public static let textOnLightPrimaryHover = ColorToken.textOnLightPrimaryHover public static let textOnLightPromo = ColorToken.textOnLightPromo public static let textOnLightPromoActive = ColorToken.textOnLightPromoActive diff --git a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/GradientToken+Generated.swift b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/GradientToken+Generated.swift index fb89d3117..ef14a32af 100644 --- a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/GradientToken+Generated.swift +++ b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/GradientToken+Generated.swift @@ -1,3 +1,5 @@ +/* This file is code generated. */ + import SwiftUI import UIKit @_exported import SDDSThemeCore @@ -14,10 +16,10 @@ public extension GradientToken { 1 ], colors: [ - Color(UIColor(hex: "#FFFFFF")), - Color(UIColor(hex: "#000000")) + Color(UIColor(hex: "#1A9E32FF")), + Color(UIColor(hex: "#04C6C9FF")) ], - angle: 90.0 + angle: 315.0 ) ) ], @@ -29,10 +31,10 @@ public extension GradientToken { 1 ], colors: [ - Color(UIColor(hex: "#FFFFFF")), - Color(UIColor(hex: "#000000")) + Color(UIColor(hex: "#0D8523FF")), + Color(UIColor(hex: "#0DA8ABFF")) ], - angle: 90.0 + angle: 315.0 ) ) ] @@ -539,10 +541,10 @@ public extension GradientToken { 1 ], colors: [ - Color(UIColor(hex: "#FFFFFF")), - Color(UIColor(hex: "#000000")) + Color(UIColor(hex: "#0D8523FF")), + Color(UIColor(hex: "#0DA8ABFF")) ], - angle: 90.0 + angle: 315.0 ) ) ], @@ -554,10 +556,10 @@ public extension GradientToken { 1 ], colors: [ - Color(UIColor(hex: "#FFFFFF")), - Color(UIColor(hex: "#000000")) + Color(UIColor(hex: "#1A9E32FF")), + Color(UIColor(hex: "#04C6C9FF")) ], - angle: 90.0 + angle: 315.0 ) ) ] @@ -1064,10 +1066,10 @@ public extension GradientToken { 1 ], colors: [ - Color(UIColor(hex: "#FFFFFF")), - Color(UIColor(hex: "#000000")) + Color(UIColor(hex: "#1A9E32FF")), + Color(UIColor(hex: "#04C6C9FF")) ], - angle: 90.0 + angle: 315.0 ) ) ], @@ -1079,10 +1081,10 @@ public extension GradientToken { 1 ], colors: [ - Color(UIColor(hex: "#FFFFFF")), - Color(UIColor(hex: "#000000")) + Color(UIColor(hex: "#1A9E32FF")), + Color(UIColor(hex: "#04C6C9FF")) ], - angle: 90.0 + angle: 315.0 ) ) ] @@ -1589,10 +1591,10 @@ public extension GradientToken { 1 ], colors: [ - Color(UIColor(hex: "#FFFFFF")), - Color(UIColor(hex: "#000000")) + Color(UIColor(hex: "#0D8523FF")), + Color(UIColor(hex: "#0DA8ABFF")) ], - angle: 90.0 + angle: 315.0 ) ) ], @@ -1604,10 +1606,10 @@ public extension GradientToken { 1 ], colors: [ - Color(UIColor(hex: "#FFFFFF")), - Color(UIColor(hex: "#000000")) + Color(UIColor(hex: "#0D8523FF")), + Color(UIColor(hex: "#0DA8ABFF")) ], - angle: 90.0 + angle: 315.0 ) ) ] @@ -2114,10 +2116,10 @@ public extension GradientToken { 1 ], colors: [ - Color(UIColor(hex: "#FFFFFF")), - Color(UIColor(hex: "#000000")) + Color(UIColor(hex: "#1A9E32FF")), + Color(UIColor(hex: "#04C6C9FF")) ], - angle: 90.0 + angle: 315.0 ) ) ], @@ -2129,10 +2131,10 @@ public extension GradientToken { 1 ], colors: [ - Color(UIColor(hex: "#FFFFFF")), - Color(UIColor(hex: "#000000")) + Color(UIColor(hex: "#0D8523FF")), + Color(UIColor(hex: "#0DA8ABFF")) ], - angle: 90.0 + angle: 315.0 ) ) ] @@ -3042,10 +3044,10 @@ public extension GradientToken { 1 ], colors: [ - Color(UIColor(hex: "#FFFFFF")), - Color(UIColor(hex: "#000000")) + Color(UIColor(hex: "#0D8523FF")), + Color(UIColor(hex: "#0DA8ABFF")) ], - angle: 90.0 + angle: 315.0 ) ) ], @@ -3057,10 +3059,10 @@ public extension GradientToken { 1 ], colors: [ - Color(UIColor(hex: "#FFFFFF")), - Color(UIColor(hex: "#000000")) + Color(UIColor(hex: "#1A9E32FF")), + Color(UIColor(hex: "#04C6C9FF")) ], - angle: 90.0 + angle: 315.0 ) ) ] @@ -3970,10 +3972,10 @@ public extension GradientToken { 1 ], colors: [ - Color(UIColor(hex: "#FFFFFF")), - Color(UIColor(hex: "#000000")) + Color(UIColor(hex: "#1A9E32FF")), + Color(UIColor(hex: "#04C6C9FF")) ], - angle: 90.0 + angle: 315.0 ) ) ], @@ -3985,10 +3987,10 @@ public extension GradientToken { 1 ], colors: [ - Color(UIColor(hex: "#FFFFFF")), - Color(UIColor(hex: "#000000")) + Color(UIColor(hex: "#1A9E32FF")), + Color(UIColor(hex: "#04C6C9FF")) ], - angle: 90.0 + angle: 315.0 ) ) ] @@ -4898,10 +4900,10 @@ public extension GradientToken { 1 ], colors: [ - Color(UIColor(hex: "#FFFFFF")), - Color(UIColor(hex: "#000000")) + Color(UIColor(hex: "#0D8523FF")), + Color(UIColor(hex: "#0DA8ABFF")) ], - angle: 90.0 + angle: 315.0 ) ) ], @@ -4913,10 +4915,10 @@ public extension GradientToken { 1 ], colors: [ - Color(UIColor(hex: "#FFFFFF")), - Color(UIColor(hex: "#000000")) + Color(UIColor(hex: "#0D8523FF")), + Color(UIColor(hex: "#0DA8ABFF")) ], - angle: 90.0 + angle: 315.0 ) ) ] @@ -5826,10 +5828,10 @@ public extension GradientToken { 1 ], colors: [ - Color(UIColor(hex: "#FFFFFF")), - Color(UIColor(hex: "#000000")) + Color(UIColor(hex: "#1A9E32FF")), + Color(UIColor(hex: "#04C6C9FF")) ], - angle: 90.0 + angle: 315.0 ) ) ], @@ -5841,10 +5843,10 @@ public extension GradientToken { 1 ], colors: [ - Color(UIColor(hex: "#FFFFFF")), - Color(UIColor(hex: "#000000")) + Color(UIColor(hex: "#0D8523FF")), + Color(UIColor(hex: "#0DA8ABFF")) ], - angle: 90.0 + angle: 315.0 ) ) ] @@ -6246,10 +6248,10 @@ public extension GradientToken { 1 ], colors: [ - Color(UIColor(hex: "#FFFFFF")), - Color(UIColor(hex: "#000000")) + Color(UIColor(hex: "#0D8523FF")), + Color(UIColor(hex: "#0DA8ABFF")) ], - angle: 90.0 + angle: 315.0 ) ) ], @@ -6261,10 +6263,10 @@ public extension GradientToken { 1 ], colors: [ - Color(UIColor(hex: "#FFFFFF")), - Color(UIColor(hex: "#000000")) + Color(UIColor(hex: "#1A9E32FF")), + Color(UIColor(hex: "#04C6C9FF")) ], - angle: 90.0 + angle: 315.0 ) ) ] @@ -6666,10 +6668,10 @@ public extension GradientToken { 1 ], colors: [ - Color(UIColor(hex: "#FFFFFF")), - Color(UIColor(hex: "#000000")) + Color(UIColor(hex: "#1A9E32FF")), + Color(UIColor(hex: "#04C6C9FF")) ], - angle: 90.0 + angle: 315.0 ) ) ], @@ -6681,10 +6683,10 @@ public extension GradientToken { 1 ], colors: [ - Color(UIColor(hex: "#FFFFFF")), - Color(UIColor(hex: "#000000")) + Color(UIColor(hex: "#1A9E32FF")), + Color(UIColor(hex: "#04C6C9FF")) ], - angle: 90.0 + angle: 315.0 ) ) ] @@ -7086,10 +7088,10 @@ public extension GradientToken { 1 ], colors: [ - Color(UIColor(hex: "#FFFFFF")), - Color(UIColor(hex: "#000000")) + Color(UIColor(hex: "#0D8523FF")), + Color(UIColor(hex: "#0DA8ABFF")) ], - angle: 90.0 + angle: 315.0 ) ) ], @@ -7101,10 +7103,10 @@ public extension GradientToken { 1 ], colors: [ - Color(UIColor(hex: "#FFFFFF")), - Color(UIColor(hex: "#000000")) + Color(UIColor(hex: "#0D8523FF")), + Color(UIColor(hex: "#0DA8ABFF")) ], - angle: 90.0 + angle: 315.0 ) ) ] diff --git a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/Gradients+Generated.swift b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/Gradients+Generated.swift index 5428e89b6..9d23ab263 100644 --- a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/Gradients+Generated.swift +++ b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/Gradients+Generated.swift @@ -1,3 +1,5 @@ +/* This file is code generated. */ + import SwiftUI import UIKit @_exported import SDDSThemeCore diff --git a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/ShadowToken+Generated.swift b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/ShadowToken+Generated.swift index 2eb45f1fe..1855e61d8 100644 --- a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/ShadowToken+Generated.swift +++ b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/ShadowToken+Generated.swift @@ -1,3 +1,5 @@ +/* This file is code generated. */ + import SwiftUI import UIKit @_exported import SDDSThemeCore @@ -10,8 +12,8 @@ public extension ShadowToken { width: 0, height: 5 ), - opacity: 0,5, - radius: 1,5 + opacity: 0.5, + radius: 1.5 ) } static var downHardM: Self { @@ -21,8 +23,8 @@ public extension ShadowToken { width: 0, height: 5 ), - opacity: 0,5, - radius: 1,5 + opacity: 0.5, + radius: 1.5 ) } static var downHardS: Self { @@ -32,8 +34,8 @@ public extension ShadowToken { width: 0, height: 5 ), - opacity: 0,5, - radius: 1,5 + opacity: 0.5, + radius: 1.5 ) } static var downSoftL: Self { @@ -43,8 +45,8 @@ public extension ShadowToken { width: 0, height: 5 ), - opacity: 0,5, - radius: 1,5 + opacity: 0.5, + radius: 1.5 ) } static var downSoftM: Self { @@ -54,8 +56,8 @@ public extension ShadowToken { width: 0, height: 5 ), - opacity: 0,5, - radius: 1,5 + opacity: 0.5, + radius: 1.5 ) } static var downSoftS: Self { @@ -65,8 +67,8 @@ public extension ShadowToken { width: 0, height: 5 ), - opacity: 0,5, - radius: 1,5 + opacity: 0.5, + radius: 1.5 ) } static var upHardL: Self { @@ -76,8 +78,8 @@ public extension ShadowToken { width: 0, height: 5 ), - opacity: 0,5, - radius: 1,5 + opacity: 0.5, + radius: 1.5 ) } static var upHardM: Self { @@ -87,8 +89,8 @@ public extension ShadowToken { width: 0, height: 5 ), - opacity: 0,5, - radius: 1,5 + opacity: 0.5, + radius: 1.5 ) } static var upHardS: Self { @@ -98,8 +100,8 @@ public extension ShadowToken { width: 0, height: 5 ), - opacity: 0,5, - radius: 1,5 + opacity: 0.5, + radius: 1.5 ) } static var upSoftL: Self { @@ -109,8 +111,8 @@ public extension ShadowToken { width: 0, height: 5 ), - opacity: 0,5, - radius: 1,5 + opacity: 0.5, + radius: 1.5 ) } static var upSoftM: Self { @@ -120,8 +122,8 @@ public extension ShadowToken { width: 0, height: 5 ), - opacity: 0,5, - radius: 1,5 + opacity: 0.5, + radius: 1.5 ) } static var upSoftS: Self { @@ -131,8 +133,8 @@ public extension ShadowToken { width: 0, height: 5 ), - opacity: 0,5, - radius: 1,5 + opacity: 0.5, + radius: 1.5 ) } } diff --git a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/Shadows+Generated.swift b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/Shadows+Generated.swift index a0953ea42..5177b9ec7 100644 --- a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/Shadows+Generated.swift +++ b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/Shadows+Generated.swift @@ -1,3 +1,5 @@ +/* This file is code generated. */ + import SwiftUI import UIKit @_exported import SDDSThemeCore diff --git a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/ShapeToken+Generated.swift b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/ShapeToken+Generated.swift index a5e270888..8114897fc 100644 --- a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/ShapeToken+Generated.swift +++ b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/ShapeToken+Generated.swift @@ -1,3 +1,5 @@ +/* This file is code generated. */ + import SwiftUI import UIKit @_exported import SDDSThemeCore @@ -5,43 +7,43 @@ import UIKit public extension ShapeToken { static var roundL: Self { Self( - cornerRadius: 20, + cornerRadius: 16.0, kind: .round ) } static var roundM: Self { Self( - cornerRadius: 16, + cornerRadius: 12.0, kind: .round ) } static var roundS: Self { Self( - cornerRadius: 12, + cornerRadius: 8.0, kind: .round ) } static var roundXl: Self { Self( - cornerRadius: 24, + cornerRadius: 20.0, kind: .round ) } static var roundXs: Self { Self( - cornerRadius: 8, + cornerRadius: 6.0, kind: .round ) } static var roundXxl: Self { Self( - cornerRadius: 32, + cornerRadius: 32.0, kind: .round ) } static var roundXxs: Self { Self( - cornerRadius: 4, + cornerRadius: 4.0, kind: .round ) } diff --git a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/Shapes+Generated.swift b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/Shapes+Generated.swift index 326a7b6eb..cc9a8c5ea 100644 --- a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/Shapes+Generated.swift +++ b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/Shapes+Generated.swift @@ -1,3 +1,5 @@ +/* This file is code generated. */ + import SwiftUI import UIKit @_exported import SDDSThemeCore diff --git a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/Typographies+Generated.swift b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/Typographies+Generated.swift index 27a46bbbc..5b44e25f7 100644 --- a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/Typographies+Generated.swift +++ b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/Typographies+Generated.swift @@ -1,3 +1,5 @@ +/* This file is code generated. */ + import Foundation @_exported import SDDSThemeCore diff --git a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/TypographyToken+Generated.swift b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/TypographyToken+Generated.swift index d6e7e8cb8..009dae463 100644 --- a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/TypographyToken+Generated.swift +++ b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/Generated/TypographyToken+Generated.swift @@ -1,3 +1,5 @@ +/* This file is code generated. */ + import Foundation @_exported import SDDSThemeCore @@ -10,7 +12,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 18.0, lineHeight: 22.0, - kerning: -0,02 + kerning: -0.02 ), medium: TypographyToken( fontName: "SBSansText-Semibold", @@ -18,7 +20,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 18.0, lineHeight: 22.0, - kerning: -0,02 + kerning: -0.02 ), large: TypographyToken( fontName: "SBSansText-Semibold", @@ -26,7 +28,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 18.0, lineHeight: 22.0, - kerning: -0,02 + kerning: -0.02 ) ) } @@ -38,7 +40,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 18.0, lineHeight: 22.0, - kerning: -0,02 + kerning: -0.02 ), medium: TypographyToken( fontName: "SBSansText-Regular", @@ -46,7 +48,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 18.0, lineHeight: 22.0, - kerning: -0,02 + kerning: -0.02 ), large: TypographyToken( fontName: "SBSansText-Regular", @@ -54,7 +56,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 18.0, lineHeight: 22.0, - kerning: -0,02 + kerning: -0.02 ) ) } @@ -66,7 +68,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 16.0, lineHeight: 20.0, - kerning: -0,02 + kerning: -0.02 ), medium: TypographyToken( fontName: "SBSansText-Semibold", @@ -74,7 +76,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 16.0, lineHeight: 20.0, - kerning: -0,02 + kerning: -0.02 ), large: TypographyToken( fontName: "SBSansText-Semibold", @@ -82,7 +84,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 16.0, lineHeight: 20.0, - kerning: -0,02 + kerning: -0.02 ) ) } @@ -94,7 +96,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 16.0, lineHeight: 20.0, - kerning: -0,02 + kerning: -0.02 ), medium: TypographyToken( fontName: "SBSansText-Regular", @@ -102,7 +104,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 16.0, lineHeight: 20.0, - kerning: -0,02 + kerning: -0.02 ), large: TypographyToken( fontName: "SBSansText-Regular", @@ -110,7 +112,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 16.0, lineHeight: 20.0, - kerning: -0,02 + kerning: -0.02 ) ) } @@ -122,7 +124,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 14.0, lineHeight: 18.0, - kerning: -0,02 + kerning: -0.02 ), medium: TypographyToken( fontName: "SBSansText-Semibold", @@ -130,7 +132,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 14.0, lineHeight: 18.0, - kerning: -0,02 + kerning: -0.02 ), large: TypographyToken( fontName: "SBSansText-Semibold", @@ -138,7 +140,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 14.0, lineHeight: 18.0, - kerning: -0,02 + kerning: -0.02 ) ) } @@ -150,7 +152,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 14.0, lineHeight: 18.0, - kerning: -0,02 + kerning: -0.02 ), medium: TypographyToken( fontName: "SBSansText-Regular", @@ -158,7 +160,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 14.0, lineHeight: 18.0, - kerning: -0,02 + kerning: -0.02 ), large: TypographyToken( fontName: "SBSansText-Regular", @@ -166,7 +168,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 14.0, lineHeight: 18.0, - kerning: -0,02 + kerning: -0.02 ) ) } @@ -178,7 +180,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 12.0, lineHeight: 14.0, - kerning: -0,02 + kerning: -0.02 ), medium: TypographyToken( fontName: "SBSansText-Semibold", @@ -186,7 +188,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 12.0, lineHeight: 14.0, - kerning: -0,02 + kerning: -0.02 ), large: TypographyToken( fontName: "SBSansText-Semibold", @@ -194,7 +196,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 12.0, lineHeight: 14.0, - kerning: -0,02 + kerning: -0.02 ) ) } @@ -206,7 +208,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 12.0, lineHeight: 14.0, - kerning: -0,02 + kerning: -0.02 ), medium: TypographyToken( fontName: "SBSansText-Regular", @@ -214,7 +216,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 12.0, lineHeight: 14.0, - kerning: -0,02 + kerning: -0.02 ), large: TypographyToken( fontName: "SBSansText-Regular", @@ -222,7 +224,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 12.0, lineHeight: 14.0, - kerning: -0,02 + kerning: -0.02 ) ) } @@ -234,7 +236,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 10.0, lineHeight: 12.0, - kerning: -0,02 + kerning: -0.02 ), medium: TypographyToken( fontName: "SBSansText-Semibold", @@ -242,7 +244,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 10.0, lineHeight: 12.0, - kerning: -0,02 + kerning: -0.02 ), large: TypographyToken( fontName: "SBSansText-Semibold", @@ -250,7 +252,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 10.0, lineHeight: 12.0, - kerning: -0,02 + kerning: -0.02 ) ) } @@ -262,7 +264,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 10.0, lineHeight: 12.0, - kerning: -0,02 + kerning: -0.02 ), medium: TypographyToken( fontName: "SBSansText-Regular", @@ -270,7 +272,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 10.0, lineHeight: 12.0, - kerning: -0,02 + kerning: -0.02 ), large: TypographyToken( fontName: "SBSansText-Regular", @@ -278,7 +280,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 10.0, lineHeight: 12.0, - kerning: -0,02 + kerning: -0.02 ) ) } @@ -738,7 +740,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 18.0, lineHeight: 26.0, - kerning: -0,02 + kerning: -0.02 ), medium: TypographyToken( fontName: "SBSansText-Semibold", @@ -746,7 +748,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 20.0, lineHeight: 28.0, - kerning: -0,02 + kerning: -0.02 ), large: TypographyToken( fontName: "SBSansText-Semibold", @@ -754,7 +756,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 24.0, lineHeight: 32.0, - kerning: -0,02 + kerning: -0.02 ) ) } @@ -766,7 +768,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 18.0, lineHeight: 26.0, - kerning: -0,02 + kerning: -0.02 ), medium: TypographyToken( fontName: "SBSansText-Regular", @@ -774,7 +776,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 20.0, lineHeight: 28.0, - kerning: -0,02 + kerning: -0.02 ), large: TypographyToken( fontName: "SBSansText-Regular", @@ -782,7 +784,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 24.0, lineHeight: 32.0, - kerning: -0,02 + kerning: -0.02 ) ) } @@ -794,7 +796,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 16.0, lineHeight: 24.0, - kerning: -0,02 + kerning: -0.02 ), medium: TypographyToken( fontName: "SBSansText-Semibold", @@ -802,7 +804,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 16.0, lineHeight: 24.0, - kerning: -0,02 + kerning: -0.02 ), large: TypographyToken( fontName: "SBSansText-Semibold", @@ -810,7 +812,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 18.0, lineHeight: 26.0, - kerning: -0,02 + kerning: -0.02 ) ) } @@ -822,7 +824,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 16.0, lineHeight: 24.0, - kerning: -0,02 + kerning: -0.02 ), medium: TypographyToken( fontName: "SBSansText-Regular", @@ -830,7 +832,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 16.0, lineHeight: 24.0, - kerning: -0,02 + kerning: -0.02 ), large: TypographyToken( fontName: "SBSansText-Regular", @@ -838,7 +840,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 18.0, lineHeight: 26.0, - kerning: -0,02 + kerning: -0.02 ) ) } @@ -850,7 +852,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 14.0, lineHeight: 20.0, - kerning: -0,02 + kerning: -0.02 ), medium: TypographyToken( fontName: "SBSansText-Semibold", @@ -858,7 +860,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 14.0, lineHeight: 20.0, - kerning: -0,02 + kerning: -0.02 ), large: TypographyToken( fontName: "SBSansText-Semibold", @@ -866,7 +868,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 14.0, lineHeight: 20.0, - kerning: -0,02 + kerning: -0.02 ) ) } @@ -878,7 +880,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 14.0, lineHeight: 20.0, - kerning: -0,02 + kerning: -0.02 ), medium: TypographyToken( fontName: "SBSansText-Regular", @@ -886,7 +888,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 14.0, lineHeight: 20.0, - kerning: -0,02 + kerning: -0.02 ), large: TypographyToken( fontName: "SBSansText-Regular", @@ -894,7 +896,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 14.0, lineHeight: 20.0, - kerning: -0,02 + kerning: -0.02 ) ) } @@ -906,7 +908,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 12.0, lineHeight: 16.0, - kerning: -0,02 + kerning: -0.02 ), medium: TypographyToken( fontName: "SBSansText-Semibold", @@ -914,7 +916,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 12.0, lineHeight: 16.0, - kerning: -0,02 + kerning: -0.02 ), large: TypographyToken( fontName: "SBSansText-Semibold", @@ -922,7 +924,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 12.0, lineHeight: 16.0, - kerning: -0,02 + kerning: -0.02 ) ) } @@ -934,7 +936,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 12.0, lineHeight: 16.0, - kerning: -0,02 + kerning: -0.02 ), medium: TypographyToken( fontName: "SBSansText-Regular", @@ -942,7 +944,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 12.0, lineHeight: 16.0, - kerning: -0,02 + kerning: -0.02 ), large: TypographyToken( fontName: "SBSansText-Regular", @@ -950,7 +952,7 @@ public extension AdaptiveTypographyToken { style: .normal, size: 12.0, lineHeight: 16.0, - kerning: -0,02 + kerning: -0.02 ) ) } diff --git a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/BasicButton+ColorVariations.swift b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/BasicButton+ColorVariations.swift new file mode 100644 index 000000000..05fe99fc9 --- /dev/null +++ b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/BasicButton+ColorVariations.swift @@ -0,0 +1,447 @@ +/* This file is code generated. */ + +import Foundation +import SDDSComponents +import SDDSThemeCore + +public extension ButtonAppearanceVariation { + var accent: Self { + .init( + appearance: appearance.applyColorVariation(variation: BasicButton.accent.appearance) + ) + } + var black: Self { + .init( + appearance: appearance.applyColorVariation(variation: BasicButton.black.appearance) + ) + } + var clear: Self { + .init( + appearance: appearance.applyColorVariation(variation: BasicButton.clear.appearance) + ) + } + var dark: Self { + .init( + appearance: appearance.applyColorVariation(variation: BasicButton.dark.appearance) + ) + } + var `default`: Self { + .init( + appearance: appearance.applyColorVariation(variation: BasicButton.default.appearance) + ) + } + var negative: Self { + .init( + appearance: appearance.applyColorVariation(variation: BasicButton.negative.appearance) + ) + } + var positive: Self { + .init( + appearance: appearance.applyColorVariation(variation: BasicButton.positive.appearance) + ) + } + var secondary: Self { + .init( + appearance: appearance.applyColorVariation(variation: BasicButton.secondary.appearance) + ) + } + var warning: Self { + .init( + appearance: appearance.applyColorVariation(variation: BasicButton.warning.appearance) + ) + } + var white: Self { + .init( + appearance: appearance.applyColorVariation(variation: BasicButton.white.appearance) + ) + } +} + +public extension BasicButton { + static var accent: ButtonAppearanceVariation { + .init( + name: "accent", + appearance: ButtonAppearance( + titleTypography: BasicButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + subtitleTypography: BasicButton.subtitleTypography, + subtitleColor: ButtonColor( + defaultColor: .textOnDarkSecondary, + highlightedColor: .textOnDarkSecondaryActive, + hoveredColor: .textOnDarkSecondaryHover + ), + iconColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultAccent, + highlightedColor: .surfaceDefaultAccentActive, + hoveredColor: .surfaceDefaultAccentHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var black: ButtonAppearanceVariation { + .init( + name: "black", + appearance: ButtonAppearance( + titleTypography: BasicButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + subtitleTypography: BasicButton.subtitleTypography, + subtitleColor: ButtonColor( + defaultColor: .textOnDarkSecondary, + highlightedColor: .textOnDarkSecondaryActive, + hoveredColor: .textOnDarkSecondaryHover + ), + iconColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceOnLightSolidDefault, + highlightedColor: .surfaceOnLightSolidDefaultActive, + hoveredColor: .surfaceOnLightSolidDefaultHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var clear: ButtonAppearanceVariation { + .init( + name: "clear", + appearance: ButtonAppearance( + titleTypography: BasicButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + subtitleTypography: BasicButton.subtitleTypography, + subtitleColor: ButtonColor( + defaultColor: .textDefaultSecondary, + highlightedColor: .textDefaultSecondaryActive, + hoveredColor: .textDefaultSecondaryHover + ), + iconColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultClear, + highlightedColor: .surfaceDefaultClearActive, + hoveredColor: .surfaceDefaultClearHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0.06 + ) + ) + } + static var dark: ButtonAppearanceVariation { + .init( + name: "dark", + appearance: ButtonAppearance( + titleTypography: BasicButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + subtitleTypography: BasicButton.subtitleTypography, + subtitleColor: ButtonColor( + defaultColor: .textOnDarkSecondary, + highlightedColor: .textOnDarkSecondaryActive, + hoveredColor: .textOnDarkSecondaryHover + ), + iconColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceOnLightTransparentDeep, + highlightedColor: .surfaceOnLightTransparentDeepActive, + hoveredColor: .surfaceOnLightTransparentDeepHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var `default`: ButtonAppearanceVariation { + .init( + name: "default", + appearance: ButtonAppearance( + titleTypography: BasicButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textInversePrimary, + highlightedColor: .textInversePrimaryActive, + hoveredColor: .textInversePrimaryHover + ), + subtitleTypography: BasicButton.subtitleTypography, + subtitleColor: ButtonColor( + defaultColor: .textInverseSecondary, + highlightedColor: .textInverseSecondaryActive, + hoveredColor: .textInverseSecondaryHover + ), + iconColor: ButtonColor( + defaultColor: .textInversePrimary, + highlightedColor: .textInversePrimaryActive, + hoveredColor: .textInversePrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textInversePrimary, + highlightedColor: .textInversePrimaryActive, + hoveredColor: .textInversePrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultSolidDefault, + highlightedColor: .surfaceDefaultSolidDefaultActive, + hoveredColor: .surfaceDefaultSolidDefaultHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var negative: ButtonAppearanceVariation { + .init( + name: "negative", + appearance: ButtonAppearance( + titleTypography: BasicButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + subtitleTypography: BasicButton.subtitleTypography, + subtitleColor: ButtonColor( + defaultColor: .textOnDarkSecondary, + highlightedColor: .textOnDarkSecondaryActive, + hoveredColor: .textOnDarkSecondaryHover + ), + iconColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultNegative, + highlightedColor: .surfaceDefaultNegativeActive, + hoveredColor: .surfaceDefaultNegativeHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var positive: ButtonAppearanceVariation { + .init( + name: "positive", + appearance: ButtonAppearance( + titleTypography: BasicButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + subtitleTypography: BasicButton.subtitleTypography, + subtitleColor: ButtonColor( + defaultColor: .textOnDarkSecondary, + highlightedColor: .textOnDarkSecondaryActive, + hoveredColor: .textOnDarkSecondaryHover + ), + iconColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultPositive, + highlightedColor: .surfaceDefaultPositiveActive, + hoveredColor: .surfaceDefaultPositiveHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var secondary: ButtonAppearanceVariation { + .init( + name: "secondary", + appearance: ButtonAppearance( + titleTypography: BasicButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + subtitleTypography: BasicButton.subtitleTypography, + subtitleColor: ButtonColor( + defaultColor: .textDefaultSecondary, + highlightedColor: .textDefaultSecondaryActive, + hoveredColor: .textDefaultSecondaryHover + ), + iconColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultTransparentSecondary, + highlightedColor: .surfaceDefaultTransparentSecondaryActive, + hoveredColor: .surfaceDefaultTransparentSecondaryHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var warning: ButtonAppearanceVariation { + .init( + name: "warning", + appearance: ButtonAppearance( + titleTypography: BasicButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + subtitleTypography: BasicButton.subtitleTypography, + subtitleColor: ButtonColor( + defaultColor: .textOnDarkSecondary, + highlightedColor: .textOnDarkSecondaryActive, + hoveredColor: .textOnDarkSecondaryHover + ), + iconColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultWarning, + highlightedColor: .surfaceDefaultWarningActive, + hoveredColor: .surfaceDefaultWarningHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var white: ButtonAppearanceVariation { + .init( + name: "white", + appearance: ButtonAppearance( + titleTypography: BasicButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textOnLightPrimary, + highlightedColor: .textOnLightPrimaryActive, + hoveredColor: .textOnLightPrimaryHover + ), + subtitleTypography: BasicButton.subtitleTypography, + subtitleColor: ButtonColor( + defaultColor: .textOnLightSecondary, + highlightedColor: .textOnLightSecondaryActive, + hoveredColor: .textOnLightSecondaryHover + ), + iconColor: ButtonColor( + defaultColor: .textOnLightPrimary, + highlightedColor: .textOnLightPrimaryActive, + hoveredColor: .textOnLightPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnLightPrimary, + highlightedColor: .textOnLightPrimaryActive, + hoveredColor: .textOnLightPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceOnLightSolidDefault, + highlightedColor: .surfaceOnLightSolidDefaultActive, + hoveredColor: .surfaceOnLightSolidDefaultHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + + static var all: [ButtonAppearanceVariation] { + [ + + BasicButton.accent, + + BasicButton.black, + + BasicButton.clear, + + BasicButton.dark, + + BasicButton.`default`, + + BasicButton.negative, + + BasicButton.positive, + + BasicButton.secondary, + + BasicButton.warning, + + BasicButton.white + + ] + } +} diff --git a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/BasicButton+SizeVariations.swift b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/BasicButton+SizeVariations.swift new file mode 100644 index 000000000..468cc5c89 --- /dev/null +++ b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/BasicButton+SizeVariations.swift @@ -0,0 +1,56 @@ +/* This file is code generated. */ + +import Foundation +import SDDSComponents +import SDDSThemeCore + +// MARK: - Size +public extension ButtonAppearanceVariation { + var large: Self { + .init( + appearance: appearance + .size(BasicButtonSize.large) + .titleTypography(BasicButton.titleTypography) + .subtitleTypography(BasicButton.subtitleTypography) + ) + } + var medium: Self { + .init( + appearance: appearance + .size(BasicButtonSize.medium) + .titleTypography(BasicButton.titleTypography) + .subtitleTypography(BasicButton.subtitleTypography) + ) + } + var small: Self { + .init( + appearance: appearance + .size(BasicButtonSize.small) + .titleTypography(BasicButton.titleTypography) + .subtitleTypography(BasicButton.subtitleTypography) + ) + } + var extraSmall: Self { + .init( + appearance: appearance + .size(BasicButtonSize.extraSmall) + .titleTypography(BasicButton.titleTypography) + .subtitleTypography(BasicButton.subtitleTypography) + ) + } +} + +public extension BasicButton { + static var large: ButtonAppearanceVariation { + return ButtonAppearanceVariation().large + } + static var medium: ButtonAppearanceVariation { + return ButtonAppearanceVariation().medium + } + static var small: ButtonAppearanceVariation { + return ButtonAppearanceVariation().small + } + static var extraSmall: ButtonAppearanceVariation { + return ButtonAppearanceVariation().extraSmall + } +} diff --git a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/BasicButton+Typography.swift b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/BasicButton+Typography.swift new file mode 100644 index 000000000..ea694003b --- /dev/null +++ b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/BasicButton+Typography.swift @@ -0,0 +1,26 @@ +/* This file is code generated. */ + +import Foundation +import SDDSComponents +import SDDSThemeCore + +public extension BasicButton { + static var titleTypography: TypographyConfiguration { + BasicButtonTypography( + large: AdaptiveTypographyToken.bodyLBold.typography, + medium: AdaptiveTypographyToken.bodyMBold.typography, + small: AdaptiveTypographyToken.bodySBold.typography, + extraSmall: AdaptiveTypographyToken.bodyXsBold.typography + ) + .asContainer + } + static var subtitleTypography: TypographyConfiguration { + BasicButtonTypography( + large: AdaptiveTypographyToken.bodyLBold.typography, + medium: AdaptiveTypographyToken.bodyMBold.typography, + small: AdaptiveTypographyToken.bodySBold.typography, + extraSmall: AdaptiveTypographyToken.bodyXsBold.typography + ) + .asContainer + } +} diff --git a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/BasicButtonSize+ButtonSizeConfiguration.swift b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/BasicButtonSize+ButtonSizeConfiguration.swift new file mode 100644 index 000000000..d02fa4bc4 --- /dev/null +++ b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/BasicButtonSize+ButtonSizeConfiguration.swift @@ -0,0 +1,82 @@ +/* This file is code generated. */ + +import Foundation +import SDDSComponents +import SwiftUI + +public enum BasicButtonSize: String, CaseIterable { + case large + case medium + case small + case extraSmall +} + +extension BasicButtonSize: ButtonSizeConfiguration { + + public var height: CGFloat { + switch self { + case .large: return 56 + case .medium: return 48 + case .small: return 40 + case .extraSmall: return 32 + } + } + + public var cornerRadius: CGFloat { + switch self { + case .large: return ShapeToken.roundL.cornerRadius - 2.0 + case .medium: return ShapeToken.roundM.cornerRadius + case .small: return ShapeToken.roundM.cornerRadius - 2.0 + case .extraSmall: return ShapeToken.roundS.cornerRadius + } + } + + public var paddings: EdgeInsets { + switch self { + case .large: return EdgeInsets(top: 0, leading: 24, bottom: 0, trailing: 24) + case .medium: return EdgeInsets(top: 0, leading: 20, bottom: 0, trailing: 20) + case .small: return EdgeInsets(top: 0, leading: 16, bottom: 0, trailing: 16) + case .extraSmall: return EdgeInsets(top: 0, leading: 12, bottom: 0, trailing: 12) + } + } + + public var iconSize: CGSize { + switch self { + case .large: return CGSize(width: 24, height: 24) + case .medium: return CGSize(width: 24, height: 24) + case .small: return CGSize(width: 24, height: 24) + case .extraSmall: return CGSize(width: 16, height: 16) + } + } + + public var spinnerSize: CGSize { + switch self { + case .large: return CGSize(width: 22, height: 22) + case .medium: return CGSize(width: 22, height: 22) + case .small: return CGSize(width: 22, height: 22) + case .extraSmall: return CGSize(width: 16, height: 16) + } + } + + public var titleHorizontalGap: CGFloat { + switch self { + case .large: return 4 + case .medium: return 4 + case .small: return 4 + case .extraSmall: return 2 + } + } + + public var iconHorizontalGap: CGFloat { + switch self { + case .large: return 8 + case .medium: return 6 + case .small: return 4 + case .extraSmall: return 4 + } + } + + public var debugDescription: String { + return "BasicButtonSize" + } +} diff --git a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/BasicButtonTypography.swift b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/BasicButtonTypography.swift new file mode 100644 index 000000000..3e9c95d25 --- /dev/null +++ b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/BasicButtonTypography.swift @@ -0,0 +1,39 @@ +/* This file is code generated. */ + +import Foundation +import SDDSComponents + +public struct BasicButtonTypography: GeneralTypographyConfiguration { + typealias S = ButtonSizeConfiguration + let large: TypographyToken? + let medium: TypographyToken? + let small: TypographyToken? + let extraSmall: TypographyToken? + init( + large: TypographyToken?, + medium: TypographyToken?, + small: TypographyToken?, + extraSmall: TypographyToken? + ) { + self.large = large + self.medium = medium + self.small = small + self.extraSmall = extraSmall + } + /** + Возвращает типографику для заданного размера кнопки. + + - Parameter size: Размер кнопки. + - Returns: Типографика для заданного размера кнопки или nil, если не задана. + */ + public func typography(with size: ButtonSizeConfiguration) -> TypographyToken? { + switch size as? BasicButtonSize { + case .large: return large + case .medium: return medium + case .small: return small + case .extraSmall: return extraSmall + case .none: + return nil + } + } +} diff --git a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/IconButton+ColorVariations.swift b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/IconButton+ColorVariations.swift new file mode 100644 index 000000000..93f0047de --- /dev/null +++ b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/IconButton+ColorVariations.swift @@ -0,0 +1,427 @@ +/* This file is code generated. */ + +// MARK: - Colors +import Foundation +import SDDSComponents +import SDDSThemeCore + +public extension ButtonAppearanceVariation { + var accent: Self { + .init( + appearance: appearance.applyColorVariation(variation: IconButton.accent.appearance) + ) + } + var black: Self { + .init( + appearance: appearance.applyColorVariation(variation: IconButton.black.appearance) + ) + } + var clear: Self { + .init( + appearance: appearance.applyColorVariation(variation: IconButton.clear.appearance) + ) + } + var dark: Self { + .init( + appearance: appearance.applyColorVariation(variation: IconButton.dark.appearance) + ) + } + var `default`: Self { + .init( + appearance: appearance.applyColorVariation(variation: IconButton.`default`.appearance) + ) + } + var negative: Self { + .init( + appearance: appearance.applyColorVariation(variation: IconButton.negative.appearance) + ) + } + var positive: Self { + .init( + appearance: appearance.applyColorVariation(variation: IconButton.positive.appearance) + ) + } + var secondary: Self { + .init( + appearance: appearance.applyColorVariation(variation: IconButton.secondary.appearance) + ) + } + var warning: Self { + .init( + appearance: appearance.applyColorVariation(variation: IconButton.warning.appearance) + ) + } + var white: Self { + .init( + appearance: appearance.applyColorVariation(variation: IconButton.white.appearance) + ) + } +} + +public extension IconButton { + static var accent: ButtonAppearanceVariation { + .init( + name: "accent", + appearance: ButtonAppearance( + titleColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultAccent, + highlightedColor: .surfaceDefaultAccentActive, + hoveredColor: .surfaceDefaultAccentHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var black: ButtonAppearanceVariation { + .init( + name: "black", + appearance: ButtonAppearance( + titleColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceOnLightSolidDefault, + highlightedColor: .surfaceOnLightSolidDefaultActive, + hoveredColor: .surfaceOnLightSolidDefaultHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var clear: ButtonAppearanceVariation { + .init( + name: "clear", + appearance: ButtonAppearance( + titleColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultClear, + highlightedColor: .surfaceDefaultClearActive, + hoveredColor: .surfaceDefaultClearHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var dark: ButtonAppearanceVariation { + .init( + name: "dark", + appearance: ButtonAppearance( + titleColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceOnLightTransparentDeep, + highlightedColor: .surfaceOnLightTransparentDeepActive, + hoveredColor: .surfaceOnLightTransparentDeepHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var `default`: ButtonAppearanceVariation { + .init( + name: "default", + appearance: ButtonAppearance( + titleColor: ButtonColor( + defaultColor: .textInversePrimary, + highlightedColor: .textInversePrimaryActive, + hoveredColor: .textInversePrimaryHover + ), + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textInversePrimary, + highlightedColor: .textInversePrimaryActive, + hoveredColor: .textInversePrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textInversePrimary, + highlightedColor: .textInversePrimaryActive, + hoveredColor: .textInversePrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultSolidDefault, + highlightedColor: .surfaceDefaultSolidDefaultActive, + hoveredColor: .surfaceDefaultSolidDefaultHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var negative: ButtonAppearanceVariation { + .init( + name: "negative", + appearance: ButtonAppearance( + titleColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultNegative, + highlightedColor: .surfaceDefaultNegativeActive, + hoveredColor: .surfaceDefaultNegativeHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var positive: ButtonAppearanceVariation { + .init( + name: "positive", + appearance: ButtonAppearance( + titleColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultPositive, + highlightedColor: .surfaceDefaultPositiveActive, + hoveredColor: .surfaceDefaultPositiveHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var secondary: ButtonAppearanceVariation { + .init( + name: "secondary", + appearance: ButtonAppearance( + titleColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultTransparentSecondary, + highlightedColor: .surfaceDefaultTransparentSecondaryActive, + hoveredColor: .surfaceDefaultTransparentSecondaryHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var warning: ButtonAppearanceVariation { + .init( + name: "warning", + appearance: ButtonAppearance( + titleColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultWarning, + highlightedColor: .surfaceDefaultWarningActive, + hoveredColor: .surfaceDefaultWarningHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var white: ButtonAppearanceVariation { + .init( + name: "white", + appearance: ButtonAppearance( + titleColor: ButtonColor( + defaultColor: .textOnLightPrimary, + highlightedColor: .textOnLightPrimaryActive, + hoveredColor: .textOnLightPrimaryHover + ), + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textOnLightPrimary, + highlightedColor: .textOnLightPrimaryActive, + hoveredColor: .textOnLightPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnLightPrimary, + highlightedColor: .textOnLightPrimaryActive, + hoveredColor: .textOnLightPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceOnLightSolidDefault, + highlightedColor: .surfaceOnLightSolidDefaultActive, + hoveredColor: .surfaceOnLightSolidDefaultHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var all: [ButtonAppearanceVariation] { + [ + + IconButton.accent, + + IconButton.black, + + IconButton.clear, + + IconButton.dark, + + IconButton.`default`, + + IconButton.negative, + + IconButton.positive, + + IconButton.secondary, + + IconButton.warning, + + IconButton.white + + ] + } +} diff --git a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/IconButton+SizeVariations.swift b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/IconButton+SizeVariations.swift new file mode 100644 index 000000000..9d6df4723 --- /dev/null +++ b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/IconButton+SizeVariations.swift @@ -0,0 +1,48 @@ +/* This file is code generated. */ + +import Foundation +import SDDSComponents +import SDDSThemeCore + +// MARK: - Size +public extension ButtonAppearanceVariation { + var large: Self { + .init( + appearance: appearance + .size(IconButtonSize.large) + ) + } + var medium: Self { + .init( + appearance: appearance + .size(IconButtonSize.medium) + ) + } + var small: Self { + .init( + appearance: appearance + .size(IconButtonSize.small) + ) + } + var extraSmall: Self { + .init( + appearance: appearance + .size(IconButtonSize.extraSmall) + ) + } +} + +public extension IconButton { + static var large: ButtonAppearanceVariation { + return ButtonAppearanceVariation().large + } + static var medium: ButtonAppearanceVariation { + return ButtonAppearanceVariation().medium + } + static var small: ButtonAppearanceVariation { + return ButtonAppearanceVariation().small + } + static var extraSmall: ButtonAppearanceVariation { + return ButtonAppearanceVariation().extraSmall + } +} diff --git a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/IconButtonSize+ButtonSizeConfiguration.swift b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/IconButtonSize+ButtonSizeConfiguration.swift new file mode 100644 index 000000000..2ff196f20 --- /dev/null +++ b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/IconButtonSize+ButtonSizeConfiguration.swift @@ -0,0 +1,82 @@ +/* This file is code generated. */ + +import Foundation +import SDDSComponents +import SwiftUI + +public enum IconButtonSize: String, CaseIterable { + case large + case medium + case small + case extraSmall +} + +extension IconButtonSize: ButtonSizeConfiguration { + + public var height: CGFloat { + switch self { + case .large: return 56 + case .medium: return 48 + case .small: return 40 + case .extraSmall: return 32 + } + } + + public var cornerRadius: CGFloat { + switch self { + case .large: return ShapeToken.roundL.cornerRadius - 2.0 + case .medium: return ShapeToken.roundM.cornerRadius + case .small: return ShapeToken.roundM.cornerRadius - 2.0 + case .extraSmall: return ShapeToken.roundS.cornerRadius + } + } + + public var paddings: EdgeInsets { + switch self { + case .large: return EdgeInsets(top: 0, leading: 16, bottom: 0, trailing: 16) + case .medium: return EdgeInsets(top: 0, leading: 12, bottom: 0, trailing: 12) + case .small: return EdgeInsets(top: 0, leading: 8, bottom: 0, trailing: 8) + case .extraSmall: return EdgeInsets(top: 0, leading: 8, bottom: 0, trailing: 8) + } + } + + public var iconSize: CGSize { + switch self { + case .large: return CGSize(width: 24, height: 24) + case .medium: return CGSize(width: 24, height: 24) + case .small: return CGSize(width: 24, height: 24) + case .extraSmall: return CGSize(width: 16, height: 16) + } + } + + public var spinnerSize: CGSize { + switch self { + case .large: return CGSize(width: 22, height: 22) + case .medium: return CGSize(width: 22, height: 22) + case .small: return CGSize(width: 22, height: 22) + case .extraSmall: return CGSize(width: 16, height: 16) + } + } + + public var titleHorizontalGap: CGFloat { + switch self { + case .large: return 0 + case .medium: return 0 + case .small: return 0 + case .extraSmall: return 0 + } + } + + public var iconHorizontalGap: CGFloat { + switch self { + case .large: return 0 + case .medium: return 0 + case .small: return 0 + case .extraSmall: return 0 + } + } + + public var debugDescription: String { + return "IconButtonSize" + } +} diff --git a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/LinkButton+ColorVariations.swift b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/LinkButton+ColorVariations.swift new file mode 100644 index 000000000..b5eeb2678 --- /dev/null +++ b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/LinkButton+ColorVariations.swift @@ -0,0 +1,274 @@ +/* This file is code generated. */ + +import Foundation +import SDDSComponents +import SDDSThemeCore + +public extension ButtonAppearanceVariation { + var accent: Self { + .init( + appearance: appearance.applyColorVariation(variation: LinkButton.accent.appearance) + ) + } + var `default`: Self { + .init( + appearance: appearance.applyColorVariation(variation: LinkButton.`default`.appearance) + ) + } + var negative: Self { + .init( + appearance: appearance.applyColorVariation(variation: LinkButton.negative.appearance) + ) + } + var positive: Self { + .init( + appearance: appearance.applyColorVariation(variation: LinkButton.positive.appearance) + ) + } + var secondary: Self { + .init( + appearance: appearance.applyColorVariation(variation: LinkButton.secondary.appearance) + ) + } + var warning: Self { + .init( + appearance: appearance.applyColorVariation(variation: LinkButton.warning.appearance) + ) + } +} + +public extension LinkButton { + static var accent: ButtonAppearanceVariation { + .init( + name: "accent", + appearance: ButtonAppearance( + titleTypography: LinkButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textDefaultAccent, + highlightedColor: .textDefaultAccentActive, + hoveredColor: .textDefaultAccentHover + ), + subtitleTypography: .default, + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textDefaultAccent, + highlightedColor: .textDefaultAccentActive, + hoveredColor: .textDefaultAccentHover + ), + spinnerColor: ButtonColor( + defaultColor: .textDefaultAccent, + highlightedColor: .textDefaultAccentActive, + hoveredColor: .textDefaultAccentHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultClear, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + disabledAlpha: 0.4, + loadingAlpha: 0.06 + ) + ) + } + static var `default`: ButtonAppearanceVariation { + .init( + name: "default", + appearance: ButtonAppearance( + titleTypography: LinkButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + subtitleTypography: .default, + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultClear, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + disabledAlpha: 0.4, + loadingAlpha: 0.06 + ) + ) + } + static var negative: ButtonAppearanceVariation { + .init( + name: "negative", + appearance: ButtonAppearance( + titleTypography: LinkButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textDefaultNegative, + highlightedColor: .textDefaultNegativeActive, + hoveredColor: .textDefaultNegativeHover + ), + subtitleTypography: .default, + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textDefaultNegative, + highlightedColor: .textDefaultNegativeActive, + hoveredColor: .textDefaultNegativeHover + ), + spinnerColor: ButtonColor( + defaultColor: .textDefaultNegative, + highlightedColor: .textDefaultNegativeActive, + hoveredColor: .textDefaultNegativeHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultClear, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + disabledAlpha: 0.4, + loadingAlpha: 0.06 + ) + ) + } + static var positive: ButtonAppearanceVariation { + .init( + name: "positive", + appearance: ButtonAppearance( + titleTypography: LinkButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textDefaultPositive, + highlightedColor: .textDefaultPositiveActive, + hoveredColor: .textDefaultPositiveHover + ), + subtitleTypography: .default, + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textDefaultPositive, + highlightedColor: .textDefaultPositiveActive, + hoveredColor: .textDefaultPositiveHover + ), + spinnerColor: ButtonColor( + defaultColor: .textDefaultPositive, + highlightedColor: .textDefaultPositiveActive, + hoveredColor: .textDefaultPositiveHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultClear, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + disabledAlpha: 0.4, + loadingAlpha: 0.06 + ) + ) + } + static var secondary: ButtonAppearanceVariation { + .init( + name: "secondary", + appearance: ButtonAppearance( + titleTypography: LinkButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textDefaultSecondary, + highlightedColor: .textDefaultSecondaryActive, + hoveredColor: .textDefaultSecondaryHover + ), + subtitleTypography: .default, + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textDefaultSecondary, + highlightedColor: .textDefaultSecondaryActive, + hoveredColor: .textDefaultSecondaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textDefaultSecondary, + highlightedColor: .textDefaultSecondaryActive, + hoveredColor: .textDefaultSecondaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultClear, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + disabledAlpha: 0.4, + loadingAlpha: 0.06 + ) + ) + } + static var warning: ButtonAppearanceVariation { + .init( + name: "warning", + appearance: ButtonAppearance( + titleTypography: LinkButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textDefaultWarning, + highlightedColor: .textDefaultWarningActive, + hoveredColor: .textDefaultWarningHover + ), + subtitleTypography: .default, + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textDefaultWarning, + highlightedColor: .textDefaultWarningActive, + hoveredColor: .textDefaultWarningHover + ), + spinnerColor: ButtonColor( + defaultColor: .textDefaultWarning, + highlightedColor: .textDefaultWarningActive, + hoveredColor: .textDefaultWarningHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultClear, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + disabledAlpha: 0.4, + loadingAlpha: 0.06 + ) + ) + } + static var all: [ButtonAppearanceVariation] { + [ + + LinkButton.accent, + + LinkButton.`default`, + + LinkButton.negative, + + LinkButton.positive, + + LinkButton.secondary, + + LinkButton.warning + + ] + } +} diff --git a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/LinkButton+SizeVariations.swift b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/LinkButton+SizeVariations.swift new file mode 100644 index 000000000..b5d423bc8 --- /dev/null +++ b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/LinkButton+SizeVariations.swift @@ -0,0 +1,52 @@ +/* This file is code generated. */ + +import Foundation +import SDDSComponents +import SDDSThemeCore + +// MARK: - Size +public extension ButtonAppearanceVariation { + var large: Self { + .init( + appearance: appearance + .size(LinkButtonSize.large) + .titleTypography(LinkButton.titleTypography) + ) + } + var medium: Self { + .init( + appearance: appearance + .size(LinkButtonSize.medium) + .titleTypography(LinkButton.titleTypography) + ) + } + var small: Self { + .init( + appearance: appearance + .size(LinkButtonSize.small) + .titleTypography(LinkButton.titleTypography) + ) + } + var extraSmall: Self { + .init( + appearance: appearance + .size(LinkButtonSize.extraSmall) + .titleTypography(LinkButton.titleTypography) + ) + } +} + +public extension LinkButton { + static var large: ButtonAppearanceVariation { + return ButtonAppearanceVariation().large + } + static var medium: ButtonAppearanceVariation { + return ButtonAppearanceVariation().medium + } + static var small: ButtonAppearanceVariation { + return ButtonAppearanceVariation().small + } + static var extraSmall: ButtonAppearanceVariation { + return ButtonAppearanceVariation().extraSmall + } +} diff --git a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/LinkButton+Typography.swift b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/LinkButton+Typography.swift new file mode 100644 index 000000000..54c6f1430 --- /dev/null +++ b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/LinkButton+Typography.swift @@ -0,0 +1,17 @@ +/* This file is code generated. */ + +import Foundation +import SDDSComponents +import SDDSThemeCore + +public extension LinkButton { + static var titleTypography: TypographyConfiguration { + LinkButtonTypography( + large: AdaptiveTypographyToken.bodyLBold.typography, + medium: AdaptiveTypographyToken.bodyMBold.typography, + small: AdaptiveTypographyToken.bodySBold.typography, + extraSmall: AdaptiveTypographyToken.bodyXsBold.typography + ) + .asContainer + } +} diff --git a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/LinkButtonSize+ButtonSizeConfiguration.swift b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/LinkButtonSize+ButtonSizeConfiguration.swift new file mode 100644 index 000000000..24244b1cc --- /dev/null +++ b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/LinkButtonSize+ButtonSizeConfiguration.swift @@ -0,0 +1,77 @@ +/* This file is code generated. */ + +import Foundation +import SDDSComponents +import SwiftUI + +public enum LinkButtonSize: String, CaseIterable { + case large + case medium + case small + case extraSmall +} + +extension LinkButtonSize: ButtonSizeConfiguration { + + public var height: CGFloat { + switch self { + case .large: return 56 + case .medium: return 48 + case .small: return 40 + case .extraSmall: return 32 + } + } + + public var cornerRadius: CGFloat { + 0 + } + + public var paddings: EdgeInsets { + switch self { + case .large: return EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0) + case .medium: return EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0) + case .small: return EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0) + case .extraSmall: return EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0) + } + } + + public var iconSize: CGSize { + switch self { + case .large: return CGSize(width: 24, height: 24) + case .medium: return CGSize(width: 24, height: 24) + case .small: return CGSize(width: 24, height: 24) + case .extraSmall: return CGSize(width: 16, height: 16) + } + } + + public var spinnerSize: CGSize { + switch self { + case .large: return CGSize(width: 22, height: 22) + case .medium: return CGSize(width: 22, height: 22) + case .small: return CGSize(width: 22, height: 22) + case .extraSmall: return CGSize(width: 16, height: 16) + } + } + + public var titleHorizontalGap: CGFloat { + switch self { + case .large: return 4 + case .medium: return 4 + case .small: return 4 + case .extraSmall: return 2 + } + } + + public var iconHorizontalGap: CGFloat { + switch self { + case .large: return 8 + case .medium: return 6 + case .small: return 4 + case .extraSmall: return 4 + } + } + + public var debugDescription: String { + return "LinkButtonSize" + } +} diff --git a/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/LinkButtonTypography.swift b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/LinkButtonTypography.swift new file mode 100644 index 000000000..0c340ea91 --- /dev/null +++ b/SDDSThemeBuilder/SDDSTheme/Sources/SDDSTheme/SDDSButton/LinkButtonTypography.swift @@ -0,0 +1,40 @@ +/* This file is code generated. */ + +import Foundation +import SDDSComponents + +public struct LinkButtonTypography: GeneralTypographyConfiguration { + typealias S = ButtonSizeConfiguration + let large: TypographyToken? + let medium: TypographyToken? + let small: TypographyToken? + let extraSmall: TypographyToken? + init( + large: TypographyToken?, + medium: TypographyToken?, + small: TypographyToken?, + extraSmall: TypographyToken? + ) { + self.large = large + self.medium = medium + self.small = small + self.extraSmall = extraSmall + } + /** + Возвращает типографику для заданного размера кнопки. + + - Parameter size: Размер кнопки. + - Returns: Типографика для заданного размера кнопки или nil, если не задана. + */ + public func typography(with size: ButtonSizeConfiguration) -> TypographyToken? { + switch size as? BasicButtonSize { + case .large: return large + case .medium: return medium + case .small: return small + case .extraSmall: return extraSmall + case .none: + return nil + } + } +} + diff --git a/SDDSThemeBuilder/SDDSThemeBuilder.xcodeproj/project.pbxproj b/SDDSThemeBuilder/SDDSThemeBuilder.xcodeproj/project.pbxproj index 24e05d2e5..669f705e5 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilder.xcodeproj/project.pbxproj +++ b/SDDSThemeBuilder/SDDSThemeBuilder.xcodeproj/project.pbxproj @@ -34,6 +34,7 @@ 24CB390C2BC95BDF00B32463 /* ArgumentParser in Frameworks */ = {isa = PBXBuildFile; productRef = 24CB390B2BC95BDF00B32463 /* ArgumentParser */; }; 24F383152BD7C11100AB8057 /* ColorContextBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24F383142BD7C11100AB8057 /* ColorContextBuilder.swift */; }; 24F3831B2BD7C8F300AB8057 /* PaletteAlias.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24F3831A2BD7C8F300AB8057 /* PaletteAlias.swift */; }; + 8106AC6A2D1093FC004348B7 /* GeneratedComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8106AC692D1093FC004348B7 /* GeneratedComponent.swift */; }; 810DE53D2C2AC5EB00F1C96F /* PrepareDirectoriesCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 810DE53C2C2AC5EB00F1C96F /* PrepareDirectoriesCommand.swift */; }; 810DE53E2C2AC77700F1C96F /* ShapeToken.stencil in Resources */ = {isa = PBXBuildFile; fileRef = 81E1EDB52BD2B4CD00F86AE1 /* ShapeToken.stencil */; }; 810DE53F2C2AC77700F1C96F /* ColorToken.stencil in Resources */ = {isa = PBXBuildFile; fileRef = 817539362BCE745600138866 /* ColorToken.stencil */; }; @@ -47,6 +48,22 @@ 810DE5482C2AC77800F1C96F /* Typographies.stencil in Resources */ = {isa = PBXBuildFile; fileRef = 243C1D182C05D3B200C17C0F /* Typographies.stencil */; }; 810DE5492C2AC77800F1C96F /* TypographyToken.stencil in Resources */ = {isa = PBXBuildFile; fileRef = 81E1EDF02BDA5E6200F86AE1 /* TypographyToken.stencil */; }; 810DE54A2C2AC7FB00F1C96F /* GradientToken.stencil in Resources */ = {isa = PBXBuildFile; fileRef = 810CB4872BF786C0002E718E /* GradientToken.stencil */; }; + 811D2DE82D1095A6001C0F48 /* SDDSComponents in Frameworks */ = {isa = PBXBuildFile; productRef = 811D2DE72D1095A6001C0F48 /* SDDSComponents */; }; + 811D2DEA2D1098A9001C0F48 /* BasicButtonTypography.stencil in Resources */ = {isa = PBXBuildFile; fileRef = 811D2DE92D1098A9001C0F48 /* BasicButtonTypography.stencil */; }; + 811D2DEE2D1099DA001C0F48 /* LinkButtonTypography.stencil in Resources */ = {isa = PBXBuildFile; fileRef = 811D2DED2D1099DA001C0F48 /* LinkButtonTypography.stencil */; }; + 811D2DFE2D109A92001C0F48 /* IconButtonSize+ButtonSizeConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2DF12D109A92001C0F48 /* IconButtonSize+ButtonSizeConfiguration.swift */; }; + 811D2DFF2D109A92001C0F48 /* BasicButton+ColorVariations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2DF22D109A92001C0F48 /* BasicButton+ColorVariations.swift */; }; + 811D2E002D109A92001C0F48 /* LinkButtonSize+ButtonSizeConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2DF32D109A92001C0F48 /* LinkButtonSize+ButtonSizeConfiguration.swift */; }; + 811D2E012D109A92001C0F48 /* IconButton+SizeVariations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2DF42D109A92001C0F48 /* IconButton+SizeVariations.swift */; }; + 811D2E022D109A92001C0F48 /* LinkButton+ColorVariations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2DF52D109A92001C0F48 /* LinkButton+ColorVariations.swift */; }; + 811D2E032D109A92001C0F48 /* BasicButton+SizeVariations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2DF62D109A92001C0F48 /* BasicButton+SizeVariations.swift */; }; + 811D2E042D109A92001C0F48 /* LinkButtonTypography.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2DF72D109A92001C0F48 /* LinkButtonTypography.swift */; }; + 811D2E052D109A92001C0F48 /* BasicButtonTypography.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2DF82D109A92001C0F48 /* BasicButtonTypography.swift */; }; + 811D2E062D109A92001C0F48 /* IconButton+ColorVariations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2DF92D109A92001C0F48 /* IconButton+ColorVariations.swift */; }; + 811D2E072D109A92001C0F48 /* BasicButton+Typography.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2DFA2D109A92001C0F48 /* BasicButton+Typography.swift */; }; + 811D2E082D109A92001C0F48 /* BasicButtonSize+ButtonSizeConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2DFB2D109A92001C0F48 /* BasicButtonSize+ButtonSizeConfiguration.swift */; }; + 811D2E092D109A92001C0F48 /* LinkButton+Typography.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2DFC2D109A92001C0F48 /* LinkButton+Typography.swift */; }; + 811D2E0A2D109A92001C0F48 /* LinkButton+SizeVariations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 811D2DFD2D109A92001C0F48 /* LinkButton+SizeVariations.swift */; }; 813340122C063151005AD84F /* TypographyContextBuilderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 813340112C063151005AD84F /* TypographyContextBuilderTests.swift */; }; 813340142C0631D0005AD84F /* ColorContextBuilderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 813340132C0631D0005AD84F /* ColorContextBuilderTests.swift */; }; 813340162C0632EA005AD84F /* palette.json in Resources */ = {isa = PBXBuildFile; fileRef = 813340152C0632EA005AD84F /* palette.json */; }; @@ -62,6 +79,9 @@ 8139EB482C20403C00D6A049 /* String+Hex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8139EB472C20403C00D6A049 /* String+Hex.swift */; }; 8139EB4A2C2040E300D6A049 /* ColorContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8139EB492C2040E300D6A049 /* ColorContext.swift */; }; 816E049D2C58DCDB00EE7A7F /* SDDSThemeCore in Frameworks */ = {isa = PBXBuildFile; productRef = 816E049C2C58DCDB00EE7A7F /* SDDSThemeCore */; }; + 81733A172D07066F0092608A /* BasicButtonSize+ButtonSizeConfiguration.stencil in Resources */ = {isa = PBXBuildFile; fileRef = 81733A142D07066F0092608A /* BasicButtonSize+ButtonSizeConfiguration.stencil */; }; + 81733A182D07066F0092608A /* IconButtonSize+ButtonSizeConfiguration.stencil in Resources */ = {isa = PBXBuildFile; fileRef = 81733A152D07066F0092608A /* IconButtonSize+ButtonSizeConfiguration.stencil */; }; + 81733A192D07066F0092608A /* LinkButtonSize+ButtonSizeConfiguration.stencil in Resources */ = {isa = PBXBuildFile; fileRef = 81733A162D07066F0092608A /* LinkButtonSize+ButtonSizeConfiguration.stencil */; }; 8175395C2BD0077300138866 /* SDDSThemeBuilderCore.docc in Sources */ = {isa = PBXBuildFile; fileRef = 8175395B2BD0077200138866 /* SDDSThemeBuilderCore.docc */; }; 817539622BD0077300138866 /* SDDSThemeBuilderCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 817539582BD0077200138866 /* SDDSThemeBuilderCore.framework */; }; 817539682BD0077300138866 /* SDDSThemeBuilderCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 8175395A2BD0077200138866 /* SDDSThemeBuilderCore.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -148,6 +168,16 @@ 8180A5DD2C131CCA00009AF5 /* SBSansDisplay-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 8180A5CE2C131CCA00009AF5 /* SBSansDisplay-Bold.otf */; }; 8181E3AA2BFB6A5F00D4012C /* GradientContextBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8181E3A92BFB6A5F00D4012C /* GradientContextBuilder.swift */; }; 8181E3BC2BFB9DFF00D4012C /* GradientContextBuilderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8181E3BB2BFB9DFF00D4012C /* GradientContextBuilderTests.swift */; }; + 818345702CFE2C240081113B /* GenerateSwiftCodeCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8183456F2CFE2C240081113B /* GenerateSwiftCodeCommand.swift */; }; + 818345792CFE30FF0081113B /* BasicButton+Typography.stencil in Resources */ = {isa = PBXBuildFile; fileRef = 818345712CFE30FE0081113B /* BasicButton+Typography.stencil */; }; + 8183457A2CFE30FF0081113B /* IconButton+ColorVariations.stencil in Resources */ = {isa = PBXBuildFile; fileRef = 818345722CFE30FE0081113B /* IconButton+ColorVariations.stencil */; }; + 8183457B2CFE30FF0081113B /* LinkButton+Typography.stencil in Resources */ = {isa = PBXBuildFile; fileRef = 818345732CFE30FE0081113B /* LinkButton+Typography.stencil */; }; + 8183457C2CFE30FF0081113B /* LinkButton+SizeVariations.stencil in Resources */ = {isa = PBXBuildFile; fileRef = 818345742CFE30FE0081113B /* LinkButton+SizeVariations.stencil */; }; + 8183457D2CFE30FF0081113B /* BasicButton+SizeVariations.stencil in Resources */ = {isa = PBXBuildFile; fileRef = 818345752CFE30FE0081113B /* BasicButton+SizeVariations.stencil */; }; + 8183457E2CFE30FF0081113B /* LinkButton+ColorVariations.stencil in Resources */ = {isa = PBXBuildFile; fileRef = 818345762CFE30FE0081113B /* LinkButton+ColorVariations.stencil */; }; + 8183457F2CFE30FF0081113B /* BasicButton+ColorVariations.stencil in Resources */ = {isa = PBXBuildFile; fileRef = 818345772CFE30FF0081113B /* BasicButton+ColorVariations.stencil */; }; + 818345802CFE30FF0081113B /* IconButton+SizeVariations.stencil in Resources */ = {isa = PBXBuildFile; fileRef = 818345782CFE30FF0081113B /* IconButton+SizeVariations.stencil */; }; + 818345822CFE3CC00081113B /* String+SizeKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 818345812CFE3CC00081113B /* String+SizeKey.swift */; }; 818C03BD2C43C0FE002C6D0A /* (null) in Sources */ = {isa = PBXBuildFile; }; 819B2A892BF23B1600688624 /* Font+FontName.swift in Sources */ = {isa = PBXBuildFile; fileRef = 819B2A882BF23B1600688624 /* Font+FontName.swift */; }; 819B2ACA2BF280F900688624 /* SDDSDemoApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 819B2AC92BF280F900688624 /* SDDSDemoApp.swift */; }; @@ -314,8 +344,24 @@ 24CB39172BC96CDE00B32463 /* DecodeCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DecodeCommand.swift; sourceTree = ""; }; 24F383142BD7C11100AB8057 /* ColorContextBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColorContextBuilder.swift; sourceTree = ""; }; 24F3831A2BD7C8F300AB8057 /* PaletteAlias.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaletteAlias.swift; sourceTree = ""; }; + 8106AC692D1093FC004348B7 /* GeneratedComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeneratedComponent.swift; sourceTree = ""; }; 810CB4872BF786C0002E718E /* GradientToken.stencil */ = {isa = PBXFileReference; lastKnownFileType = text; path = GradientToken.stencil; sourceTree = ""; }; 810DE53C2C2AC5EB00F1C96F /* PrepareDirectoriesCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrepareDirectoriesCommand.swift; sourceTree = ""; }; + 811D2DE92D1098A9001C0F48 /* BasicButtonTypography.stencil */ = {isa = PBXFileReference; lastKnownFileType = text; path = BasicButtonTypography.stencil; sourceTree = ""; }; + 811D2DED2D1099DA001C0F48 /* LinkButtonTypography.stencil */ = {isa = PBXFileReference; lastKnownFileType = text; path = LinkButtonTypography.stencil; sourceTree = ""; }; + 811D2DF12D109A92001C0F48 /* IconButtonSize+ButtonSizeConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "IconButtonSize+ButtonSizeConfiguration.swift"; sourceTree = ""; }; + 811D2DF22D109A92001C0F48 /* BasicButton+ColorVariations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "BasicButton+ColorVariations.swift"; sourceTree = ""; }; + 811D2DF32D109A92001C0F48 /* LinkButtonSize+ButtonSizeConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "LinkButtonSize+ButtonSizeConfiguration.swift"; sourceTree = ""; }; + 811D2DF42D109A92001C0F48 /* IconButton+SizeVariations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "IconButton+SizeVariations.swift"; sourceTree = ""; }; + 811D2DF52D109A92001C0F48 /* LinkButton+ColorVariations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "LinkButton+ColorVariations.swift"; sourceTree = ""; }; + 811D2DF62D109A92001C0F48 /* BasicButton+SizeVariations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "BasicButton+SizeVariations.swift"; sourceTree = ""; }; + 811D2DF72D109A92001C0F48 /* LinkButtonTypography.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LinkButtonTypography.swift; sourceTree = ""; }; + 811D2DF82D109A92001C0F48 /* BasicButtonTypography.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BasicButtonTypography.swift; sourceTree = ""; }; + 811D2DF92D109A92001C0F48 /* IconButton+ColorVariations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "IconButton+ColorVariations.swift"; sourceTree = ""; }; + 811D2DFA2D109A92001C0F48 /* BasicButton+Typography.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "BasicButton+Typography.swift"; sourceTree = ""; }; + 811D2DFB2D109A92001C0F48 /* BasicButtonSize+ButtonSizeConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "BasicButtonSize+ButtonSizeConfiguration.swift"; sourceTree = ""; }; + 811D2DFC2D109A92001C0F48 /* LinkButton+Typography.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "LinkButton+Typography.swift"; sourceTree = ""; }; + 811D2DFD2D109A92001C0F48 /* LinkButton+SizeVariations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "LinkButton+SizeVariations.swift"; sourceTree = ""; }; 813340112C063151005AD84F /* TypographyContextBuilderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TypographyContextBuilderTests.swift; sourceTree = ""; }; 813340132C0631D0005AD84F /* ColorContextBuilderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColorContextBuilderTests.swift; sourceTree = ""; }; 813340152C0632EA005AD84F /* palette.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = palette.json; sourceTree = ""; }; @@ -331,6 +377,9 @@ 8139EB492C2040E300D6A049 /* ColorContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColorContext.swift; sourceTree = ""; }; 814F71E92C58D4A0006385E4 /* Package.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Package.swift; sourceTree = ""; }; 816E04A22C58DD5600EE7A7F /* Package.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Package.swift; sourceTree = ""; }; + 81733A142D07066F0092608A /* BasicButtonSize+ButtonSizeConfiguration.stencil */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "BasicButtonSize+ButtonSizeConfiguration.stencil"; sourceTree = ""; }; + 81733A152D07066F0092608A /* IconButtonSize+ButtonSizeConfiguration.stencil */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "IconButtonSize+ButtonSizeConfiguration.stencil"; sourceTree = ""; }; + 81733A162D07066F0092608A /* LinkButtonSize+ButtonSizeConfiguration.stencil */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "LinkButtonSize+ButtonSizeConfiguration.stencil"; sourceTree = ""; }; 817539362BCE745600138866 /* ColorToken.stencil */ = {isa = PBXFileReference; lastKnownFileType = text; path = ColorToken.stencil; sourceTree = ""; }; 8175393C2BCE83EF00138866 /* CodeGenerationError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CodeGenerationError.swift; sourceTree = ""; }; 8175393E2BCE869C00138866 /* StencilTemplate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StencilTemplate.swift; sourceTree = ""; }; @@ -405,6 +454,16 @@ 8180A5CE2C131CCA00009AF5 /* SBSansDisplay-Bold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SBSansDisplay-Bold.otf"; sourceTree = ""; }; 8181E3A92BFB6A5F00D4012C /* GradientContextBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GradientContextBuilder.swift; sourceTree = ""; }; 8181E3BB2BFB9DFF00D4012C /* GradientContextBuilderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GradientContextBuilderTests.swift; sourceTree = ""; }; + 8183456F2CFE2C240081113B /* GenerateSwiftCodeCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GenerateSwiftCodeCommand.swift; sourceTree = ""; }; + 818345712CFE30FE0081113B /* BasicButton+Typography.stencil */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "BasicButton+Typography.stencil"; sourceTree = ""; }; + 818345722CFE30FE0081113B /* IconButton+ColorVariations.stencil */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "IconButton+ColorVariations.stencil"; sourceTree = ""; }; + 818345732CFE30FE0081113B /* LinkButton+Typography.stencil */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "LinkButton+Typography.stencil"; sourceTree = ""; }; + 818345742CFE30FE0081113B /* LinkButton+SizeVariations.stencil */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "LinkButton+SizeVariations.stencil"; sourceTree = ""; }; + 818345752CFE30FE0081113B /* BasicButton+SizeVariations.stencil */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "BasicButton+SizeVariations.stencil"; sourceTree = ""; }; + 818345762CFE30FE0081113B /* LinkButton+ColorVariations.stencil */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "LinkButton+ColorVariations.stencil"; sourceTree = ""; }; + 818345772CFE30FF0081113B /* BasicButton+ColorVariations.stencil */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "BasicButton+ColorVariations.stencil"; sourceTree = ""; }; + 818345782CFE30FF0081113B /* IconButton+SizeVariations.stencil */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "IconButton+SizeVariations.stencil"; sourceTree = ""; }; + 818345812CFE3CC00081113B /* String+SizeKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+SizeKey.swift"; sourceTree = ""; }; 819B2A882BF23B1600688624 /* Font+FontName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Font+FontName.swift"; sourceTree = ""; }; 819B2AC72BF280F900688624 /* SDDSDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SDDSDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 819B2AC92BF280F900688624 /* SDDSDemoApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SDDSDemoApp.swift; sourceTree = ""; }; @@ -501,6 +560,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 811D2DE82D1095A6001C0F48 /* SDDSComponents in Frameworks */, 816E049D2C58DCDB00EE7A7F /* SDDSThemeCore in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -600,6 +660,7 @@ 24CB39172BC96CDE00B32463 /* DecodeCommand.swift */, 81E1EE5C2BE3B14600F86AE1 /* InstallFontsCommand.swift */, 810DE53C2C2AC5EB00F1C96F /* PrepareDirectoriesCommand.swift */, + 8183456F2CFE2C240081113B /* GenerateSwiftCodeCommand.swift */, ); path = Commands; sourceTree = ""; @@ -618,6 +679,8 @@ 81E1EDF52BDA7B9900F86AE1 /* ScreenSize.swift */, 819B2ADE2BF2842300688624 /* ScreenSize+Extensions.swift */, 8133402F2C073C42005AD84F /* URL+Extensions.swift */, + 818345812CFE3CC00081113B /* String+SizeKey.swift */, + 8106AC692D1093FC004348B7 /* GeneratedComponent.swift */, ); path = Core; sourceTree = ""; @@ -640,6 +703,26 @@ name = iOS; sourceTree = ""; }; + 811D2DCF2D1094F4001C0F48 /* SDDSButton */ = { + isa = PBXGroup; + children = ( + 811D2DF22D109A92001C0F48 /* BasicButton+ColorVariations.swift */, + 811D2DF62D109A92001C0F48 /* BasicButton+SizeVariations.swift */, + 811D2DFA2D109A92001C0F48 /* BasicButton+Typography.swift */, + 811D2DFB2D109A92001C0F48 /* BasicButtonSize+ButtonSizeConfiguration.swift */, + 811D2DF82D109A92001C0F48 /* BasicButtonTypography.swift */, + 811D2DF92D109A92001C0F48 /* IconButton+ColorVariations.swift */, + 811D2DF42D109A92001C0F48 /* IconButton+SizeVariations.swift */, + 811D2DF12D109A92001C0F48 /* IconButtonSize+ButtonSizeConfiguration.swift */, + 811D2DF52D109A92001C0F48 /* LinkButton+ColorVariations.swift */, + 811D2DFD2D109A92001C0F48 /* LinkButton+SizeVariations.swift */, + 811D2DFC2D109A92001C0F48 /* LinkButton+Typography.swift */, + 811D2DF32D109A92001C0F48 /* LinkButtonSize+ButtonSizeConfiguration.swift */, + 811D2DF72D109A92001C0F48 /* LinkButtonTypography.swift */, + ); + path = SDDSButton; + sourceTree = ""; + }; 8133401F2C06397A005AD84F /* ContextBuilders */ = { isa = PBXGroup; children = ( @@ -685,6 +768,7 @@ 816E04A12C58DD4200EE7A7F /* SDDSTheme */ = { isa = PBXGroup; children = ( + 811D2DCF2D1094F4001C0F48 /* SDDSButton */, 8180A54E2C1106A700009AF5 /* Theme.swift */, 8180A53E2C11067100009AF5 /* SDDSTheme.h */, 8180A54C2C11068300009AF5 /* Fonts */, @@ -696,6 +780,19 @@ 817539352BCE744300138866 /* Stencil */ = { isa = PBXGroup; children = ( + 811D2DE92D1098A9001C0F48 /* BasicButtonTypography.stencil */, + 811D2DED2D1099DA001C0F48 /* LinkButtonTypography.stencil */, + 81733A142D07066F0092608A /* BasicButtonSize+ButtonSizeConfiguration.stencil */, + 81733A152D07066F0092608A /* IconButtonSize+ButtonSizeConfiguration.stencil */, + 81733A162D07066F0092608A /* LinkButtonSize+ButtonSizeConfiguration.stencil */, + 818345772CFE30FF0081113B /* BasicButton+ColorVariations.stencil */, + 818345752CFE30FE0081113B /* BasicButton+SizeVariations.stencil */, + 818345712CFE30FE0081113B /* BasicButton+Typography.stencil */, + 818345722CFE30FE0081113B /* IconButton+ColorVariations.stencil */, + 818345782CFE30FF0081113B /* IconButton+SizeVariations.stencil */, + 818345762CFE30FE0081113B /* LinkButton+ColorVariations.stencil */, + 818345742CFE30FE0081113B /* LinkButton+SizeVariations.stencil */, + 818345732CFE30FE0081113B /* LinkButton+Typography.stencil */, 817539362BCE745600138866 /* ColorToken.stencil */, 81E1EDB52BD2B4CD00F86AE1 /* ShapeToken.stencil */, 81E1EDB72BD2B9B600F86AE1 /* ShadowToken.stencil */, @@ -1143,6 +1240,7 @@ name = SDDSTheme; packageProductDependencies = ( 816E049C2C58DCDB00EE7A7F /* SDDSThemeCore */, + 811D2DE72D1095A6001C0F48 /* SDDSComponents */, ); productName = SDDSTheme; productReference = 8180A53C2C11067100009AF5 /* SDDSTheme.framework */; @@ -1264,6 +1362,7 @@ 817539AA2BD16D7E00138866 /* XCRemoteSwiftPackageReference "OHHTTPStubs" */, 816E049B2C58DCDB00EE7A7F /* XCLocalSwiftPackageReference "SDDSThemeCore" */, 81BC36742C58E46000A363D0 /* XCLocalSwiftPackageReference "SDDSTheme" */, + 811D2DE62D1095A6001C0F48 /* XCLocalSwiftPackageReference "../SDDSComponents" */, ); productRefGroup = 2489D0A22BC7F3790053AAB1 /* Products */; projectDirPath = ""; @@ -1286,15 +1385,28 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 81733A182D07066F0092608A /* IconButtonSize+ButtonSizeConfiguration.stencil in Resources */, + 8183457F2CFE30FF0081113B /* BasicButton+ColorVariations.stencil in Resources */, 810DE53E2C2AC77700F1C96F /* ShapeToken.stencil in Resources */, 243C1D192C05D3B200C17C0F /* Typographies.stencil in Resources */, + 811D2DEA2D1098A9001C0F48 /* BasicButtonTypography.stencil in Resources */, 810DE5402C2AC77700F1C96F /* ShadowToken.stencil in Resources */, 243C1D132C05D1D300C17C0F /* Colors.stencil in Resources */, + 81733A192D07066F0092608A /* LinkButtonSize+ButtonSizeConfiguration.stencil in Resources */, + 811D2DEE2D1099DA001C0F48 /* LinkButtonTypography.stencil in Resources */, + 81733A172D07066F0092608A /* BasicButtonSize+ButtonSizeConfiguration.stencil in Resources */, 243C1D172C05D39E00C17C0F /* Shadows.stencil in Resources */, 243C1D152C05D38600C17C0F /* Shapes.stencil in Resources */, + 818345792CFE30FF0081113B /* BasicButton+Typography.stencil in Resources */, 810DE54A2C2AC7FB00F1C96F /* GradientToken.stencil in Resources */, 810DE53F2C2AC77700F1C96F /* ColorToken.stencil in Resources */, + 8183457C2CFE30FF0081113B /* LinkButton+SizeVariations.stencil in Resources */, + 8183457B2CFE30FF0081113B /* LinkButton+Typography.stencil in Resources */, + 818345802CFE30FF0081113B /* IconButton+SizeVariations.stencil in Resources */, + 8183457D2CFE30FF0081113B /* BasicButton+SizeVariations.stencil in Resources */, + 8183457A2CFE30FF0081113B /* IconButton+ColorVariations.stencil in Resources */, 810DE5412C2AC77700F1C96F /* TypographyToken.stencil in Resources */, + 8183457E2CFE30FF0081113B /* LinkButton+ColorVariations.stencil in Resources */, 243C1D1B2C05D3C800C17C0F /* Gradients.stencil in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1411,8 +1523,10 @@ 819B2AE02BF2842300688624 /* ScreenSize+Extensions.swift in Sources */, 249C3D4E2BD92595007533DE /* GenerateTokensCommand.swift in Sources */, 81E1EDC52BD6BBD200F86AE1 /* SchemeDirectory.swift in Sources */, + 818345822CFE3CC00081113B /* String+SizeKey.swift in Sources */, 81E1EE382BE3A58600F86AE1 /* Category.swift in Sources */, 81E1EE532BE3A67200F86AE1 /* ShapeStyle.swift in Sources */, + 818345702CFE2C240081113B /* GenerateSwiftCodeCommand.swift in Sources */, 81CB0FC02C2194DF003B1064 /* Color+Extension.swift in Sources */, 8175397E2BD0088000138866 /* DownloadCommand.swift in Sources */, 81E1EE3E2BE3A5B300F86AE1 /* ShadowKind.swift in Sources */, @@ -1445,6 +1559,7 @@ 8181E3AA2BFB6A5F00D4012C /* GradientContextBuilder.swift in Sources */, 819B2A892BF23B1600688624 /* Font+FontName.swift in Sources */, 81CB0FE72C245052003B1064 /* TemplateRenderer.swift in Sources */, + 8106AC6A2D1093FC004348B7 /* GeneratedComponent.swift in Sources */, 8139EB4A2C2040E300D6A049 /* ColorContext.swift in Sources */, 817539882BD008A500138866 /* Constants.swift in Sources */, 81CB0FEA2C245052003B1064 /* EnsureAnyValueExistsNode.swift in Sources */, @@ -1497,17 +1612,30 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 811D2E042D109A92001C0F48 /* LinkButtonTypography.swift in Sources */, + 811D2E002D109A92001C0F48 /* LinkButtonSize+ButtonSizeConfiguration.swift in Sources */, + 811D2E012D109A92001C0F48 /* IconButton+SizeVariations.swift in Sources */, 8180A5BA2C131CC100009AF5 /* TypographyToken+Generated.swift in Sources */, + 811D2E072D109A92001C0F48 /* BasicButton+Typography.swift in Sources */, + 811D2E082D109A92001C0F48 /* BasicButtonSize+ButtonSizeConfiguration.swift in Sources */, 8180A5B72C131CC100009AF5 /* Shadows+Generated.swift in Sources */, 8180A54F2C1106A700009AF5 /* Theme.swift in Sources */, 8180A5B62C131CC100009AF5 /* Gradients+Generated.swift in Sources */, + 811D2E032D109A92001C0F48 /* BasicButton+SizeVariations.swift in Sources */, 8180A5BF2C131CC100009AF5 /* ShadowToken+Generated.swift in Sources */, + 811D2DFE2D109A92001C0F48 /* IconButtonSize+ButtonSizeConfiguration.swift in Sources */, 8180A5B82C131CC100009AF5 /* Shapes+Generated.swift in Sources */, 8180A5B92C131CC100009AF5 /* Typographies+Generated.swift in Sources */, + 811D2E062D109A92001C0F48 /* IconButton+ColorVariations.swift in Sources */, + 811D2E092D109A92001C0F48 /* LinkButton+Typography.swift in Sources */, 8180A5BD2C131CC100009AF5 /* ShapeToken+Generated.swift in Sources */, + 811D2DFF2D109A92001C0F48 /* BasicButton+ColorVariations.swift in Sources */, + 811D2E0A2D109A92001C0F48 /* LinkButton+SizeVariations.swift in Sources */, 8180A5BB2C131CC100009AF5 /* Colors+Generated.swift in Sources */, 8180A5BC2C131CC100009AF5 /* ColorToken+Generated.swift in Sources */, + 811D2E022D109A92001C0F48 /* LinkButton+ColorVariations.swift in Sources */, 8180A5BE2C131CC100009AF5 /* GradientToken+Generated.swift in Sources */, + 811D2E052D109A92001C0F48 /* BasicButtonTypography.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2264,6 +2392,10 @@ /* End XCConfigurationList section */ /* Begin XCLocalSwiftPackageReference section */ + 811D2DE62D1095A6001C0F48 /* XCLocalSwiftPackageReference "../SDDSComponents" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = ../SDDSComponents; + }; 816E049B2C58DCDB00EE7A7F /* XCLocalSwiftPackageReference "SDDSThemeCore" */ = { isa = XCLocalSwiftPackageReference; relativePath = SDDSThemeCore; @@ -2307,6 +2439,10 @@ package = 24CB390A2BC95BDF00B32463 /* XCRemoteSwiftPackageReference "swift-argument-parser" */; productName = ArgumentParser; }; + 811D2DE72D1095A6001C0F48 /* SDDSComponents */ = { + isa = XCSwiftPackageProductDependency; + productName = SDDSComponents; + }; 816E049C2C58DCDB00EE7A7F /* SDDSThemeCore */ = { isa = XCSwiftPackageProductDependency; productName = SDDSThemeCore; diff --git a/SDDSThemeBuilder/SDDSThemeBuilder.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/SDDSThemeBuilder/SDDSThemeBuilder.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 884d043b6..b8b285627 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilder.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/SDDSThemeBuilder/SDDSThemeBuilder.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,50 +1,52 @@ { - "pins" : [ - { - "identity" : "ohhttpstubs", - "kind" : "remoteSourceControl", - "location" : "https://github.com/AliSoftware/OHHTTPStubs", - "state" : { - "revision" : "12f19662426d0434d6c330c6974d53e2eb10ecd9", - "version" : "9.1.0" + "object": { + "pins": [ + { + "package": "OHHTTPStubs", + "repositoryURL": "https://github.com/AliSoftware/OHHTTPStubs", + "state": { + "branch": null, + "revision": "12f19662426d0434d6c330c6974d53e2eb10ecd9", + "version": "9.1.0" + } + }, + { + "package": "PathKit", + "repositoryURL": "https://github.com/kylef/PathKit.git", + "state": { + "branch": null, + "revision": "3bfd2737b700b9a36565a8c94f4ad2b050a5e574", + "version": "1.0.1" + } + }, + { + "package": "Spectre", + "repositoryURL": "https://github.com/kylef/Spectre.git", + "state": { + "branch": null, + "revision": "26cc5e9ae0947092c7139ef7ba612e34646086c7", + "version": "0.10.1" + } + }, + { + "package": "Stencil", + "repositoryURL": "https://github.com/stencilproject/Stencil.git", + "state": { + "branch": null, + "revision": "4f222ac85d673f35df29962fc4c36ccfdaf9da5b", + "version": "0.15.1" + } + }, + { + "package": "swift-argument-parser", + "repositoryURL": "https://github.com/apple/swift-argument-parser.git", + "state": { + "branch": null, + "revision": "46989693916f56d1186bd59ac15124caef896560", + "version": "1.3.1" + } } - }, - { - "identity" : "pathkit", - "kind" : "remoteSourceControl", - "location" : "https://github.com/kylef/PathKit.git", - "state" : { - "revision" : "3bfd2737b700b9a36565a8c94f4ad2b050a5e574", - "version" : "1.0.1" - } - }, - { - "identity" : "spectre", - "kind" : "remoteSourceControl", - "location" : "https://github.com/kylef/Spectre.git", - "state" : { - "revision" : "26cc5e9ae0947092c7139ef7ba612e34646086c7", - "version" : "0.10.1" - } - }, - { - "identity" : "stencil", - "kind" : "remoteSourceControl", - "location" : "https://github.com/stencilproject/Stencil.git", - "state" : { - "revision" : "4f222ac85d673f35df29962fc4c36ccfdaf9da5b", - "version" : "0.15.1" - } - }, - { - "identity" : "swift-argument-parser", - "kind" : "remoteSourceControl", - "location" : "https://github.com/apple/swift-argument-parser.git", - "state" : { - "revision" : "46989693916f56d1186bd59ac15124caef896560", - "version" : "1.3.1" - } - } - ], - "version" : 2 + ] + }, + "version": 1 } diff --git a/SDDSThemeBuilder/SDDSThemeBuilder.xcodeproj/xcshareddata/xcschemes/SDDSThemeBuilder.xcscheme b/SDDSThemeBuilder/SDDSThemeBuilder.xcodeproj/xcshareddata/xcschemes/SDDSThemeBuilder.xcscheme new file mode 100644 index 000000000..6067d46c5 --- /dev/null +++ b/SDDSThemeBuilder/SDDSThemeBuilder.xcodeproj/xcshareddata/xcschemes/SDDSThemeBuilder.xcscheme @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/App.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/App.swift index c671811f8..fd082390e 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/App.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/App.swift @@ -36,7 +36,7 @@ public final class App { return } - let commands = [ + var commands = [ InstallFontsCommand( fontFamiliesContainer: fontFamiliesContainer, fontsURL: fontsURL, @@ -102,6 +102,8 @@ public final class App { ) ] + commands.append(contentsOf: generateVariations) + for command in commands { let result = command.run() switch result { @@ -122,6 +124,63 @@ public final class App { } } +// MARK: - Variations +extension App { + private var generateVariations: [GenerateSwiftCodeCommand] { + var result = [GenerateSwiftCodeCommand]() + result.append(contentsOf: generateBasicButtonVariations) + result.append(contentsOf: generateLinkButtonVariations) + result.append(contentsOf: generateIconButtonVariations) + return result + } + + private var generateBasicButtonVariations: [GenerateSwiftCodeCommand] { + [ + GenerateSwiftCodeCommand( + jsonURL: URL(string: "https://raw.githubusercontent.com/salute-developers/theme-converter/refs/heads/main/components/sdds_serv/basic_button_config.json")!, + templates: [ + .basicButtonColorVariations, + .basicButtonSizeVariations, + .basicButtonTypographyVariations, + .basicButtonTypography, + .basicButtonSizeConfiguration + ], + outputDirectoryURL: generatedComponentsURL(component: .button) + ) + ] + } + + private var generateLinkButtonVariations: [GenerateSwiftCodeCommand] { + [ + GenerateSwiftCodeCommand( + jsonURL: URL(string: "https://raw.githubusercontent.com/salute-developers/theme-converter/refs/heads/main/components/sdds_serv/link_button_config.json")!, + templates: [ + .linkButtonColorVariations, + .linkButtonSizeVariations, + .linkButtonTypographyVariations, + .linkButtonTypography, + .linkButtonSizeConfiguration + ], + outputDirectoryURL: generatedComponentsURL(component: .button) + ) + ] + } + + private var generateIconButtonVariations: [GenerateSwiftCodeCommand] { + [ + GenerateSwiftCodeCommand( + jsonURL: URL(string: "https://raw.githubusercontent.com/salute-developers/theme-converter/refs/heads/main/components/sdds_serv/icon_button_config.json")!, + templates: [ + .iconButtonColorVariations, + .iconButtonSizeVariations, + .iconButtonSizeConfiguration + ], + outputDirectoryURL: generatedComponentsURL(component: .button) + ) + ] + } +} + // MARK: - Directories extension App { private var outputDirectoryURL: URL { @@ -152,6 +211,10 @@ extension App { themeURL.appending(component: "Generated") } + private func generatedComponentsURL(component: GeneratedComponent) -> URL { + themeURL.appending(component: component.rawValue) + } + private var fontsURL: URL { themeURL.appending(component: "Fonts") } diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Commands/GenerateSwiftCodeCommand.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Commands/GenerateSwiftCodeCommand.swift new file mode 100644 index 000000000..f190bea3e --- /dev/null +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Commands/GenerateSwiftCodeCommand.swift @@ -0,0 +1,49 @@ +import Foundation +import Stencil + +final class GenerateSwiftCodeCommand: Command, FileWriter { + private let jsonURL: URL + private let templates: [StencilTemplate] + private let outputDirectoryURL: URL + private let templateRender: Renderable + + init(jsonURL: URL, + templates: [StencilTemplate], + outputDirectoryURL: URL, + templateRender: Renderable = TemplateRenderer()) { + self.jsonURL = jsonURL + self.templates = templates + self.outputDirectoryURL = outputDirectoryURL + self.templateRender = templateRender + super.init(name: "Generate Swift Code") + } + + @discardableResult override func run() -> CommandResult { + super.run() + + guard let jsonData = try? Data(contentsOf: jsonURL) else { + return .error(GeneralError.invalidFilename) + } + + guard let jsonDictionary = try? JSONSerialization.jsonObject(with: jsonData) as? [String: Any] else { + return .error(GeneralError.decoding) + } + + for template in templates { + let result = templateRender.render(context: jsonDictionary, template: template) + + guard let generatedContent = result.asGenerated else { + return result + } + + let filename = template.rawValue + ".swift" + let saveResult = saveFile(content: generatedContent, outputURL: outputDirectoryURL, filename: filename) + + if saveResult.isError { + return saveResult + } + } + + return .success + } +} diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Core/GeneratedComponent.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Core/GeneratedComponent.swift new file mode 100644 index 000000000..72a26fe30 --- /dev/null +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Core/GeneratedComponent.swift @@ -0,0 +1,5 @@ +import Foundation + +enum GeneratedComponent: String { + case button = "SDDSButton" +} diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Core/StencilTemplate.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Core/StencilTemplate.swift index fc77c122a..666a2de55 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Core/StencilTemplate.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Core/StencilTemplate.swift @@ -11,6 +11,19 @@ enum StencilTemplate: String { case shadows = "Shadows" case typographies = "Typographies" case gradients = "Gradients" + case basicButtonColorVariations = "BasicButton+ColorVariations" + case basicButtonSizeVariations = "BasicButton+SizeVariations" + case basicButtonTypography = "BasicButtonTypography" + case basicButtonTypographyVariations = "BasicButton+Typography" + case basicButtonSizeConfiguration = "BasicButtonSize+ButtonSizeConfiguration" + case linkButtonColorVariations = "LinkButton+ColorVariations" + case linkButtonSizeVariations = "LinkButton+SizeVariations" + case linkButtonTypography = "LinkButtonTypography" + case linkButtonTypographyVariations = "LinkButton+Typography" + case linkButtonSizeConfiguration = "LinkButtonSize+ButtonSizeConfiguration" + case iconButtonColorVariations = "IconButton+ColorVariations" + case iconButtonSizeVariations = "IconButton+SizeVariations" + case iconButtonSizeConfiguration = "IconButtonSize+ButtonSizeConfiguration" var withStencilExt: String { rawValue + ".stencil" diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Core/String+SizeKey.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Core/String+SizeKey.swift new file mode 100644 index 000000000..9c7e625f5 --- /dev/null +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Core/String+SizeKey.swift @@ -0,0 +1,20 @@ +import Foundation + +extension String { + var sizeKey: String { + switch self { + case "xxs": + return "extraExtraSmall" + case "xs": + return "extraSmall" + case "s": + return "small" + case "m": + return "medium" + case "l": + return "large" + default: + return "unknownSize" + } + } +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/Templates/BasicButton/BasicButton+ColorVariations.stencil b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/BasicButton+ColorVariations.stencil similarity index 55% rename from SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/Templates/BasicButton/BasicButton+ColorVariations.stencil rename to SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/BasicButton+ColorVariations.stencil index 07b63a20d..762c156a2 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/Templates/BasicButton/BasicButton+ColorVariations.stencil +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/BasicButton+ColorVariations.stencil @@ -1,13 +1,14 @@ -// MARK: - Sourcery Template +/* This file is code generated. */ + import Foundation import SDDSComponents import SDDSThemeCore public extension ButtonAppearanceVariation { {% for variation, config in variations.color %} - var {{ variation.camelCase }}: Self { + var {{ variation | escapeSwiftKeyword }}: Self { .init( - appearance: appearance.applyColorVariation(variation: BasicButton.{{ variation.camelCase }}).appearance + appearance: appearance.applyColorVariation(variation: BasicButton.{{ variation }}.appearance) ) } {% endfor %} @@ -15,40 +16,49 @@ public extension ButtonAppearanceVariation { public extension BasicButton { {% for variation, config in variations.color %} - static var {{ variation.camelCase }}: ButtonAppearanceVariation { + static var {{ variation | escapeSwiftKeyword }}: ButtonAppearanceVariation { .init( + name: "{{ variation }}", appearance: ButtonAppearance( titleTypography: BasicButton.titleTypography, titleColor: ButtonColor( - defaultColor: .{{ config.contentColor.default.camelCase }}, - highlightedColor: .{{ config.contentColor.states | findState("pressed") }}, - hoveredColor: .{{ config.contentColor.states | findState("hovered") }} + defaultColor: .{{ config.contentColor.default | camelCase }}, + highlightedColor: .{{ config.contentColor.states | findState:"pressed" | default:"clearColor" | camelCase }}, + hoveredColor: .{{ config.contentColor.states | findState:"hovered" | default:"clearColor" | camelCase }} ), subtitleTypography: BasicButton.subtitleTypography, subtitleColor: ButtonColor( - defaultColor: .{{ config.valueColor.default.camelCase }}, - highlightedColor: .{{ config.valueColor.states | findState("pressed") }}, - hoveredColor: .{{ config.valueColor.states | findState("hovered") }} + defaultColor: .{{ config.valueColor.default | camelCase }}, + highlightedColor: .{{ config.valueColor.states | findState:"pressed" | default:"clearColor" | camelCase }}, + hoveredColor: .{{ config.valueColor.states | findState:"hovered" | default:"clearColor" | camelCase }} ), iconColor: ButtonColor( - defaultColor: .{{ config.contentColor.default.camelCase }}, - highlightedColor: .{{ config.contentColor.states | findState("pressed") }}, - hoveredColor: .{{ config.contentColor.states | findState("hovered") }} + defaultColor: .{{ config.contentColor.default | camelCase }}, + highlightedColor: .{{ config.contentColor.states | findState:"pressed" | default:"clearColor" | camelCase }}, + hoveredColor: .{{ config.contentColor.states | findState:"hovered" | default:"clearColor" | camelCase }} ), spinnerColor: ButtonColor( - defaultColor: .{{ config.contentColor.default.camelCase }}, - highlightedColor: .{{ config.contentColor.states | findState("pressed") }}, - hoveredColor: .{{ config.contentColor.states | findState("hovered") }} + defaultColor: .{{ config.contentColor.default | camelCase }}, + highlightedColor: .{{ config.contentColor.states | findState:"pressed" | default:"clearColor" | camelCase }}, + hoveredColor: .{{ config.contentColor.states | findState:"hovered" | default:"clearColor" | camelCase }} ), backgroundColor: ButtonColor( - defaultColor: .{{ config.backgroundColor.default.camelCase }}, - highlightedColor: .{{ config.backgroundColor.states | findState("pressed") }}, - hoveredColor: .{{ config.backgroundColor.states | findState("hovered") }} + defaultColor: .{{ config.backgroundColor.default | camelCase }}, + highlightedColor: .{{ config.backgroundColor.states | findState:"pressed" | default:"clearColor" | camelCase }}, + hoveredColor: .{{ config.backgroundColor.states | findState:"hovered" | default:"clearColor" | camelCase }} ), - disabledAlpha: {{ invariant.disabledAlpha }}, - loadingAlpha: {{ invariant.loadingAlpha }} + disabledAlpha: 0.4, + loadingAlpha: {{ config.loadingAlpha | default:0 }} ) ) } {% endfor %} + + static var all: [ButtonAppearanceVariation] { + [ + {% for variation, config in variations.color %} + BasicButton.{{ variation | escapeSwiftKeyword }}{% if not forloop.last %},{% endif %} + {% endfor %} + ] + } } diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/Templates/BasicButton/BasicButton+SizeVariations.stencil b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/BasicButton+SizeVariations.stencil similarity index 63% rename from SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/Templates/BasicButton/BasicButton+SizeVariations.stencil rename to SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/BasicButton+SizeVariations.stencil index a53a289c2..a5f51d0aa 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/Templates/BasicButton/BasicButton+SizeVariations.stencil +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/BasicButton+SizeVariations.stencil @@ -1,4 +1,5 @@ -// MARK: - Sourcery Template +/* This file is code generated. */ + import Foundation import SDDSComponents import SDDSThemeCore @@ -6,10 +7,10 @@ import SDDSThemeCore // MARK: - Size public extension ButtonAppearanceVariation { {% for variation, config in variations.size %} - var {{ variation.sizeKey }}: Self { + var {{ variation | sizeKey }}: Self { .init( appearance: appearance - .size(BasicButtonSize.{{ variation.sizeKey }}) + .size(BasicButtonSize.{{ variation | sizeKey }}) .titleTypography(BasicButton.titleTypography) .subtitleTypography(BasicButton.subtitleTypography) ) @@ -19,8 +20,8 @@ public extension ButtonAppearanceVariation { public extension BasicButton { {% for variation, config in variations.size %} - static var {{ variation.sizeKey }}: ButtonAppearanceVariation { - return ButtonAppearanceVariation().{{ variation.sizeKey }} + static var {{ variation | sizeKey }}: ButtonAppearanceVariation { + return ButtonAppearanceVariation().{{ variation | sizeKey }} } {% endfor %} } diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/Templates/BasicButton/BasicButton+Typography.stencil b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/BasicButton+Typography.stencil similarity index 60% rename from SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/Templates/BasicButton/BasicButton+Typography.stencil rename to SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/BasicButton+Typography.stencil index 799f05461..9354ac64a 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/Templates/BasicButton/BasicButton+Typography.stencil +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/BasicButton+Typography.stencil @@ -1,28 +1,26 @@ -// MARK: - Sourcery Template +/* This file is code generated. */ + import Foundation -import SDDSServTheme import SDDSComponents import SDDSThemeCore public extension BasicButton { static var titleTypography: TypographyConfiguration { BasicButtonTypography( - large: AdaptiveTypographyToken.{{ variations.size.l.labelStyle.camelCase }}.typography, - medium: AdaptiveTypographyToken.{{ variations.size.m.labelStyle.camelCase }}.typography, - small: AdaptiveTypographyToken.{{ variations.size.s.labelStyle.camelCase }}.typography, - extraSmall: AdaptiveTypographyToken.{{ variations.size.xs.labelStyle.camelCase }}.typography, - extraExtraSmall: AdaptiveTypographyToken.{{ variations.size.xxs.labelStyle.camelCase }}.typography + large: AdaptiveTypographyToken.{{ variations.size.l.labelStyle | camelCase }}.typography, + medium: AdaptiveTypographyToken.{{ variations.size.m.labelStyle | camelCase }}.typography, + small: AdaptiveTypographyToken.{{ variations.size.s.labelStyle | camelCase }}.typography, + extraSmall: AdaptiveTypographyToken.{{ variations.size.xs.labelStyle | camelCase }}.typography ) .asContainer } static var subtitleTypography: TypographyConfiguration { BasicButtonTypography( - large: AdaptiveTypographyToken.{{ variations.size.l.valueStyle.camelCase }}.typography, - medium: AdaptiveTypographyToken.{{ variations.size.m.valueStyle.camelCase }}.typography, - small: AdaptiveTypographyToken.{{ variations.size.s.valueStyle.camelCase }}.typography, - extraSmall: AdaptiveTypographyToken.{{ variations.size.xs.valueStyle.camelCase }}.typography, - extraExtraSmall: AdaptiveTypographyToken.{{ variations.size.xxs.valueStyle.camelCase }}.typography + large: AdaptiveTypographyToken.{{ variations.size.l.valueStyle | camelCase }}.typography, + medium: AdaptiveTypographyToken.{{ variations.size.m.valueStyle | camelCase }}.typography, + small: AdaptiveTypographyToken.{{ variations.size.s.valueStyle | camelCase }}.typography, + extraSmall: AdaptiveTypographyToken.{{ variations.size.xs.valueStyle | camelCase }}.typography ) .asContainer } diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/BasicButtonSize+ButtonSizeConfiguration.stencil b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/BasicButtonSize+ButtonSizeConfiguration.stencil new file mode 100644 index 000000000..8d42839bb --- /dev/null +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/BasicButtonSize+ButtonSizeConfiguration.stencil @@ -0,0 +1,74 @@ +/* This file is code generated. */ + +import Foundation +import SDDSComponents +import SwiftUI + +public enum BasicButtonSize: String, CaseIterable { + {%- for variation, config in variations.size %} + case {{ variation | sizeKey }} + {%- endfor %} +} + +extension BasicButtonSize: ButtonSizeConfiguration { + + public var height: CGFloat { + switch self { + {%- for variation, config in variations.size %} + case .{{ variation | sizeKey }}: return {{ config.height }} + {%- endfor %} + } + } + + public var cornerRadius: CGFloat { + switch self { + {%- for variation, config in variations.size %} + case .{{ variation | sizeKey }}: return {{ config.shape.name | adjustedCornerRadius:config.shape.adjustment }} + {%- endfor %} + } + } + + public var paddings: EdgeInsets { + switch self { + {%- for variation, config in variations.size %} + case .{{ variation | sizeKey }}: return EdgeInsets(top: 0, leading: {{ config.paddingStart }}, bottom: 0, trailing: {{ config.paddingEnd }}) + {%- endfor %} + } + } + + public var iconSize: CGSize { + switch self { + {%- for variation, config in variations.size %} + case .{{ variation | sizeKey }}: return CGSize(width: {{ config.iconSize }}, height: {{ config.iconSize }}) + {%- endfor %} + } + } + + public var spinnerSize: CGSize { + switch self { + {%- for variation, config in variations.size %} + case .{{ variation | sizeKey }}: return CGSize(width: {{ config.spinnerSize }}, height: {{ config.spinnerSize }}) + {%- endfor %} + } + } + + public var titleHorizontalGap: CGFloat { + switch self { + {%- for variation, config in variations.size %} + case .{{ variation | sizeKey }}: return {{ config.valueMargin | default:0 }} + {%- endfor %} + } + } + + public var iconHorizontalGap: CGFloat { + switch self { + {%- for variation, config in variations.size %} + case .{{ variation | sizeKey }}: return {{ config.iconMargin | default:0 }} + {%- endfor %} + } + } + + public var debugDescription: String { + return "BasicButtonSize" + } +} diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/BasicButtonTypography.stencil b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/BasicButtonTypography.stencil new file mode 100644 index 000000000..7193c279b --- /dev/null +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/BasicButtonTypography.stencil @@ -0,0 +1,40 @@ +/* This file is code generated. */ + +import Foundation +import SDDSComponents + +public struct BasicButtonTypography: GeneralTypographyConfiguration { + typealias S = ButtonSizeConfiguration + + + {%- for variation, config in variations.size %} + let {{ variation | sizeKey }}: TypographyToken? + {%- endfor %} + + + init( + {%- for variation, config in variations.size %} + {{ variation | sizeKey }}: TypographyToken?{% if not forloop.last %},{% endif %} + {%- endfor %} + ) { + {%- for variation, config in variations.size %} + self.{{ variation | sizeKey }} = {{ variation | sizeKey }} + {%- endfor %} + } + + /** + Возвращает типографику для заданного размера кнопки. + + - Parameter size: Размер кнопки. + - Returns: Типографика для заданного размера кнопки или nil, если не задана. + */ + public func typography(with size: ButtonSizeConfiguration) -> TypographyToken? { + switch size as? BasicButtonSize { + {%- for variation, config in variations.size %} + case .{{ variation | sizeKey }}: return {{ variation | sizeKey }} + {%- endfor %} + case .none: + return nil + } + } +} diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/ColorToken.stencil b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/ColorToken.stencil index 47277fde5..6c5723aba 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/ColorToken.stencil +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/ColorToken.stencil @@ -1,3 +1,5 @@ +/* This file is code generated. */ + import SwiftUI import UIKit @_exported import SDDSThemeCore diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/Colors.stencil b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/Colors.stencil index 1e9d63a89..bf3209d93 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/Colors.stencil +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/Colors.stencil @@ -1,3 +1,5 @@ +/* This file is code generated. */ + import SwiftUI import UIKit @_exported import SDDSThemeCore diff --git a/SDDSComponents/Sources/SDDSComponents/Common/Templates/findState.stencil b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/FilterFindState.stencil similarity index 100% rename from SDDSComponents/Sources/SDDSComponents/Common/Templates/findState.stencil rename to SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/FilterFindState.stencil diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/GradientToken.stencil b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/GradientToken.stencil index 84c9c0ec0..dbfc34ea7 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/GradientToken.stencil +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/GradientToken.stencil @@ -1,3 +1,5 @@ +/* This file is code generated. */ + import SwiftUI import UIKit @_exported import SDDSThemeCore diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/Gradients.stencil b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/Gradients.stencil index f2a949da5..d630123f5 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/Gradients.stencil +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/Gradients.stencil @@ -1,3 +1,5 @@ +/* This file is code generated. */ + import SwiftUI import UIKit @_exported import SDDSThemeCore diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/Templates/IconButton/IconButton+ColorVariations.stencil b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/IconButton+ColorVariations.stencil similarity index 59% rename from SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/Templates/IconButton/IconButton+ColorVariations.stencil rename to SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/IconButton+ColorVariations.stencil index ddd856f34..a41953bb3 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/Templates/IconButton/IconButton+ColorVariations.stencil +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/IconButton+ColorVariations.stencil @@ -1,3 +1,5 @@ +/* This file is code generated. */ + // MARK: - Colors import Foundation import SDDSComponents @@ -5,9 +7,9 @@ import SDDSThemeCore public extension ButtonAppearanceVariation { {% for variation, config in variations.color %} - var {{ variation.camelCase }}: Self { + var {{ variation | escapeSwiftKeyword }}: Self { .init( - appearance: appearance.applyColorVariation(variation: .{{ variation.camelCase }}) + appearance: appearance.applyColorVariation(variation: IconButton.{{ variation | escapeSwiftKeyword }}.appearance) ) } {% endfor %} @@ -15,13 +17,14 @@ public extension ButtonAppearanceVariation { public extension IconButton { {% for variation, config in variations.color %} - static var {{ variation.camelCase }}: ButtonAppearanceVariation { + static var {{ variation | escapeSwiftKeyword }}: ButtonAppearanceVariation { .init( + name: "{{ variation }}", appearance: ButtonAppearance( titleColor: ButtonColor( - defaultColor: .{{ config.contentColor.default.camelCase }}, - highlightedColor: .{{ config.contentColor.states | findState("pressed") }}, - hoveredColor: .{{ config.contentColor.states | findState("hovered") }} + defaultColor: .{{ config.contentColor.default | camelCase }}, + highlightedColor: .{{ config.contentColor.states | findState:"pressed" | default:"clearColor" | camelCase }}, + hoveredColor: .{{ config.contentColor.states | findState:"hovered" | default:"clearColor" | camelCase }} ), subtitleColor: ButtonColor( defaultColor: .clearColor, @@ -29,24 +32,32 @@ public extension IconButton { hoveredColor: .clearColor ), iconColor: ButtonColor( - defaultColor: .{{ config.contentColor.default.camelCase }}, - highlightedColor: .{{ config.contentColor.states | findState("pressed") }}, - hoveredColor: .{{ config.contentColor.states | findState("hovered") }} + defaultColor: .{{ config.contentColor.default | camelCase }}, + highlightedColor: .{{ config.contentColor.states | findState:"pressed" | default:"clearColor" | camelCase }}, + hoveredColor: .{{ config.contentColor.states | findState:"hovered" | default:"clearColor" | camelCase }} ), spinnerColor: ButtonColor( - defaultColor: .{{ config.contentColor.default.camelCase }}, - highlightedColor: .{{ config.contentColor.states | findState("pressed") }}, - hoveredColor: .{{ config.contentColor.states | findState("hovered") }} + defaultColor: .{{ config.contentColor.default | camelCase }}, + highlightedColor: .{{ config.contentColor.states | findState:"pressed" | default:"clearColor" | camelCase }}, + hoveredColor: .{{ config.contentColor.states | findState:"hovered" | default:"clearColor" | camelCase }} ), backgroundColor: ButtonColor( - defaultColor: .{{ config.backgroundColor.default.camelCase }}, - highlightedColor: .{{ config.backgroundColor.states | findState("pressed") }}, - hoveredColor: .{{ config.backgroundColor.states | findState("hovered") }} + defaultColor: .{{ config.backgroundColor.default | camelCase }}, + highlightedColor: .{{ config.backgroundColor.states | findState:"pressed" | default:"clearColor" | camelCase }}, + hoveredColor: .{{ config.backgroundColor.states | findState:"hovered" | default:"clearColor" | camelCase }} ), disabledAlpha: 0.4, - loadingAlpha: 0.06 + loadingAlpha: {{ config.loadingAlpha | default:0 }} ) ) } {% endfor %} + + static var all: [ButtonAppearanceVariation] { + [ + {% for variation, config in variations.color %} + IconButton.{{ variation | escapeSwiftKeyword }}{% if not forloop.last %},{% endif %} + {% endfor %} + ] + } } diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/Templates/IconButton/IconButton+SizeVariations.stencil b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/IconButton+SizeVariations.stencil similarity index 50% rename from SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/Templates/IconButton/IconButton+SizeVariations.stencil rename to SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/IconButton+SizeVariations.stencil index 1972d3168..4f2fcabaf 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/Templates/IconButton/IconButton+SizeVariations.stencil +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/IconButton+SizeVariations.stencil @@ -1,4 +1,5 @@ -// MARK: - Sourcery Template +/* This file is code generated. */ + import Foundation import SDDSComponents import SDDSThemeCore @@ -6,10 +7,10 @@ import SDDSThemeCore // MARK: - Size public extension ButtonAppearanceVariation { {% for variation, config in variations.size %} - var {{ variation.sizeKey }}: Self { + var {{ variation | sizeKey | escapeSwiftKeyword }}: Self { .init( appearance: appearance - .size(IconButtonSize.{{ variation.sizeKey }}) + .size(IconButtonSize.{{ variation | sizeKey | escapeSwiftKeyword }}) ) } {% endfor %} @@ -17,8 +18,8 @@ public extension ButtonAppearanceVariation { public extension IconButton { {% for variation, config in variations.size %} - static var {{ variation.sizeKey }}: ButtonAppearanceVariation { - return ButtonAppearanceVariation().{{ variation.sizeKey }} + static var {{ variation | sizeKey | escapeSwiftKeyword }}: ButtonAppearanceVariation { + return ButtonAppearanceVariation().{{ variation | sizeKey | escapeSwiftKeyword }} } {% endfor %} } diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/IconButtonSize+ButtonSizeConfiguration.stencil b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/IconButtonSize+ButtonSizeConfiguration.stencil new file mode 100644 index 000000000..20f65a763 --- /dev/null +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/IconButtonSize+ButtonSizeConfiguration.stencil @@ -0,0 +1,74 @@ +/* This file is code generated. */ + +import Foundation +import SDDSComponents +import SwiftUI + +public enum IconButtonSize: String, CaseIterable { + {%- for variation, config in variations.size %} + case {{ variation | sizeKey }} + {%- endfor %} +} + +extension IconButtonSize: ButtonSizeConfiguration { + + public var height: CGFloat { + switch self { + {%- for variation, config in variations.size %} + case .{{ variation | sizeKey }}: return {{ config.height }} + {%- endfor %} + } + } + + public var cornerRadius: CGFloat { + switch self { + {%- for variation, config in variations.size %} + case .{{ variation | sizeKey }}: return {{ config.shape.name | adjustedCornerRadius:config.shape.adjustment }} + {%- endfor %} + } + } + + public var paddings: EdgeInsets { + switch self { + {%- for variation, config in variations.size %} + case .{{ variation | sizeKey }}: return EdgeInsets(top: 0, leading: {{ config.paddingStart }}, bottom: 0, trailing: {{ config.paddingEnd }}) + {%- endfor %} + } + } + + public var iconSize: CGSize { + switch self { + {%- for variation, config in variations.size %} + case .{{ variation | sizeKey }}: return CGSize(width: {{ config.iconSize }}, height: {{ config.iconSize }}) + {%- endfor %} + } + } + + public var spinnerSize: CGSize { + switch self { + {%- for variation, config in variations.size %} + case .{{ variation | sizeKey }}: return CGSize(width: {{ config.spinnerSize }}, height: {{ config.spinnerSize }}) + {%- endfor %} + } + } + + public var titleHorizontalGap: CGFloat { + switch self { + {%- for variation, config in variations.size %} + case .{{ variation | sizeKey }}: return 0 + {%- endfor %} + } + } + + public var iconHorizontalGap: CGFloat { + switch self { + {%- for variation, config in variations.size %} + case .{{ variation | sizeKey }}: return 0 + {%- endfor %} + } + } + + public var debugDescription: String { + return "IconButtonSize" + } +} diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/Templates/LinkButton/LinkButton+ColorVariations.stencil b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/LinkButton+ColorVariations.stencil similarity index 57% rename from SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/Templates/LinkButton/LinkButton+ColorVariations.stencil rename to SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/LinkButton+ColorVariations.stencil index f6d3302b4..14f1d3c36 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/Templates/LinkButton/LinkButton+ColorVariations.stencil +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/LinkButton+ColorVariations.stencil @@ -1,13 +1,14 @@ -// MARK: - Sourcery Template +/* This file is code generated. */ + import Foundation import SDDSComponents import SDDSThemeCore -epublic xtension ButtonAppearanceVariation { +public extension ButtonAppearanceVariation { {% for variation, config in variations.color %} - var {{ variation.camelCase }}: Self { + var {{ variation | camelCase | escapeSwiftKeyword }}: Self { .init( - appearance: appearance.applyColorVariation(variation: LinkButton.{{ variation.camelCase }}).appearance + appearance: appearance.applyColorVariation(variation: LinkButton.{{ variation | camelCase | escapeSwiftKeyword }}.appearance) ) } {% endfor %} @@ -15,40 +16,49 @@ epublic xtension ButtonAppearanceVariation { public extension LinkButton { {% for variation, config in variations.color %} - static var {{ variation.camelCase }}: ButtonAppearanceVariation { + static var {{ variation | camelCase | escapeSwiftKeyword }}: ButtonAppearanceVariation { .init( + name: "{{ variation | camelCase }}", appearance: ButtonAppearance( titleTypography: LinkButton.titleTypography, titleColor: ButtonColor( - defaultColor: .{{ config.contentColor.default.camelCase }}, - highlightedColor: .{{ config.contentColor.states | findState("pressed") }}, - hoveredColor: .{{ config.contentColor.states | findState("hovered") }} + defaultColor: .{{ config.contentColor.default | camelCase }}, + highlightedColor: .{{ config.contentColor.states | findState:"pressed" | default:"clearColor" | camelCase }}, + hoveredColor: .{{ config.contentColor.states | findState:"hovered" | default:"clearColor" | camelCase }} ), - subtitleTypography: LinkButton.subtitleTypography, + subtitleTypography: .default, subtitleColor: ButtonColor( defaultColor: .clearColor, highlightedColor: .clearColor, hoveredColor: .clearColor ), iconColor: ButtonColor( - defaultColor: .{{ config.contentColor.default.camelCase }}, - highlightedColor: .{{ config.contentColor.states | findState("pressed") }}, - hoveredColor: .{{ config.contentColor.states | findState("hovered") }} + defaultColor: .{{ config.contentColor.default | camelCase }}, + highlightedColor: .{{ config.contentColor.states | findState:"pressed" | default:"clearColor" | camelCase }}, + hoveredColor: .{{ config.contentColor.states | findState:"hovered" | default:"clearColor" | camelCase }} ), spinnerColor: ButtonColor( - defaultColor: .{{ config.contentColor.default.camelCase }}, - highlightedColor: .{{ config.contentColor.states | findState("pressed") }}, - hoveredColor: .{{ config.contentColor.states | findState("hovered") }} + defaultColor: .{{ config.contentColor.default | camelCase }}, + highlightedColor: .{{ config.contentColor.states | findState:"pressed" | default:"clearColor" | camelCase }}, + hoveredColor: .{{ config.contentColor.states | findState:"hovered" | default:"clearColor" | camelCase }} ), backgroundColor: ButtonColor( - defaultColor: .{{ invariant.backgroundColor.default.camelCase }}, + defaultColor: .{{ invariant.backgroundColor.default | camelCase | default:"clearColor" }}, highlightedColor: .clearColor, hoveredColor: .clearColor ), disabledAlpha: 0.4, - loadingAlpha: {{ invariant.loadingAlpha }} + loadingAlpha: {{ invariant.loadingAlpha | default:0 }} ) ) } {% endfor %} + + static var all: [ButtonAppearanceVariation] { + [ + {% for variation, config in variations.color %} + LinkButton.{{ variation | camelCase | escapeSwiftKeyword }}{% if not forloop.last %},{% endif %} + {% endfor %} + ] + } } diff --git a/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/Templates/LinkButton/LinkButton+SizeVariations.stencil b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/LinkButton+SizeVariations.stencil similarity index 55% rename from SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/Templates/LinkButton/LinkButton+SizeVariations.stencil rename to SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/LinkButton+SizeVariations.stencil index 265cd26ee..9906895d1 100644 --- a/SDDSComponents/Sources/SDDSComponents/Components/SDDSButton/Templates/LinkButton/LinkButton+SizeVariations.stencil +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/LinkButton+SizeVariations.stencil @@ -1,4 +1,5 @@ -// MARK: - Sourcery Template +/* This file is code generated. */ + import Foundation import SDDSComponents import SDDSThemeCore @@ -6,12 +7,11 @@ import SDDSThemeCore // MARK: - Size public extension ButtonAppearanceVariation { {% for variation, config in variations.size %} - var {{ variation.sizeKey }}: Self { + var {{ variation | sizeKey | escapeSwiftKeyword }}: Self { .init( appearance: appearance - .size(LinkButtonSize.{{ variation.sizeKey }}) + .size(LinkButtonSize.{{ variation | sizeKey }}) .titleTypography(LinkButton.titleTypography) - .subtitleTypography(LinkButton.subtitleTypography) ) } {% endfor %} @@ -19,8 +19,8 @@ public extension ButtonAppearanceVariation { public extension LinkButton { {% for variation, config in variations.size %} - static var {{ variation.sizeKey }}: ButtonAppearanceVariation { - return ButtonAppearanceVariation().{{ variation.sizeKey }} + static var {{ variation | sizeKey | escapeSwiftKeyword }}: ButtonAppearanceVariation { + return ButtonAppearanceVariation().{{ variation | sizeKey | escapeSwiftKeyword }} } {% endfor %} } diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/LinkButton+Typography.stencil b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/LinkButton+Typography.stencil new file mode 100644 index 000000000..a8f1752ec --- /dev/null +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/LinkButton+Typography.stencil @@ -0,0 +1,17 @@ +/* This file is code generated. */ + +import Foundation +import SDDSComponents +import SDDSThemeCore + +public extension LinkButton { + static var titleTypography: TypographyConfiguration { + LinkButtonTypography( + large: AdaptiveTypographyToken.{{ variations.size.l.labelStyle | camelCase }}.typography, + medium: AdaptiveTypographyToken.{{ variations.size.m.labelStyle | camelCase }}.typography, + small: AdaptiveTypographyToken.{{ variations.size.s.labelStyle | camelCase }}.typography, + extraSmall: AdaptiveTypographyToken.{{ variations.size.xs.labelStyle | camelCase }}.typography + ) + .asContainer + } +} diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/LinkButtonSize+ButtonSizeConfiguration.stencil b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/LinkButtonSize+ButtonSizeConfiguration.stencil new file mode 100644 index 000000000..d52b32a53 --- /dev/null +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/LinkButtonSize+ButtonSizeConfiguration.stencil @@ -0,0 +1,70 @@ +/* This file is code generated. */ + +import Foundation +import SDDSComponents +import SwiftUI + +public enum LinkButtonSize: String, CaseIterable { + {%- for variation, config in variations.size %} + case {{ variation | sizeKey }} + {%- endfor %} +} + +extension LinkButtonSize: ButtonSizeConfiguration { + + public var height: CGFloat { + switch self { + {%- for variation, config in variations.size %} + case .{{ variation | sizeKey }}: return {{ config.height }} + {%- endfor %} + } + } + + public var cornerRadius: CGFloat { + 0 + } + + public var paddings: EdgeInsets { + switch self { + {%- for variation, config in variations.size %} + case .{{ variation | sizeKey }}: return EdgeInsets(top: 0, leading: {{ config.paddingStart }}, bottom: 0, trailing: {{ config.paddingEnd }}) + {%- endfor %} + } + } + + public var iconSize: CGSize { + switch self { + {%- for variation, config in variations.size %} + case .{{ variation | sizeKey }}: return CGSize(width: {{ config.iconSize }}, height: {{ config.iconSize }}) + {%- endfor %} + } + } + + public var spinnerSize: CGSize { + switch self { + {%- for variation, config in variations.size %} + case .{{ variation | sizeKey }}: return CGSize(width: {{ config.spinnerSize }}, height: {{ config.spinnerSize }}) + {%- endfor %} + } + } + + public var titleHorizontalGap: CGFloat { + switch self { + {%- for variation, config in variations.size %} + case .{{ variation | sizeKey }}: return {{ config.valueMargin | default:0 }} + {%- endfor %} + } + } + + public var iconHorizontalGap: CGFloat { + switch self { + {%- for variation, config in variations.size %} + case .{{ variation | sizeKey }}: return {{ config.iconMargin | default:0 }} + {%- endfor %} + } + } + + public var debugDescription: String { + return "LinkButtonSize" + } +} diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/LinkButtonTypography.stencil b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/LinkButtonTypography.stencil new file mode 100644 index 000000000..d7d740173 --- /dev/null +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/LinkButtonTypography.stencil @@ -0,0 +1,41 @@ +/* This file is code generated. */ + +import Foundation +import SDDSComponents + +public struct LinkButtonTypography: GeneralTypographyConfiguration { + typealias S = ButtonSizeConfiguration + + + {%- for variation, config in variations.size %} + let {{ variation | sizeKey }}: TypographyToken? + {%- endfor %} + + + init( + {%- for variation, config in variations.size %} + {{ variation | sizeKey }}: TypographyToken?{% if not forloop.last %},{% endif %} + {%- endfor %} + ) { + {%- for variation, config in variations.size %} + self.{{ variation | sizeKey }} = {{ variation | sizeKey }} + {%- endfor %} + } + + /** + Возвращает типографику для заданного размера кнопки. + + - Parameter size: Размер кнопки. + - Returns: Типографика для заданного размера кнопки или nil, если не задана. + */ + public func typography(with size: ButtonSizeConfiguration) -> TypographyToken? { + switch size as? LinkButtonSize { + {%- for variation, config in variations.size %} + case .{{ variation | sizeKey }}: return {{ variation | sizeKey }} + {%- endfor %} + case .none: + return nil + } + } +} + diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/ShadowToken.stencil b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/ShadowToken.stencil index ab0e3d005..ede5972cc 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/ShadowToken.stencil +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/ShadowToken.stencil @@ -1,3 +1,5 @@ +/* This file is code generated. */ + import SwiftUI import UIKit @_exported import SDDSThemeCore diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/Shadows.stencil b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/Shadows.stencil index 2b6476619..a8c054387 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/Shadows.stencil +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/Shadows.stencil @@ -1,3 +1,5 @@ +/* This file is code generated. */ + import SwiftUI import UIKit @_exported import SDDSThemeCore diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/ShapeToken.stencil b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/ShapeToken.stencil index aeb0f236a..7254f8666 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/ShapeToken.stencil +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/ShapeToken.stencil @@ -1,3 +1,5 @@ +/* This file is code generated. */ + import SwiftUI import UIKit @_exported import SDDSThemeCore diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/Shapes.stencil b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/Shapes.stencil index 5be717009..162021739 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/Shapes.stencil +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/Shapes.stencil @@ -1,3 +1,5 @@ +/* This file is code generated. */ + import SwiftUI import UIKit @_exported import SDDSThemeCore diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/Typographies.stencil b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/Typographies.stencil index d0b690b7c..39c12b1dd 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/Typographies.stencil +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/Typographies.stencil @@ -1,3 +1,5 @@ +/* This file is code generated. */ + import Foundation @_exported import SDDSThemeCore diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/TypographyToken.stencil b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/TypographyToken.stencil index 58d223022..eeb6ddfd7 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/TypographyToken.stencil +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Stencil/TypographyToken.stencil @@ -1,3 +1,5 @@ +/* This file is code generated. */ + import Foundation @_exported import SDDSThemeCore diff --git a/SDDSThemeBuilder/SDDSThemeBuilderCore/Utilities/TemplateRenderer/TemplateRenderer.swift b/SDDSThemeBuilder/SDDSThemeBuilderCore/Utilities/TemplateRenderer/TemplateRenderer.swift index e09b0620a..51ee0f54d 100644 --- a/SDDSThemeBuilder/SDDSThemeBuilderCore/Utilities/TemplateRenderer/TemplateRenderer.swift +++ b/SDDSThemeBuilder/SDDSThemeBuilderCore/Utilities/TemplateRenderer/TemplateRenderer.swift @@ -16,6 +16,19 @@ private enum Filter: String { case ensureDoubleInRange = "ensure_double_in_range" case ensureShapeKindInRange = "ensure_shape_kind_in_range" case ensureValidHex = "ensure_valid_hex" + case findState = "findState" + case escapeSwiftKeyword = "escapeSwiftKeyword" + case camelCase = "camelCase" + case sizeKey = "sizeKey" + case adjustedCornerRadius = "adjustedCornerRadius" +} + +private enum SwiftKeyword: String, CaseIterable { + case `default`, `class`, `struct`, `enum`, `protocol`, `extension`, `func`, `var`, `let`, `import` + + static var allKeywords: Set { + return Set(SwiftKeyword.allCases.map { $0.rawValue }) + } } final class TemplateRenderer: Renderable { @@ -112,6 +125,45 @@ final class TemplateRenderer: Renderable { return stringValue } + ext.registerFilter(Filter.findState.rawValue) { (value: Any?, arguments: [Any?]) in + guard let states = value as? [[String: Any]], + let targetState = arguments.first as? String else { + throw TemplateSyntaxError("Invalid input for findState filter") + } + + for state in states { + if let stateArray = state["state"] as? [String], + stateArray.contains(targetState), + let value = state["value"] as? String { + return value.camelCase + } + } + + throw TemplateSyntaxError("State '\(targetState)' not found in states array") + } + ext.registerFilter(Filter.escapeSwiftKeyword.rawValue) { (value: Any?) in + guard let keyword = value as? String else { return value } + return SwiftKeyword.allKeywords.contains(keyword) ? "`\(keyword)`" : keyword + } + ext.registerFilter(Filter.camelCase.rawValue) { (value: Any?) in + guard let stringValue = value as? String else { return value } + return stringValue.camelCase + } + ext.registerFilter(Filter.sizeKey.rawValue) { (value: Any?) in + guard let stringValue = value as? String else { return value } + return stringValue.sizeKey + } + ext.registerFilter(Filter.adjustedCornerRadius.rawValue) { (value: Any?, arguments: [Any?]) in + guard let baseCornerRadiusKey = value as? String else { + throw TemplateSyntaxError("Invalid value for adjustedCornerRadius filter") + } + + let adjustmentValue = arguments.first.flatMap(Double.convert) ?? 0 + let adjustment = adjustmentValue > 0 ? "+ \(adjustmentValue)" : adjustmentValue < 0 ? "- \(-adjustmentValue)" : "" + + return "ShapeToken.\(baseCornerRadiusKey.camelCase).cornerRadius \(adjustment)".trimmingCharacters(in: .whitespaces) + } + } } diff --git a/SddsIcons/.gitignore b/SddsIcons/.gitignore deleted file mode 100644 index 0023a5340..000000000 --- a/SddsIcons/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -.DS_Store -/.build -/Packages -xcuserdata/ -DerivedData/ -.swiftpm/configuration/registries.json -.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata -.netrc diff --git a/Themes/SDDSButton/BasicButton+ColorVariations.swift b/Themes/SDDSButton/BasicButton+ColorVariations.swift new file mode 100644 index 000000000..83303c6bb --- /dev/null +++ b/Themes/SDDSButton/BasicButton+ColorVariations.swift @@ -0,0 +1,445 @@ +import Foundation +import SDDSComponents +import SDDSThemeCore + +public extension ButtonAppearanceVariation { + var accent: Self { + .init( + appearance: appearance.applyColorVariation(variation: BasicButton.accent.appearance) + ) + } + var black: Self { + .init( + appearance: appearance.applyColorVariation(variation: BasicButton.black.appearance) + ) + } + var clear: Self { + .init( + appearance: appearance.applyColorVariation(variation: BasicButton.clear.appearance) + ) + } + var dark: Self { + .init( + appearance: appearance.applyColorVariation(variation: BasicButton.dark.appearance) + ) + } + var `default`: Self { + .init( + appearance: appearance.applyColorVariation(variation: BasicButton.default.appearance) + ) + } + var negative: Self { + .init( + appearance: appearance.applyColorVariation(variation: BasicButton.negative.appearance) + ) + } + var positive: Self { + .init( + appearance: appearance.applyColorVariation(variation: BasicButton.positive.appearance) + ) + } + var secondary: Self { + .init( + appearance: appearance.applyColorVariation(variation: BasicButton.secondary.appearance) + ) + } + var warning: Self { + .init( + appearance: appearance.applyColorVariation(variation: BasicButton.warning.appearance) + ) + } + var white: Self { + .init( + appearance: appearance.applyColorVariation(variation: BasicButton.white.appearance) + ) + } +} + +public extension BasicButton { + static var accent: ButtonAppearanceVariation { + .init( + name: "accent", + appearance: ButtonAppearance( + titleTypography: BasicButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + subtitleTypography: BasicButton.subtitleTypography, + subtitleColor: ButtonColor( + defaultColor: .textOnDarkSecondary, + highlightedColor: .textOnDarkSecondaryActive, + hoveredColor: .textOnDarkSecondaryHover + ), + iconColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultAccent, + highlightedColor: .surfaceDefaultAccentActive, + hoveredColor: .surfaceDefaultAccentHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var black: ButtonAppearanceVariation { + .init( + name: "black", + appearance: ButtonAppearance( + titleTypography: BasicButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + subtitleTypography: BasicButton.subtitleTypography, + subtitleColor: ButtonColor( + defaultColor: .textOnDarkSecondary, + highlightedColor: .textOnDarkSecondaryActive, + hoveredColor: .textOnDarkSecondaryHover + ), + iconColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceOnLightSolidDefault, + highlightedColor: .surfaceOnLightSolidDefaultActive, + hoveredColor: .surfaceOnLightSolidDefaultHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var clear: ButtonAppearanceVariation { + .init( + name: "clear", + appearance: ButtonAppearance( + titleTypography: BasicButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + subtitleTypography: BasicButton.subtitleTypography, + subtitleColor: ButtonColor( + defaultColor: .textDefaultSecondary, + highlightedColor: .textDefaultSecondaryActive, + hoveredColor: .textDefaultSecondaryHover + ), + iconColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultClear, + highlightedColor: .surfaceDefaultClearActive, + hoveredColor: .surfaceDefaultClearHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0.06 + ) + ) + } + static var dark: ButtonAppearanceVariation { + .init( + name: "dark", + appearance: ButtonAppearance( + titleTypography: BasicButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + subtitleTypography: BasicButton.subtitleTypography, + subtitleColor: ButtonColor( + defaultColor: .textOnDarkSecondary, + highlightedColor: .textOnDarkSecondaryActive, + hoveredColor: .textOnDarkSecondaryHover + ), + iconColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceOnLightTransparentDeep, + highlightedColor: .surfaceOnLightTransparentDeepActive, + hoveredColor: .surfaceOnLightTransparentDeepHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var `default`: ButtonAppearanceVariation { + .init( + name: "default", + appearance: ButtonAppearance( + titleTypography: BasicButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textInversePrimary, + highlightedColor: .textInversePrimaryActive, + hoveredColor: .textInversePrimaryHover + ), + subtitleTypography: BasicButton.subtitleTypography, + subtitleColor: ButtonColor( + defaultColor: .textInverseSecondary, + highlightedColor: .textInverseSecondaryActive, + hoveredColor: .textInverseSecondaryHover + ), + iconColor: ButtonColor( + defaultColor: .textInversePrimary, + highlightedColor: .textInversePrimaryActive, + hoveredColor: .textInversePrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textInversePrimary, + highlightedColor: .textInversePrimaryActive, + hoveredColor: .textInversePrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultSolidDefault, + highlightedColor: .surfaceDefaultSolidDefaultActive, + hoveredColor: .surfaceDefaultSolidDefaultHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var negative: ButtonAppearanceVariation { + .init( + name: "negative", + appearance: ButtonAppearance( + titleTypography: BasicButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + subtitleTypography: BasicButton.subtitleTypography, + subtitleColor: ButtonColor( + defaultColor: .textOnDarkSecondary, + highlightedColor: .textOnDarkSecondaryActive, + hoveredColor: .textOnDarkSecondaryHover + ), + iconColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultNegative, + highlightedColor: .surfaceDefaultNegativeActive, + hoveredColor: .surfaceDefaultNegativeHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var positive: ButtonAppearanceVariation { + .init( + name: "positive", + appearance: ButtonAppearance( + titleTypography: BasicButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + subtitleTypography: BasicButton.subtitleTypography, + subtitleColor: ButtonColor( + defaultColor: .textOnDarkSecondary, + highlightedColor: .textOnDarkSecondaryActive, + hoveredColor: .textOnDarkSecondaryHover + ), + iconColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultPositive, + highlightedColor: .surfaceDefaultPositiveActive, + hoveredColor: .surfaceDefaultPositiveHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var secondary: ButtonAppearanceVariation { + .init( + name: "secondary", + appearance: ButtonAppearance( + titleTypography: BasicButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + subtitleTypography: BasicButton.subtitleTypography, + subtitleColor: ButtonColor( + defaultColor: .textDefaultSecondary, + highlightedColor: .textDefaultSecondaryActive, + hoveredColor: .textDefaultSecondaryHover + ), + iconColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultTransparentSecondary, + highlightedColor: .surfaceDefaultTransparentSecondaryActive, + hoveredColor: .surfaceDefaultTransparentSecondaryHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var warning: ButtonAppearanceVariation { + .init( + name: "warning", + appearance: ButtonAppearance( + titleTypography: BasicButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + subtitleTypography: BasicButton.subtitleTypography, + subtitleColor: ButtonColor( + defaultColor: .textOnDarkSecondary, + highlightedColor: .textOnDarkSecondaryActive, + hoveredColor: .textOnDarkSecondaryHover + ), + iconColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultWarning, + highlightedColor: .surfaceDefaultWarningActive, + hoveredColor: .surfaceDefaultWarningHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var white: ButtonAppearanceVariation { + .init( + name: "white", + appearance: ButtonAppearance( + titleTypography: BasicButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textOnLightPrimary, + highlightedColor: .textOnLightPrimaryActive, + hoveredColor: .textOnLightPrimaryHover + ), + subtitleTypography: BasicButton.subtitleTypography, + subtitleColor: ButtonColor( + defaultColor: .textOnLightSecondary, + highlightedColor: .textOnLightSecondaryActive, + hoveredColor: .textOnLightSecondaryHover + ), + iconColor: ButtonColor( + defaultColor: .textOnLightPrimary, + highlightedColor: .textOnLightPrimaryActive, + hoveredColor: .textOnLightPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnLightPrimary, + highlightedColor: .textOnLightPrimaryActive, + hoveredColor: .textOnLightPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceOnLightSolidDefault, + highlightedColor: .surfaceOnLightSolidDefaultActive, + hoveredColor: .surfaceOnLightSolidDefaultHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + + static var all: [ButtonAppearanceVariation] { + [ + + BasicButton.accent, + + BasicButton.black, + + BasicButton.clear, + + BasicButton.dark, + + BasicButton.`default`, + + BasicButton.negative, + + BasicButton.positive, + + BasicButton.secondary, + + BasicButton.warning, + + BasicButton.white + + ] + } +} diff --git a/Themes/SDDSButton/BasicButton+SizeVariations.swift b/Themes/SDDSButton/BasicButton+SizeVariations.swift new file mode 100644 index 000000000..6fbc4916d --- /dev/null +++ b/Themes/SDDSButton/BasicButton+SizeVariations.swift @@ -0,0 +1,54 @@ +import Foundation +import SDDSComponents +import SDDSThemeCore + +// MARK: - Size +public extension ButtonAppearanceVariation { + var large: Self { + .init( + appearance: appearance + .size(BasicButtonSize.large) + .titleTypography(BasicButton.titleTypography) + .subtitleTypography(BasicButton.subtitleTypography) + ) + } + var medium: Self { + .init( + appearance: appearance + .size(BasicButtonSize.medium) + .titleTypography(BasicButton.titleTypography) + .subtitleTypography(BasicButton.subtitleTypography) + ) + } + var small: Self { + .init( + appearance: appearance + .size(BasicButtonSize.small) + .titleTypography(BasicButton.titleTypography) + .subtitleTypography(BasicButton.subtitleTypography) + ) + } + var extraSmall: Self { + .init( + appearance: appearance + .size(BasicButtonSize.extraSmall) + .titleTypography(BasicButton.titleTypography) + .subtitleTypography(BasicButton.subtitleTypography) + ) + } +} + +public extension BasicButton { + static var large: ButtonAppearanceVariation { + return ButtonAppearanceVariation().large + } + static var medium: ButtonAppearanceVariation { + return ButtonAppearanceVariation().medium + } + static var small: ButtonAppearanceVariation { + return ButtonAppearanceVariation().small + } + static var extraSmall: ButtonAppearanceVariation { + return ButtonAppearanceVariation().extraSmall + } +} diff --git a/Themes/SDDSButton/BasicButton+Typography.swift b/Themes/SDDSButton/BasicButton+Typography.swift new file mode 100644 index 000000000..46befed22 --- /dev/null +++ b/Themes/SDDSButton/BasicButton+Typography.swift @@ -0,0 +1,27 @@ +import Foundation +import SDDSServTheme +import SDDSComponents +import SDDSThemeCore + +public extension BasicButton { + static var titleTypography: TypographyConfiguration { + BasicButtonTypography( + large: AdaptiveTypographyToken.bodyLBold.typography, + medium: AdaptiveTypographyToken.bodyMBold.typography, + small: AdaptiveTypographyToken.bodySBold.typography, + extraSmall: AdaptiveTypographyToken.bodyXsBold.typography, + extraExtraSmall: AdaptiveTypographyToken.bodyXsBold.typography + ) + .asContainer + } + static var subtitleTypography: TypographyConfiguration { + BasicButtonTypography( + large: AdaptiveTypographyToken.bodyLBold.typography, + medium: AdaptiveTypographyToken.bodyMBold.typography, + small: AdaptiveTypographyToken.bodySBold.typography, + extraSmall: AdaptiveTypographyToken.bodyXsBold.typography, + extraExtraSmall: AdaptiveTypographyToken.bodyXsBold.typography + ) + .asContainer + } +} diff --git a/Themes/SDDSButton/BasicButtonSize+ButtonSizeConfiguration.swift b/Themes/SDDSButton/BasicButtonSize+ButtonSizeConfiguration.swift new file mode 100644 index 000000000..bfe360e6e --- /dev/null +++ b/Themes/SDDSButton/BasicButtonSize+ButtonSizeConfiguration.swift @@ -0,0 +1,80 @@ +import Foundation +import SDDSComponents +import SwiftUI + +public enum BasicButtonSize: String, CaseIterable { + case large + case medium + case small + case extraSmall +} + +extension BasicButtonSize: ButtonSizeConfiguration { + + public var height: CGFloat { + switch self { + case .large: return 56 + case .medium: return 48 + case .small: return 40 + case .extraSmall: return 32 + } + } + + public var cornerRadius: CGFloat { + switch self { + case .large: return ShapeToken.roundL.cornerRadius - 2.0 + case .medium: return ShapeToken.roundM.cornerRadius + case .small: return ShapeToken.roundM.cornerRadius - 2.0 + case .extraSmall: return ShapeToken.roundS.cornerRadius + } + } + + public var paddings: EdgeInsets { + switch self { + case .large: return EdgeInsets(top: 0, leading: 24, bottom: 0, trailing: 24) + case .medium: return EdgeInsets(top: 0, leading: 20, bottom: 0, trailing: 20) + case .small: return EdgeInsets(top: 0, leading: 16, bottom: 0, trailing: 16) + case .extraSmall: return EdgeInsets(top: 0, leading: 12, bottom: 0, trailing: 12) + } + } + + public var iconSize: CGSize { + switch self { + case .large: return CGSize(width: 24, height: 24) + case .medium: return CGSize(width: 24, height: 24) + case .small: return CGSize(width: 24, height: 24) + case .extraSmall: return CGSize(width: 16, height: 16) + } + } + + public var spinnerSize: CGSize { + switch self { + case .large: return CGSize(width: 22, height: 22) + case .medium: return CGSize(width: 22, height: 22) + case .small: return CGSize(width: 22, height: 22) + case .extraSmall: return CGSize(width: 16, height: 16) + } + } + + public var titleHorizontalGap: CGFloat { + switch self { + case .large: return 4 + case .medium: return 4 + case .small: return 4 + case .extraSmall: return 2 + } + } + + public var iconHorizontalGap: CGFloat { + switch self { + case .large: return 8 + case .medium: return 6 + case .small: return 4 + case .extraSmall: return 4 + } + } + + public var debugDescription: String { + return "BasicButtonSize" + } +} diff --git a/Themes/SDDSButton/BasicButtonTypography.swift b/Themes/SDDSButton/BasicButtonTypography.swift new file mode 100644 index 000000000..337b386da --- /dev/null +++ b/Themes/SDDSButton/BasicButtonTypography.swift @@ -0,0 +1,41 @@ +import Foundation +import SDDSComponents + +public struct BasicButtonTypography: GeneralTypographyConfiguration { + typealias S = ButtonSizeConfiguration + + let large: TypographyToken? + let medium: TypographyToken? + let small: TypographyToken? + let extraSmall: TypographyToken? + let extraExtraSmall: TypographyToken? + + init(large: TypographyToken?, medium: TypographyToken?, small: TypographyToken?, extraSmall: TypographyToken?, extraExtraSmall: TypographyToken?) { + self.large = large + self.medium = medium + self.small = small + self.extraSmall = extraSmall + self.extraExtraSmall = extraExtraSmall + } + + /** + Возвращает типографику для заданного размера кнопки. + + - Parameter size: Размер кнопки. + - Returns: Типографика для заданного размера кнопки или nil, если не задана. + */ + public func typography(with size: ButtonSizeConfiguration) -> TypographyToken? { + switch size as? BasicButtonSize { + case .large: + return large + case .medium: + return medium + case .small: + return small + case .extraSmall: + return extraSmall + case .none: + return medium + } + } +} diff --git a/Themes/SDDSButton/IconButton+ColorVariations.swift b/Themes/SDDSButton/IconButton+ColorVariations.swift new file mode 100644 index 000000000..bed453dee --- /dev/null +++ b/Themes/SDDSButton/IconButton+ColorVariations.swift @@ -0,0 +1,425 @@ +// MARK: - Colors +import Foundation +import SDDSComponents +import SDDSThemeCore + +public extension ButtonAppearanceVariation { + var accent: Self { + .init( + appearance: appearance.applyColorVariation(variation: IconButton.accent.appearance) + ) + } + var black: Self { + .init( + appearance: appearance.applyColorVariation(variation: IconButton.black.appearance) + ) + } + var clear: Self { + .init( + appearance: appearance.applyColorVariation(variation: IconButton.clear.appearance) + ) + } + var dark: Self { + .init( + appearance: appearance.applyColorVariation(variation: IconButton.dark.appearance) + ) + } + var `default`: Self { + .init( + appearance: appearance.applyColorVariation(variation: IconButton.`default`.appearance) + ) + } + var negative: Self { + .init( + appearance: appearance.applyColorVariation(variation: IconButton.negative.appearance) + ) + } + var positive: Self { + .init( + appearance: appearance.applyColorVariation(variation: IconButton.positive.appearance) + ) + } + var secondary: Self { + .init( + appearance: appearance.applyColorVariation(variation: IconButton.secondary.appearance) + ) + } + var warning: Self { + .init( + appearance: appearance.applyColorVariation(variation: IconButton.warning.appearance) + ) + } + var white: Self { + .init( + appearance: appearance.applyColorVariation(variation: IconButton.white.appearance) + ) + } +} + +public extension IconButton { + static var accent: ButtonAppearanceVariation { + .init( + name: "accent", + appearance: ButtonAppearance( + titleColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultAccent, + highlightedColor: .surfaceDefaultAccentActive, + hoveredColor: .surfaceDefaultAccentHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var black: ButtonAppearanceVariation { + .init( + name: "black", + appearance: ButtonAppearance( + titleColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceOnLightSolidDefault, + highlightedColor: .surfaceOnLightSolidDefaultActive, + hoveredColor: .surfaceOnLightSolidDefaultHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var clear: ButtonAppearanceVariation { + .init( + name: "clear", + appearance: ButtonAppearance( + titleColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultClear, + highlightedColor: .surfaceDefaultClearActive, + hoveredColor: .surfaceDefaultClearHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var dark: ButtonAppearanceVariation { + .init( + name: "dark", + appearance: ButtonAppearance( + titleColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceOnLightTransparentDeep, + highlightedColor: .surfaceOnLightTransparentDeepActive, + hoveredColor: .surfaceOnLightTransparentDeepHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var `default`: ButtonAppearanceVariation { + .init( + name: "default", + appearance: ButtonAppearance( + titleColor: ButtonColor( + defaultColor: .textInversePrimary, + highlightedColor: .textInversePrimaryActive, + hoveredColor: .textInversePrimaryHover + ), + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textInversePrimary, + highlightedColor: .textInversePrimaryActive, + hoveredColor: .textInversePrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textInversePrimary, + highlightedColor: .textInversePrimaryActive, + hoveredColor: .textInversePrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultSolidDefault, + highlightedColor: .surfaceDefaultSolidDefaultActive, + hoveredColor: .surfaceDefaultSolidDefaultHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var negative: ButtonAppearanceVariation { + .init( + name: "negative", + appearance: ButtonAppearance( + titleColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultNegative, + highlightedColor: .surfaceDefaultNegativeActive, + hoveredColor: .surfaceDefaultNegativeHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var positive: ButtonAppearanceVariation { + .init( + name: "positive", + appearance: ButtonAppearance( + titleColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultPositive, + highlightedColor: .surfaceDefaultPositiveActive, + hoveredColor: .surfaceDefaultPositiveHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var secondary: ButtonAppearanceVariation { + .init( + name: "secondary", + appearance: ButtonAppearance( + titleColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultTransparentSecondary, + highlightedColor: .surfaceDefaultTransparentSecondaryActive, + hoveredColor: .surfaceDefaultTransparentSecondaryHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var warning: ButtonAppearanceVariation { + .init( + name: "warning", + appearance: ButtonAppearance( + titleColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultWarning, + highlightedColor: .surfaceDefaultWarningActive, + hoveredColor: .surfaceDefaultWarningHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var white: ButtonAppearanceVariation { + .init( + name: "white", + appearance: ButtonAppearance( + titleColor: ButtonColor( + defaultColor: .textOnLightPrimary, + highlightedColor: .textOnLightPrimaryActive, + hoveredColor: .textOnLightPrimaryHover + ), + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textOnLightPrimary, + highlightedColor: .textOnLightPrimaryActive, + hoveredColor: .textOnLightPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnLightPrimary, + highlightedColor: .textOnLightPrimaryActive, + hoveredColor: .textOnLightPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceOnLightSolidDefault, + highlightedColor: .surfaceOnLightSolidDefaultActive, + hoveredColor: .surfaceOnLightSolidDefaultHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var all: [ButtonAppearanceVariation] { + [ + + IconButton.accent, + + IconButton.black, + + IconButton.clear, + + IconButton.dark, + + IconButton.`default`, + + IconButton.negative, + + IconButton.positive, + + IconButton.secondary, + + IconButton.warning, + + IconButton.white + + ] + } +} diff --git a/Themes/SDDSButton/IconButton+SizeVariations.swift b/Themes/SDDSButton/IconButton+SizeVariations.swift new file mode 100644 index 000000000..e9faa3f6b --- /dev/null +++ b/Themes/SDDSButton/IconButton+SizeVariations.swift @@ -0,0 +1,46 @@ +import Foundation +import SDDSComponents +import SDDSThemeCore + +// MARK: - Size +public extension ButtonAppearanceVariation { + var large: Self { + .init( + appearance: appearance + .size(IconButtonSize.large) + ) + } + var medium: Self { + .init( + appearance: appearance + .size(IconButtonSize.medium) + ) + } + var small: Self { + .init( + appearance: appearance + .size(IconButtonSize.small) + ) + } + var extraSmall: Self { + .init( + appearance: appearance + .size(IconButtonSize.extraSmall) + ) + } +} + +public extension IconButton { + static var large: ButtonAppearanceVariation { + return ButtonAppearanceVariation().large + } + static var medium: ButtonAppearanceVariation { + return ButtonAppearanceVariation().medium + } + static var small: ButtonAppearanceVariation { + return ButtonAppearanceVariation().small + } + static var extraSmall: ButtonAppearanceVariation { + return ButtonAppearanceVariation().extraSmall + } +} diff --git a/Themes/SDDSButton/IconButtonSize+ButtonSizeConfiguration.swift b/Themes/SDDSButton/IconButtonSize+ButtonSizeConfiguration.swift new file mode 100644 index 000000000..3dc0b954f --- /dev/null +++ b/Themes/SDDSButton/IconButtonSize+ButtonSizeConfiguration.swift @@ -0,0 +1,80 @@ +import Foundation +import SDDSComponents +import SwiftUI + +public enum IconButtonSize: String, CaseIterable { + case large + case medium + case small + case extraSmall +} + +extension IconButtonSize: ButtonSizeConfiguration { + + public var height: CGFloat { + switch self { + case .large: return 56 + case .medium: return 48 + case .small: return 40 + case .extraSmall: return 32 + } + } + + public var cornerRadius: CGFloat { + switch self { + case .large: return ShapeToken.roundL.cornerRadius - 2.0 + case .medium: return ShapeToken.roundM.cornerRadius + case .small: return ShapeToken.roundM.cornerRadius - 2.0 + case .extraSmall: return ShapeToken.roundS.cornerRadius + } + } + + public var paddings: EdgeInsets { + switch self { + case .large: return EdgeInsets(top: 0, leading: 16, bottom: 0, trailing: 16) + case .medium: return EdgeInsets(top: 0, leading: 12, bottom: 0, trailing: 12) + case .small: return EdgeInsets(top: 0, leading: 8, bottom: 0, trailing: 8) + case .extraSmall: return EdgeInsets(top: 0, leading: 8, bottom: 0, trailing: 8) + } + } + + public var iconSize: CGSize { + switch self { + case .large: return CGSize(width: 24, height: 24) + case .medium: return CGSize(width: 24, height: 24) + case .small: return CGSize(width: 24, height: 24) + case .extraSmall: return CGSize(width: 16, height: 16) + } + } + + public var spinnerSize: CGSize { + switch self { + case .large: return CGSize(width: 22, height: 22) + case .medium: return CGSize(width: 22, height: 22) + case .small: return CGSize(width: 22, height: 22) + case .extraSmall: return CGSize(width: 16, height: 16) + } + } + + public var titleHorizontalGap: CGFloat { + switch self { + case .large: return 0 + case .medium: return 0 + case .small: return 0 + case .extraSmall: return 0 + } + } + + public var iconHorizontalGap: CGFloat { + switch self { + case .large: return 0 + case .medium: return 0 + case .small: return 0 + case .extraSmall: return 0 + } + } + + public var debugDescription: String { + return "IconButtonSize" + } +} diff --git a/Themes/SDDSButton/LinkButton+ColorVariations.swift b/Themes/SDDSButton/LinkButton+ColorVariations.swift new file mode 100644 index 000000000..6c519d5be --- /dev/null +++ b/Themes/SDDSButton/LinkButton+ColorVariations.swift @@ -0,0 +1,272 @@ +import Foundation +import SDDSComponents +import SDDSThemeCore + +public extension ButtonAppearanceVariation { + var accent: Self { + .init( + appearance: appearance.applyColorVariation(variation: LinkButton.accent.appearance) + ) + } + var `default`: Self { + .init( + appearance: appearance.applyColorVariation(variation: LinkButton.`default`.appearance) + ) + } + var negative: Self { + .init( + appearance: appearance.applyColorVariation(variation: LinkButton.negative.appearance) + ) + } + var positive: Self { + .init( + appearance: appearance.applyColorVariation(variation: LinkButton.positive.appearance) + ) + } + var secondary: Self { + .init( + appearance: appearance.applyColorVariation(variation: LinkButton.secondary.appearance) + ) + } + var warning: Self { + .init( + appearance: appearance.applyColorVariation(variation: LinkButton.warning.appearance) + ) + } +} + +public extension LinkButton { + static var accent: ButtonAppearanceVariation { + .init( + name: "accent", + appearance: ButtonAppearance( + titleTypography: LinkButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textDefaultAccent, + highlightedColor: .textDefaultAccentActive, + hoveredColor: .textDefaultAccentHover + ), + subtitleTypography: .default, + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textDefaultAccent, + highlightedColor: .textDefaultAccentActive, + hoveredColor: .textDefaultAccentHover + ), + spinnerColor: ButtonColor( + defaultColor: .textDefaultAccent, + highlightedColor: .textDefaultAccentActive, + hoveredColor: .textDefaultAccentHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultClear, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + disabledAlpha: 0.4, + loadingAlpha: 0.06 + ) + ) + } + static var `default`: ButtonAppearanceVariation { + .init( + name: "default", + appearance: ButtonAppearance( + titleTypography: LinkButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + subtitleTypography: .default, + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultClear, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + disabledAlpha: 0.4, + loadingAlpha: 0.06 + ) + ) + } + static var negative: ButtonAppearanceVariation { + .init( + name: "negative", + appearance: ButtonAppearance( + titleTypography: LinkButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textDefaultNegative, + highlightedColor: .textDefaultNegativeActive, + hoveredColor: .textDefaultNegativeHover + ), + subtitleTypography: .default, + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textDefaultNegative, + highlightedColor: .textDefaultNegativeActive, + hoveredColor: .textDefaultNegativeHover + ), + spinnerColor: ButtonColor( + defaultColor: .textDefaultNegative, + highlightedColor: .textDefaultNegativeActive, + hoveredColor: .textDefaultNegativeHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultClear, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + disabledAlpha: 0.4, + loadingAlpha: 0.06 + ) + ) + } + static var positive: ButtonAppearanceVariation { + .init( + name: "positive", + appearance: ButtonAppearance( + titleTypography: LinkButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textDefaultPositive, + highlightedColor: .textDefaultPositiveActive, + hoveredColor: .textDefaultPositiveHover + ), + subtitleTypography: .default, + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textDefaultPositive, + highlightedColor: .textDefaultPositiveActive, + hoveredColor: .textDefaultPositiveHover + ), + spinnerColor: ButtonColor( + defaultColor: .textDefaultPositive, + highlightedColor: .textDefaultPositiveActive, + hoveredColor: .textDefaultPositiveHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultClear, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + disabledAlpha: 0.4, + loadingAlpha: 0.06 + ) + ) + } + static var secondary: ButtonAppearanceVariation { + .init( + name: "secondary", + appearance: ButtonAppearance( + titleTypography: LinkButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textDefaultSecondary, + highlightedColor: .textDefaultSecondaryActive, + hoveredColor: .textDefaultSecondaryHover + ), + subtitleTypography: .default, + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textDefaultSecondary, + highlightedColor: .textDefaultSecondaryActive, + hoveredColor: .textDefaultSecondaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textDefaultSecondary, + highlightedColor: .textDefaultSecondaryActive, + hoveredColor: .textDefaultSecondaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultClear, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + disabledAlpha: 0.4, + loadingAlpha: 0.06 + ) + ) + } + static var warning: ButtonAppearanceVariation { + .init( + name: "warning", + appearance: ButtonAppearance( + titleTypography: LinkButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textDefaultWarning, + highlightedColor: .textDefaultWarningActive, + hoveredColor: .textDefaultWarningHover + ), + subtitleTypography: .default, + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textDefaultWarning, + highlightedColor: .textDefaultWarningActive, + hoveredColor: .textDefaultWarningHover + ), + spinnerColor: ButtonColor( + defaultColor: .textDefaultWarning, + highlightedColor: .textDefaultWarningActive, + hoveredColor: .textDefaultWarningHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceDefaultClear, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + disabledAlpha: 0.4, + loadingAlpha: 0.06 + ) + ) + } + static var all: [ButtonAppearanceVariation] { + [ + + LinkButton.accent, + + LinkButton.`default`, + + LinkButton.negative, + + LinkButton.positive, + + LinkButton.secondary, + + LinkButton.warning + + ] + } +} diff --git a/Themes/SDDSButton/LinkButton+SizeVariations.swift b/Themes/SDDSButton/LinkButton+SizeVariations.swift new file mode 100644 index 000000000..a8edfacb7 --- /dev/null +++ b/Themes/SDDSButton/LinkButton+SizeVariations.swift @@ -0,0 +1,50 @@ +import Foundation +import SDDSComponents +import SDDSThemeCore + +// MARK: - Size +public extension ButtonAppearanceVariation { + var large: Self { + .init( + appearance: appearance + .size(LinkButtonSize.large) + .titleTypography(LinkButton.titleTypography) + ) + } + var medium: Self { + .init( + appearance: appearance + .size(LinkButtonSize.medium) + .titleTypography(LinkButton.titleTypography) + ) + } + var small: Self { + .init( + appearance: appearance + .size(LinkButtonSize.small) + .titleTypography(LinkButton.titleTypography) + ) + } + var extraSmall: Self { + .init( + appearance: appearance + .size(LinkButtonSize.extraSmall) + .titleTypography(LinkButton.titleTypography) + ) + } +} + +public extension LinkButton { + static var large: ButtonAppearanceVariation { + return ButtonAppearanceVariation().large + } + static var medium: ButtonAppearanceVariation { + return ButtonAppearanceVariation().medium + } + static var small: ButtonAppearanceVariation { + return ButtonAppearanceVariation().small + } + static var extraSmall: ButtonAppearanceVariation { + return ButtonAppearanceVariation().extraSmall + } +} diff --git a/Themes/SDDSButton/LinkButton+Typography.swift b/Themes/SDDSButton/LinkButton+Typography.swift new file mode 100644 index 000000000..b24e3b07c --- /dev/null +++ b/Themes/SDDSButton/LinkButton+Typography.swift @@ -0,0 +1,17 @@ +import Foundation +import SDDSServTheme +import SDDSComponents +import SDDSThemeCore + +public extension LinkButton { + static var titleTypography: TypographyConfiguration { + LinkButtonTypography( + large: AdaptiveTypographyToken.bodyLBold.typography, + medium: AdaptiveTypographyToken.bodyMBold.typography, + small: AdaptiveTypographyToken.bodySBold.typography, + extraSmall: AdaptiveTypographyToken.bodyXsBold.typography, + extraExtraSmall: AdaptiveTypographyToken.bodyXsBold.typography + ) + .asContainer + } +} diff --git a/Themes/SDDSButton/LinkButtonSize+ButtonSizeConfiguration.swift b/Themes/SDDSButton/LinkButtonSize+ButtonSizeConfiguration.swift new file mode 100644 index 000000000..ea85dec20 --- /dev/null +++ b/Themes/SDDSButton/LinkButtonSize+ButtonSizeConfiguration.swift @@ -0,0 +1,75 @@ +import Foundation +import SDDSComponents +import SwiftUI + +public enum LinkButtonSize: String, CaseIterable { + case large + case medium + case small + case extraSmall +} + +extension LinkButtonSize: ButtonSizeConfiguration { + + public var height: CGFloat { + switch self { + case .large: return 56 + case .medium: return 48 + case .small: return 40 + case .extraSmall: return 32 + } + } + + public var cornerRadius: CGFloat { + 0 + } + + public var paddings: EdgeInsets { + switch self { + case .large: return EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0) + case .medium: return EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0) + case .small: return EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0) + case .extraSmall: return EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0) + } + } + + public var iconSize: CGSize { + switch self { + case .large: return CGSize(width: 24, height: 24) + case .medium: return CGSize(width: 24, height: 24) + case .small: return CGSize(width: 24, height: 24) + case .extraSmall: return CGSize(width: 16, height: 16) + } + } + + public var spinnerSize: CGSize { + switch self { + case .large: return CGSize(width: 22, height: 22) + case .medium: return CGSize(width: 22, height: 22) + case .small: return CGSize(width: 22, height: 22) + case .extraSmall: return CGSize(width: 16, height: 16) + } + } + + public var titleHorizontalGap: CGFloat { + switch self { + case .large: return 4 + case .medium: return 4 + case .small: return 4 + case .extraSmall: return 2 + } + } + + public var iconHorizontalGap: CGFloat { + switch self { + case .large: return 8 + case .medium: return 6 + case .small: return 4 + case .extraSmall: return 4 + } + } + + public var debugDescription: String { + return "LinkButtonSize" + } +} diff --git a/Themes/SDDSButton/LinkButtonTypography.swift b/Themes/SDDSButton/LinkButtonTypography.swift new file mode 100644 index 000000000..76a3aba18 --- /dev/null +++ b/Themes/SDDSButton/LinkButtonTypography.swift @@ -0,0 +1,41 @@ +import Foundation +import SDDSComponents + +public struct LinkButtonTypography: GeneralTypographyConfiguration { + typealias S = ButtonSizeConfiguration + + let large: TypographyToken? + let medium: TypographyToken? + let small: TypographyToken? + let extraSmall: TypographyToken? + let extraExtraSmall: TypographyToken? + + init(large: TypographyToken?, medium: TypographyToken?, small: TypographyToken?, extraSmall: TypographyToken?, extraExtraSmall: TypographyToken?) { + self.large = large + self.medium = medium + self.small = small + self.extraSmall = extraSmall + self.extraExtraSmall = extraExtraSmall + } + + /** + Возвращает типографику для заданного размера кнопки. + + - Parameter size: Размер кнопки. + - Returns: Типографика для заданного размера кнопки или nil, если не задана. + */ + public func typography(with size: ButtonSizeConfiguration) -> TypographyToken? { + switch size as? LinkButtonSize { + case .large: + return large + case .medium: + return medium + case .small: + return small + case .extraSmall: + return extraSmall + case .none: + return medium + } + } +} diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSAvatar/AvatarTypography.swift b/Themes/SDDSservTheme/SDDSAvatar/AvatarTypography.swift similarity index 93% rename from SDDSComponents/SDDSComponentsPreview/Components/SDDSAvatar/AvatarTypography.swift rename to Themes/SDDSservTheme/SDDSAvatar/AvatarTypography.swift index 66dfeed0d..329819d10 100644 --- a/SDDSComponents/SDDSComponentsPreview/Components/SDDSAvatar/AvatarTypography.swift +++ b/Themes/SDDSservTheme/SDDSAvatar/AvatarTypography.swift @@ -10,7 +10,7 @@ struct AvatarTypography: GeneralTypographyConfiguration { let small: TypographyToken? func typography(with size: AvatarSizeConfiguration) -> TypographyToken? { - switch size as? DefaultAvatarSize { + switch size as? SDDSAvatarSize { case .extraExtraLarge: return extraExtraLarge case .large: @@ -20,7 +20,7 @@ struct AvatarTypography: GeneralTypographyConfiguration { case .small: return small case .scalable, .none: - return nil + return medium } } } diff --git a/Themes/SDDSservTheme/SDDSAvatar/SDDSAvatar+ColorVariations.swift b/Themes/SDDSservTheme/SDDSAvatar/SDDSAvatar+ColorVariations.swift new file mode 100644 index 000000000..8e3f09201 --- /dev/null +++ b/Themes/SDDSservTheme/SDDSAvatar/SDDSAvatar+ColorVariations.swift @@ -0,0 +1,34 @@ +import Foundation +import SDDSComponents +import SDDSServTheme + +public extension AppearanceVariation { + var `default`: Self { + .init( + appearance: appearance.applyColorVariation(variation: SDDSAvatar.default.appearance) + ) + } +} + +public extension SDDSAvatar { + static var `default`: AppearanceVariation { + .init( + name: "default", + appearance: + .init( + textFillStyle: .gradient(Gradients.textDefaultAccentGradient), + backgroundFillStyle: .gradient(Gradients.surfaceDefaultAccentGradient), + backgroundOpacity: 0.2, + onlineStatusColor: Colors.textDefaultAccent, + offlineStatusColor: Colors.surfaceOnLightSolidTertiary, + textTypography: AvatarTypography.title + ) + ) + } + + static var all: [AppearanceVariation] { + [ + SDDSAvatar.default + ] + } +} diff --git a/Themes/SDDSservTheme/SDDSAvatar/SDDSAvatar+SizeVariations.swift b/Themes/SDDSservTheme/SDDSAvatar/SDDSAvatar+SizeVariations.swift new file mode 100644 index 000000000..5272244d6 --- /dev/null +++ b/Themes/SDDSservTheme/SDDSAvatar/SDDSAvatar+SizeVariations.swift @@ -0,0 +1,69 @@ +// MARK: - Size +import Foundation +import SDDSComponents +import SDDSThemeCore + +// MARK: - Size +public extension AppearanceVariation { + var extraExtraLarge: Self { + .init( + appearance: appearance + .size(SDDSAvatarSize.extraExtraLarge) + .textTypography(AvatarTypography.title) + ) + } + + var large: Self { + .init( + appearance: appearance + .size(SDDSAvatarSize.large) + .textTypography(AvatarTypography.title) + ) + } + + var medium: Self { + .init( + appearance: appearance + .size(SDDSAvatarSize.medium) + .textTypography(AvatarTypography.title) + ) + } + + var small: Self { + .init( + appearance: appearance + .size(SDDSAvatarSize.small) + .textTypography(AvatarTypography.title) + ) + } + + func scallable(height: CGFloat) -> Self { + .init( + appearance: appearance + .size(SDDSAvatarSize.scalable(height: height)) + .textTypography(AvatarTypography.title) + ) + } +} + +public extension SDDSAvatar { + static var extraExtraLarge: AppearanceVariation { + return AppearanceVariation(appearance: AvatarAppearance()).extraExtraLarge + } + + static var large: AppearanceVariation { + return AppearanceVariation(appearance: AvatarAppearance()).large + } + + static var medium: AppearanceVariation { + return AppearanceVariation(appearance: AvatarAppearance()).medium + } + + static var small: AppearanceVariation { + return AppearanceVariation(appearance: AvatarAppearance()).small + } + + static func scallable(height: CGFloat) -> AppearanceVariation { + return AppearanceVariation(appearance: AvatarAppearance()).scallable(height: height) + } +} diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSAvatar/DefaultAvatarSize.swift b/Themes/SDDSservTheme/SDDSAvatar/SDDSAvatarSize.swift similarity index 96% rename from SDDSComponents/SDDSComponentsPreview/Components/SDDSAvatar/DefaultAvatarSize.swift rename to Themes/SDDSservTheme/SDDSAvatar/SDDSAvatarSize.swift index 5e92d4862..00eba36d4 100644 --- a/SDDSComponents/SDDSComponentsPreview/Components/SDDSAvatar/DefaultAvatarSize.swift +++ b/Themes/SDDSservTheme/SDDSAvatar/SDDSAvatarSize.swift @@ -3,7 +3,7 @@ import SwiftUI import SDDSComponents import SDDSServTheme -public enum DefaultAvatarSize: AvatarSizeConfiguration { +public enum SDDSAvatarSize: AvatarSizeConfiguration { case extraExtraLarge case large case medium diff --git a/Themes/SDDSservTheme/SDDSButton/BasicButton+ColorVariations.swift b/Themes/SDDSservTheme/SDDSButton/BasicButton+ColorVariations.swift index def434742..435a381ab 100644 --- a/Themes/SDDSservTheme/SDDSButton/BasicButton+ColorVariations.swift +++ b/Themes/SDDSservTheme/SDDSButton/BasicButton+ColorVariations.swift @@ -1,62 +1,55 @@ +/* This file is code generated. */ + import Foundation import SDDSComponents import SDDSThemeCore public extension ButtonAppearanceVariation { - var `default`: Self { + var accent: Self { .init( - appearance: appearance.applyColorVariation(variation: BasicButton.default.appearance) + appearance: appearance.applyColorVariation(variation: BasicButton.accent.appearance) ) } - - var secondary: Self { + var black: Self { .init( - appearance: appearance.applyColorVariation(variation: BasicButton.secondary.appearance) + appearance: appearance.applyColorVariation(variation: BasicButton.black.appearance) ) } - - var accent: Self { + var clear: Self { .init( - appearance: appearance.applyColorVariation(variation: BasicButton.accent.appearance) + appearance: appearance.applyColorVariation(variation: BasicButton.clear.appearance) ) } - - var positive: Self { + var dark: Self { .init( - appearance: appearance.applyColorVariation(variation: BasicButton.positive.appearance) + appearance: appearance.applyColorVariation(variation: BasicButton.dark.appearance) ) } - - var negative: Self { + var `default`: Self { .init( - appearance: appearance.applyColorVariation(variation: BasicButton.negative.appearance) + appearance: appearance.applyColorVariation(variation: BasicButton.default.appearance) ) } - - var warning: Self { + var negative: Self { .init( - appearance: appearance.applyColorVariation(variation: BasicButton.warning.appearance) + appearance: appearance.applyColorVariation(variation: BasicButton.negative.appearance) ) } - - var clear: Self { + var positive: Self { .init( - appearance: appearance.applyColorVariation(variation: BasicButton.clear.appearance) + appearance: appearance.applyColorVariation(variation: BasicButton.positive.appearance) ) } - - var dark: Self { + var secondary: Self { .init( - appearance: appearance.applyColorVariation(variation: BasicButton.dark.appearance) + appearance: appearance.applyColorVariation(variation: BasicButton.secondary.appearance) ) } - - var black: Self { + var warning: Self { .init( - appearance: appearance.applyColorVariation(variation: BasicButton.black.appearance) + appearance: appearance.applyColorVariation(variation: BasicButton.warning.appearance) ) } - var white: Self { .init( appearance: appearance.applyColorVariation(variation: BasicButton.white.appearance) @@ -65,46 +58,81 @@ public extension ButtonAppearanceVariation { } public extension BasicButton { - static var `default`: ButtonAppearanceVariation { + static var accent: ButtonAppearanceVariation { .init( - name: "default", + name: "accent", appearance: ButtonAppearance( titleTypography: BasicButton.titleTypography, titleColor: ButtonColor( - defaultColor: .textInversePrimary, - highlightedColor: .textInversePrimaryActive, - hoveredColor: .textInversePrimaryHover + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover ), subtitleTypography: BasicButton.subtitleTypography, subtitleColor: ButtonColor( - defaultColor: .textInverseSecondary, - highlightedColor: .textInverseSecondaryActive, - hoveredColor: .textInverseSecondaryHover + defaultColor: .textOnDarkSecondary, + highlightedColor: .textOnDarkSecondaryActive, + hoveredColor: .textOnDarkSecondaryHover ), iconColor: ButtonColor( - defaultColor: .textInversePrimary, - highlightedColor: .textInversePrimaryActive, - hoveredColor: .textInversePrimaryHover + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover ), spinnerColor: ButtonColor( - defaultColor: .textInversePrimary, - highlightedColor: .textInversePrimaryActive, - hoveredColor: .textInversePrimaryHover + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover ), backgroundColor: ButtonColor( - defaultColor: .surfaceDefaultSolidDefault, - highlightedColor: .surfaceDefaultSolidDefaultActive, - hoveredColor: .surfaceDefaultSolidDefaultHover + defaultColor: .surfaceDefaultAccent, + highlightedColor: .surfaceDefaultAccentActive, + hoveredColor: .surfaceDefaultAccentHover ), disabledAlpha: 0.4, loadingAlpha: 0 ) ) } - - static var secondary: ButtonAppearanceVariation { + static var black: ButtonAppearanceVariation { .init( - name: "secondary", + name: "black", + appearance: ButtonAppearance( + titleTypography: BasicButton.titleTypography, + titleColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + subtitleTypography: BasicButton.subtitleTypography, + subtitleColor: ButtonColor( + defaultColor: .textOnDarkSecondary, + highlightedColor: .textOnDarkSecondaryActive, + hoveredColor: .textOnDarkSecondaryHover + ), + iconColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceOnLightSolidDefault, + highlightedColor: .surfaceOnLightSolidDefaultActive, + hoveredColor: .surfaceOnLightSolidDefaultHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var clear: ButtonAppearanceVariation { + .init( + name: "clear", appearance: ButtonAppearance( titleTypography: BasicButton.titleTypography, titleColor: ButtonColor( @@ -129,19 +157,18 @@ public extension BasicButton { hoveredColor: .textDefaultPrimaryHover ), backgroundColor: ButtonColor( - defaultColor: .surfaceDefaultTransparentSecondary, - highlightedColor: .surfaceDefaultTransparentSecondaryActive, - hoveredColor: .surfaceDefaultTransparentSecondaryHover + defaultColor: .surfaceDefaultClear, + highlightedColor: .surfaceDefaultClearActive, + hoveredColor: .surfaceDefaultClearHover ), disabledAlpha: 0.4, - loadingAlpha: 0 + loadingAlpha: 0.06 ) ) } - - static var accent: ButtonAppearanceVariation { + static var dark: ButtonAppearanceVariation { .init( - name: "accent", + name: "dark", appearance: ButtonAppearance( titleTypography: BasicButton.titleTypography, titleColor: ButtonColor( @@ -166,53 +193,51 @@ public extension BasicButton { hoveredColor: .textOnDarkPrimaryHover ), backgroundColor: ButtonColor( - defaultColor: .surfaceDefaultAccent, - highlightedColor: .surfaceDefaultAccentActive, - hoveredColor: .surfaceDefaultAccentHover + defaultColor: .surfaceOnLightTransparentDeep, + highlightedColor: .surfaceOnLightTransparentDeepActive, + hoveredColor: .surfaceOnLightTransparentDeepHover ), disabledAlpha: 0.4, loadingAlpha: 0 ) ) } - - static var positive: ButtonAppearanceVariation { + static var `default`: ButtonAppearanceVariation { .init( - name: "positive", + name: "default", appearance: ButtonAppearance( titleTypography: BasicButton.titleTypography, titleColor: ButtonColor( - defaultColor: .textOnDarkPrimary, - highlightedColor: .textOnDarkPrimaryActive, - hoveredColor: .textOnDarkPrimaryHover + defaultColor: .textInversePrimary, + highlightedColor: .textInversePrimaryActive, + hoveredColor: .textInversePrimaryHover ), subtitleTypography: BasicButton.subtitleTypography, subtitleColor: ButtonColor( - defaultColor: .textOnDarkSecondary, - highlightedColor: .textOnDarkSecondaryActive, - hoveredColor: .textOnDarkSecondaryHover + defaultColor: .textInverseSecondary, + highlightedColor: .textInverseSecondaryActive, + hoveredColor: .textInverseSecondaryHover ), iconColor: ButtonColor( - defaultColor: .textOnDarkPrimary, - highlightedColor: .textOnDarkPrimaryActive, - hoveredColor: .textOnDarkPrimaryHover + defaultColor: .textInversePrimary, + highlightedColor: .textInversePrimaryActive, + hoveredColor: .textInversePrimaryHover ), spinnerColor: ButtonColor( - defaultColor: .textOnDarkPrimary, - highlightedColor: .textOnDarkPrimaryActive, - hoveredColor: .textOnDarkPrimaryHover + defaultColor: .textInversePrimary, + highlightedColor: .textInversePrimaryActive, + hoveredColor: .textInversePrimaryHover ), backgroundColor: ButtonColor( - defaultColor: .surfaceDefaultPositive, - highlightedColor: .surfaceDefaultPositiveActive, - hoveredColor: .surfaceDefaultPositiveHover + defaultColor: .surfaceDefaultSolidDefault, + highlightedColor: .surfaceDefaultSolidDefaultActive, + hoveredColor: .surfaceDefaultSolidDefaultHover ), disabledAlpha: 0.4, loadingAlpha: 0 ) ) } - static var negative: ButtonAppearanceVariation { .init( name: "negative", @@ -249,10 +274,9 @@ public extension BasicButton { ) ) } - - static var warning: ButtonAppearanceVariation { + static var positive: ButtonAppearanceVariation { .init( - name: "warning", + name: "positive", appearance: ButtonAppearance( titleTypography: BasicButton.titleTypography, titleColor: ButtonColor( @@ -277,19 +301,18 @@ public extension BasicButton { hoveredColor: .textOnDarkPrimaryHover ), backgroundColor: ButtonColor( - defaultColor: .surfaceDefaultWarning, - highlightedColor: .surfaceDefaultWarningActive, - hoveredColor: .surfaceDefaultWarningHover + defaultColor: .surfaceDefaultPositive, + highlightedColor: .surfaceDefaultPositiveActive, + hoveredColor: .surfaceDefaultPositiveHover ), disabledAlpha: 0.4, loadingAlpha: 0 ) ) } - - static var clear: ButtonAppearanceVariation { + static var secondary: ButtonAppearanceVariation { .init( - name: "clear", + name: "secondary", appearance: ButtonAppearance( titleTypography: BasicButton.titleTypography, titleColor: ButtonColor( @@ -314,56 +337,18 @@ public extension BasicButton { hoveredColor: .textDefaultPrimaryHover ), backgroundColor: ButtonColor( - defaultColor: .surfaceDefaultClear, - highlightedColor: .surfaceDefaultClearActive, - hoveredColor: .surfaceDefaultClearHover - ), - disabledAlpha: 0.4, - loadingAlpha: 0.06 - ) - ) - } - - static var dark: ButtonAppearanceVariation { - .init( - name: "dark", - appearance: ButtonAppearance( - titleTypography: BasicButton.titleTypography, - titleColor: ButtonColor( - defaultColor: .textOnDarkPrimary, - highlightedColor: .textOnDarkPrimaryActive, - hoveredColor: .textOnDarkPrimaryHover - ), - subtitleTypography: BasicButton.subtitleTypography, - subtitleColor: ButtonColor( - defaultColor: .textOnDarkSecondary, - highlightedColor: .textOnDarkSecondaryActive, - hoveredColor: .textOnDarkSecondaryHover - ), - iconColor: ButtonColor( - defaultColor: .textOnDarkPrimary, - highlightedColor: .textOnDarkPrimaryActive, - hoveredColor: .textOnDarkPrimaryHover - ), - spinnerColor: ButtonColor( - defaultColor: .textOnDarkPrimary, - highlightedColor: .textOnDarkPrimaryActive, - hoveredColor: .textOnDarkPrimaryHover - ), - backgroundColor: ButtonColor( - defaultColor: .surfaceOnLightTransparentDeep, - highlightedColor: .surfaceOnLightTransparentDeepActive, - hoveredColor: .surfaceOnLightTransparentDeepHover + defaultColor: .surfaceDefaultTransparentSecondary, + highlightedColor: .surfaceDefaultTransparentSecondaryActive, + hoveredColor: .surfaceDefaultTransparentSecondaryHover ), disabledAlpha: 0.4, loadingAlpha: 0 ) ) } - - static var black: ButtonAppearanceVariation { + static var warning: ButtonAppearanceVariation { .init( - name: "black", + name: "warning", appearance: ButtonAppearance( titleTypography: BasicButton.titleTypography, titleColor: ButtonColor( @@ -388,16 +373,15 @@ public extension BasicButton { hoveredColor: .textOnDarkPrimaryHover ), backgroundColor: ButtonColor( - defaultColor: .surfaceOnLightSolidDefault, - highlightedColor: .surfaceOnLightSolidDefaultActive, - hoveredColor: .surfaceOnLightSolidDefaultHover + defaultColor: .surfaceDefaultWarning, + highlightedColor: .surfaceDefaultWarningActive, + hoveredColor: .surfaceDefaultWarningHover ), disabledAlpha: 0.4, loadingAlpha: 0 ) ) } - static var white: ButtonAppearanceVariation { .init( name: "white", @@ -425,28 +409,39 @@ public extension BasicButton { hoveredColor: .textOnLightPrimaryHover ), backgroundColor: ButtonColor( - defaultColor: .surfaceOnLightSolidDefault, - highlightedColor: .surfaceOnLightSolidDefaultActive, - hoveredColor: .surfaceOnLightSolidDefaultHover + defaultColor: .surfaceOnDarkSolidDefault, + highlightedColor: .surfaceOnDarkSolidDefaultActive, + hoveredColor: .surfaceOnDarkSolidDefaultHover ), disabledAlpha: 0.4, loadingAlpha: 0 ) ) } - + static var all: [ButtonAppearanceVariation] { [ - BasicButton.default, - BasicButton.secondary, + BasicButton.accent, - BasicButton.positive, - BasicButton.negative, - BasicButton.warning, + + BasicButton.black, + BasicButton.clear, + BasicButton.dark, - BasicButton.black, + + BasicButton.`default`, + + BasicButton.negative, + + BasicButton.positive, + + BasicButton.secondary, + + BasicButton.warning, + BasicButton.white + ] } } diff --git a/Themes/SDDSservTheme/SDDSButton/BasicButton+SizeVariations.swift b/Themes/SDDSservTheme/SDDSButton/BasicButton+SizeVariations.swift index ca8a4015a..468cc5c89 100644 --- a/Themes/SDDSservTheme/SDDSButton/BasicButton+SizeVariations.swift +++ b/Themes/SDDSservTheme/SDDSButton/BasicButton+SizeVariations.swift @@ -1,4 +1,5 @@ -// MARK: - Size +/* This file is code generated. */ + import Foundation import SDDSComponents import SDDSThemeCore @@ -13,7 +14,6 @@ public extension ButtonAppearanceVariation { .subtitleTypography(BasicButton.subtitleTypography) ) } - var medium: Self { .init( appearance: appearance @@ -22,7 +22,6 @@ public extension ButtonAppearanceVariation { .subtitleTypography(BasicButton.subtitleTypography) ) } - var small: Self { .init( appearance: appearance @@ -31,7 +30,6 @@ public extension ButtonAppearanceVariation { .subtitleTypography(BasicButton.subtitleTypography) ) } - var extraSmall: Self { .init( appearance: appearance @@ -46,15 +44,12 @@ public extension BasicButton { static var large: ButtonAppearanceVariation { return ButtonAppearanceVariation().large } - static var medium: ButtonAppearanceVariation { return ButtonAppearanceVariation().medium } - static var small: ButtonAppearanceVariation { return ButtonAppearanceVariation().small } - static var extraSmall: ButtonAppearanceVariation { return ButtonAppearanceVariation().extraSmall } diff --git a/Themes/SDDSservTheme/SDDSButton/BasicButton+Typography.swift b/Themes/SDDSservTheme/SDDSButton/BasicButton+Typography.swift index ec6872a47..ea694003b 100644 --- a/Themes/SDDSservTheme/SDDSButton/BasicButton+Typography.swift +++ b/Themes/SDDSservTheme/SDDSButton/BasicButton+Typography.swift @@ -1,3 +1,5 @@ +/* This file is code generated. */ + import Foundation import SDDSComponents import SDDSThemeCore @@ -8,19 +10,16 @@ public extension BasicButton { large: AdaptiveTypographyToken.bodyLBold.typography, medium: AdaptiveTypographyToken.bodyMBold.typography, small: AdaptiveTypographyToken.bodySBold.typography, - extraSmall: AdaptiveTypographyToken.bodyXsBold.typography, - extraExtraSmall: AdaptiveTypographyToken.bodyXsNormal.typography + extraSmall: AdaptiveTypographyToken.bodyXsBold.typography ) .asContainer } - static var subtitleTypography: TypographyConfiguration { BasicButtonTypography( large: AdaptiveTypographyToken.bodyLBold.typography, medium: AdaptiveTypographyToken.bodyMBold.typography, small: AdaptiveTypographyToken.bodySBold.typography, - extraSmall: AdaptiveTypographyToken.bodyXsBold.typography, - extraExtraSmall: AdaptiveTypographyToken.bodyXsNormal.typography + extraSmall: AdaptiveTypographyToken.bodyXsBold.typography ) .asContainer } diff --git a/Themes/SDDSservTheme/SDDSButton/BasicButtonSize+ButtonSizeConfiguration.swift b/Themes/SDDSservTheme/SDDSButton/BasicButtonSize+ButtonSizeConfiguration.swift index e73b5b265..d02fa4bc4 100644 --- a/Themes/SDDSservTheme/SDDSButton/BasicButtonSize+ButtonSizeConfiguration.swift +++ b/Themes/SDDSservTheme/SDDSButton/BasicButtonSize+ButtonSizeConfiguration.swift @@ -1,3 +1,5 @@ +/* This file is code generated. */ + import Foundation import SDDSComponents import SwiftUI @@ -7,99 +9,74 @@ public enum BasicButtonSize: String, CaseIterable { case medium case small case extraSmall - case extraExtraSmall } extension BasicButtonSize: ButtonSizeConfiguration { public var height: CGFloat { switch self { - case .large: - return 56 - case .medium: - return 48 - case .small: - return 40 - case .extraSmall: - return 32 - case .extraExtraSmall: - return 24 + case .large: return 56 + case .medium: return 48 + case .small: return 40 + case .extraSmall: return 32 } } - + public var cornerRadius: CGFloat { switch self { - case .large: - return 14 - case .medium: - return 12 - case .small: - return 10 - case .extraSmall: - return 8 - case .extraExtraSmall: - return 6 + case .large: return ShapeToken.roundL.cornerRadius - 2.0 + case .medium: return ShapeToken.roundM.cornerRadius + case .small: return ShapeToken.roundM.cornerRadius - 2.0 + case .extraSmall: return ShapeToken.roundS.cornerRadius } } - + public var paddings: EdgeInsets { switch self { - case .large: - return EdgeInsets(top: 11, leading: 22, bottom: 11, trailing: 24) - case .medium: - return EdgeInsets(top: 11, leading: 20, bottom: 11, trailing: 20) - case .small: - return EdgeInsets(top: 11, leading: 16, bottom: 11, trailing: 16) - case .extraSmall: - return EdgeInsets(top: 11, leading: 12, bottom: 11, trailing: 12) - case .extraExtraSmall: - return EdgeInsets(top: 5, leading: 10, bottom: 5, trailing: 10) + case .large: return EdgeInsets(top: 0, leading: 24, bottom: 0, trailing: 24) + case .medium: return EdgeInsets(top: 0, leading: 20, bottom: 0, trailing: 20) + case .small: return EdgeInsets(top: 0, leading: 16, bottom: 0, trailing: 16) + case .extraSmall: return EdgeInsets(top: 0, leading: 12, bottom: 0, trailing: 12) } } - + public var iconSize: CGSize { switch self { - case .large, .medium, .small: - return CGSize(width: 24, height: 24) - case .extraSmall, .extraExtraSmall: - return CGSize(width: 16, height: 16) + case .large: return CGSize(width: 24, height: 24) + case .medium: return CGSize(width: 24, height: 24) + case .small: return CGSize(width: 24, height: 24) + case .extraSmall: return CGSize(width: 16, height: 16) } } - + public var spinnerSize: CGSize { switch self { - case .large, .medium, .small: - return CGSize(width: 22, height: 22) - case .extraSmall: - return CGSize(width: 16, height: 16) - case .extraExtraSmall: - return CGSize(width: 12, height: 12) + case .large: return CGSize(width: 22, height: 22) + case .medium: return CGSize(width: 22, height: 22) + case .small: return CGSize(width: 22, height: 22) + case .extraSmall: return CGSize(width: 16, height: 16) } } - + public var titleHorizontalGap: CGFloat { switch self { - case .extraSmall, .extraExtraSmall: - return 4 - default: - return 6 + case .large: return 4 + case .medium: return 4 + case .small: return 4 + case .extraSmall: return 2 } } public var iconHorizontalGap: CGFloat { switch self { - case .large: - return 8 - case .medium: - return 6 - case .small: - return 4 - case .extraSmall, .extraExtraSmall: - return 2 + case .large: return 8 + case .medium: return 6 + case .small: return 4 + case .extraSmall: return 4 } } - + public var debugDescription: String { - return "ButtonSize" + return "BasicButtonSize" } } diff --git a/Themes/SDDSservTheme/SDDSButton/BasicButtonTypography.swift b/Themes/SDDSservTheme/SDDSButton/BasicButtonTypography.swift index 48597940c..3e9c95d25 100644 --- a/Themes/SDDSservTheme/SDDSButton/BasicButtonTypography.swift +++ b/Themes/SDDSservTheme/SDDSButton/BasicButtonTypography.swift @@ -1,23 +1,25 @@ +/* This file is code generated. */ + import Foundation import SDDSComponents public struct BasicButtonTypography: GeneralTypographyConfiguration { typealias S = ButtonSizeConfiguration - let large: TypographyToken? let medium: TypographyToken? let small: TypographyToken? let extraSmall: TypographyToken? - let extraExtraSmall: TypographyToken? - - init(large: TypographyToken?, medium: TypographyToken?, small: TypographyToken?, extraSmall: TypographyToken?, extraExtraSmall: TypographyToken?) { + init( + large: TypographyToken?, + medium: TypographyToken?, + small: TypographyToken?, + extraSmall: TypographyToken? + ) { self.large = large self.medium = medium self.small = small self.extraSmall = extraSmall - self.extraExtraSmall = extraExtraSmall } - /** Возвращает типографику для заданного размера кнопки. @@ -26,18 +28,12 @@ public struct BasicButtonTypography: GeneralTypographyConfiguration { */ public func typography(with size: ButtonSizeConfiguration) -> TypographyToken? { switch size as? BasicButtonSize { - case .large: - return large - case .medium: - return medium - case .small: - return small - case .extraSmall: - return extraSmall - case .extraExtraSmall: - return extraExtraSmall + case .large: return large + case .medium: return medium + case .small: return small + case .extraSmall: return extraSmall case .none: - return medium + return nil } } } diff --git a/Themes/SDDSservTheme/SDDSButton/IconButton+ColorVariations.swift b/Themes/SDDSservTheme/SDDSButton/IconButton+ColorVariations.swift index 31ff42342..93f0047de 100644 --- a/Themes/SDDSservTheme/SDDSButton/IconButton+ColorVariations.swift +++ b/Themes/SDDSservTheme/SDDSButton/IconButton+ColorVariations.swift @@ -1,63 +1,56 @@ +/* This file is code generated. */ + // MARK: - Colors import Foundation import SDDSComponents import SDDSThemeCore public extension ButtonAppearanceVariation { - var `default`: Self { + var accent: Self { .init( - appearance: appearance.applyColorVariation(variation: IconButton.`default`.appearance) + appearance: appearance.applyColorVariation(variation: IconButton.accent.appearance) ) } - - var secondary: Self { + var black: Self { .init( - appearance: appearance.applyColorVariation(variation: IconButton.secondary.appearance) + appearance: appearance.applyColorVariation(variation: IconButton.black.appearance) ) } - - var accent: Self { + var clear: Self { .init( - appearance: appearance.applyColorVariation(variation: IconButton.accent.appearance) + appearance: appearance.applyColorVariation(variation: IconButton.clear.appearance) ) } - - var positive: Self { + var dark: Self { .init( - appearance: appearance.applyColorVariation(variation: IconButton.positive.appearance) + appearance: appearance.applyColorVariation(variation: IconButton.dark.appearance) ) } - - var negative: Self { + var `default`: Self { .init( - appearance: appearance.applyColorVariation(variation: IconButton.negative.appearance) + appearance: appearance.applyColorVariation(variation: IconButton.`default`.appearance) ) } - - var warning: Self { + var negative: Self { .init( - appearance: appearance.applyColorVariation(variation: IconButton.warning.appearance) + appearance: appearance.applyColorVariation(variation: IconButton.negative.appearance) ) } - - var clear: Self { + var positive: Self { .init( - appearance: appearance.applyColorVariation(variation: IconButton.clear.appearance) + appearance: appearance.applyColorVariation(variation: IconButton.positive.appearance) ) } - - var dark: Self { + var secondary: Self { .init( - appearance: appearance.applyColorVariation(variation: IconButton.dark.appearance) + appearance: appearance.applyColorVariation(variation: IconButton.secondary.appearance) ) } - - var black: Self { + var warning: Self { .init( - appearance: appearance.applyColorVariation(variation: IconButton.black.appearance) + appearance: appearance.applyColorVariation(variation: IconButton.warning.appearance) ) } - var white: Self { .init( appearance: appearance.applyColorVariation(variation: IconButton.white.appearance) @@ -66,14 +59,14 @@ public extension ButtonAppearanceVariation { } public extension IconButton { - static var `default`: ButtonAppearanceVariation { + static var accent: ButtonAppearanceVariation { .init( - name: "default", + name: "accent", appearance: ButtonAppearance( titleColor: ButtonColor( - defaultColor: .textInversePrimary, - highlightedColor: .textInversePrimaryActive, - hoveredColor: .textInversePrimaryHover + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover ), subtitleColor: ButtonColor( defaultColor: .clearColor, @@ -81,29 +74,62 @@ public extension IconButton { hoveredColor: .clearColor ), iconColor: ButtonColor( - defaultColor: .textInversePrimary, - highlightedColor: .textInversePrimaryActive, - hoveredColor: .textInversePrimaryHover + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover ), spinnerColor: ButtonColor( - defaultColor: .textInversePrimary, - highlightedColor: .textInversePrimaryActive, - hoveredColor: .textInversePrimaryHover + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover ), backgroundColor: ButtonColor( - defaultColor: .surfaceDefaultSolidDefault, - highlightedColor: .surfaceDefaultSolidDefaultActive, - hoveredColor: .surfaceDefaultSolidDefaultHover + defaultColor: .surfaceDefaultAccent, + highlightedColor: .surfaceDefaultAccentActive, + hoveredColor: .surfaceDefaultAccentHover ), disabledAlpha: 0.4, loadingAlpha: 0 ) ) } - - static var secondary: ButtonAppearanceVariation { + static var black: ButtonAppearanceVariation { .init( - name: "secondary", + name: "black", + appearance: ButtonAppearance( + titleColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + subtitleColor: ButtonColor( + defaultColor: .clearColor, + highlightedColor: .clearColor, + hoveredColor: .clearColor + ), + iconColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + spinnerColor: ButtonColor( + defaultColor: .textOnDarkPrimary, + highlightedColor: .textOnDarkPrimaryActive, + hoveredColor: .textOnDarkPrimaryHover + ), + backgroundColor: ButtonColor( + defaultColor: .surfaceOnLightSolidDefault, + highlightedColor: .surfaceOnLightSolidDefaultActive, + hoveredColor: .surfaceOnLightSolidDefaultHover + ), + disabledAlpha: 0.4, + loadingAlpha: 0 + ) + ) + } + static var clear: ButtonAppearanceVariation { + .init( + name: "clear", appearance: ButtonAppearance( titleColor: ButtonColor( defaultColor: .textDefaultPrimary, @@ -126,19 +152,18 @@ public extension IconButton { hoveredColor: .textDefaultPrimaryHover ), backgroundColor: ButtonColor( - defaultColor: .surfaceDefaultTransparentSecondary, - highlightedColor: .surfaceDefaultTransparentSecondaryActive, - hoveredColor: .surfaceDefaultTransparentSecondaryHover + defaultColor: .surfaceDefaultClear, + highlightedColor: .surfaceDefaultClearActive, + hoveredColor: .surfaceDefaultClearHover ), disabledAlpha: 0.4, loadingAlpha: 0 ) ) } - - static var accent: ButtonAppearanceVariation { + static var dark: ButtonAppearanceVariation { .init( - name: "accent", + name: "dark", appearance: ButtonAppearance( titleColor: ButtonColor( defaultColor: .textOnDarkPrimary, @@ -161,24 +186,23 @@ public extension IconButton { hoveredColor: .textOnDarkPrimaryHover ), backgroundColor: ButtonColor( - defaultColor: .surfaceDefaultAccent, - highlightedColor: .surfaceDefaultAccentActive, - hoveredColor: .surfaceDefaultAccentHover + defaultColor: .surfaceOnLightTransparentDeep, + highlightedColor: .surfaceOnLightTransparentDeepActive, + hoveredColor: .surfaceOnLightTransparentDeepHover ), disabledAlpha: 0.4, loadingAlpha: 0 ) ) } - - static var positive: ButtonAppearanceVariation { + static var `default`: ButtonAppearanceVariation { .init( - name: "positive", + name: "default", appearance: ButtonAppearance( titleColor: ButtonColor( - defaultColor: .textOnDarkPrimary, - highlightedColor: .textOnDarkPrimaryActive, - hoveredColor: .textOnDarkPrimaryHover + defaultColor: .textInversePrimary, + highlightedColor: .textInversePrimaryActive, + hoveredColor: .textInversePrimaryHover ), subtitleColor: ButtonColor( defaultColor: .clearColor, @@ -186,26 +210,25 @@ public extension IconButton { hoveredColor: .clearColor ), iconColor: ButtonColor( - defaultColor: .textOnDarkPrimary, - highlightedColor: .textOnDarkPrimaryActive, - hoveredColor: .textOnDarkPrimaryHover + defaultColor: .textInversePrimary, + highlightedColor: .textInversePrimaryActive, + hoveredColor: .textInversePrimaryHover ), spinnerColor: ButtonColor( - defaultColor: .textOnDarkPrimary, - highlightedColor: .textOnDarkPrimaryActive, - hoveredColor: .textOnDarkPrimaryHover + defaultColor: .textInversePrimary, + highlightedColor: .textInversePrimaryActive, + hoveredColor: .textInversePrimaryHover ), backgroundColor: ButtonColor( - defaultColor: .surfaceDefaultPositive, - highlightedColor: .surfaceDefaultPositiveActive, - hoveredColor: .surfaceDefaultPositiveHover + defaultColor: .surfaceDefaultSolidDefault, + highlightedColor: .surfaceDefaultSolidDefaultActive, + hoveredColor: .surfaceDefaultSolidDefaultHover ), disabledAlpha: 0.4, loadingAlpha: 0 ) ) } - static var negative: ButtonAppearanceVariation { .init( name: "negative", @@ -240,10 +263,9 @@ public extension IconButton { ) ) } - - static var warning: ButtonAppearanceVariation { + static var positive: ButtonAppearanceVariation { .init( - name: "warning", + name: "positive", appearance: ButtonAppearance( titleColor: ButtonColor( defaultColor: .textOnDarkPrimary, @@ -266,19 +288,18 @@ public extension IconButton { hoveredColor: .textOnDarkPrimaryHover ), backgroundColor: ButtonColor( - defaultColor: .surfaceDefaultWarning, - highlightedColor: .surfaceDefaultWarningActive, - hoveredColor: .surfaceDefaultWarningHover + defaultColor: .surfaceDefaultPositive, + highlightedColor: .surfaceDefaultPositiveActive, + hoveredColor: .surfaceDefaultPositiveHover ), disabledAlpha: 0.4, loadingAlpha: 0 ) ) } - - static var clear: ButtonAppearanceVariation { + static var secondary: ButtonAppearanceVariation { .init( - name: "clear", + name: "secondary", appearance: ButtonAppearance( titleColor: ButtonColor( defaultColor: .textDefaultPrimary, @@ -301,54 +322,18 @@ public extension IconButton { hoveredColor: .textDefaultPrimaryHover ), backgroundColor: ButtonColor( - defaultColor: .surfaceDefaultClear, - highlightedColor: .surfaceDefaultClearActive, - hoveredColor: .surfaceDefaultClearHover - ), - disabledAlpha: 0.4, - loadingAlpha: 0 - ) - ) - } - - static var dark: ButtonAppearanceVariation { - .init( - name: "dark", - appearance: ButtonAppearance( - titleColor: ButtonColor( - defaultColor: .textOnDarkPrimary, - highlightedColor: .textOnDarkPrimaryActive, - hoveredColor: .textOnDarkPrimaryHover - ), - subtitleColor: ButtonColor( - defaultColor: .clearColor, - highlightedColor: .clearColor, - hoveredColor: .clearColor - ), - iconColor: ButtonColor( - defaultColor: .textOnDarkPrimary, - highlightedColor: .textOnDarkPrimaryActive, - hoveredColor: .textOnDarkPrimaryHover - ), - spinnerColor: ButtonColor( - defaultColor: .textOnDarkPrimary, - highlightedColor: .textOnDarkPrimaryActive, - hoveredColor: .textOnDarkPrimaryHover - ), - backgroundColor: ButtonColor( - defaultColor: .surfaceOnLightTransparentDeep, - highlightedColor: .surfaceOnLightTransparentDeepActive, - hoveredColor: .surfaceOnLightTransparentDeepHover + defaultColor: .surfaceDefaultTransparentSecondary, + highlightedColor: .surfaceDefaultTransparentSecondaryActive, + hoveredColor: .surfaceDefaultTransparentSecondaryHover ), disabledAlpha: 0.4, loadingAlpha: 0 ) ) } - - static var black: ButtonAppearanceVariation { + static var warning: ButtonAppearanceVariation { .init( - name: "black", + name: "warning", appearance: ButtonAppearance( titleColor: ButtonColor( defaultColor: .textOnDarkPrimary, @@ -371,16 +356,15 @@ public extension IconButton { hoveredColor: .textOnDarkPrimaryHover ), backgroundColor: ButtonColor( - defaultColor: .surfaceOnLightSolidDefault, - highlightedColor: .surfaceOnLightSolidDefaultActive, - hoveredColor: .surfaceOnLightSolidDefaultHover + defaultColor: .surfaceDefaultWarning, + highlightedColor: .surfaceDefaultWarningActive, + hoveredColor: .surfaceDefaultWarningHover ), disabledAlpha: 0.4, loadingAlpha: 0 ) ) } - static var white: ButtonAppearanceVariation { .init( name: "white", @@ -415,19 +399,29 @@ public extension IconButton { ) ) } - static var all: [ButtonAppearanceVariation] { [ - IconButton.default, - IconButton.secondary, + IconButton.accent, - IconButton.positive, - IconButton.negative, - IconButton.warning, + + IconButton.black, + IconButton.clear, + IconButton.dark, - IconButton.black, + + IconButton.`default`, + + IconButton.negative, + + IconButton.positive, + + IconButton.secondary, + + IconButton.warning, + IconButton.white + ] } } diff --git a/Themes/SDDSservTheme/SDDSButton/IconButton+SizeVariations.swift b/Themes/SDDSservTheme/SDDSButton/IconButton+SizeVariations.swift index f61e579ad..9d6df4723 100644 --- a/Themes/SDDSservTheme/SDDSButton/IconButton+SizeVariations.swift +++ b/Themes/SDDSservTheme/SDDSButton/IconButton+SizeVariations.swift @@ -1,4 +1,5 @@ -// MARK: - Size +/* This file is code generated. */ + import Foundation import SDDSComponents import SDDSThemeCore diff --git a/Themes/SDDSservTheme/SDDSButton/IconButtonSize+ButtonSizeConfiguration.swift b/Themes/SDDSservTheme/SDDSButton/IconButtonSize+ButtonSizeConfiguration.swift index 379df2506..2ff196f20 100644 --- a/Themes/SDDSservTheme/SDDSButton/IconButtonSize+ButtonSizeConfiguration.swift +++ b/Themes/SDDSservTheme/SDDSButton/IconButtonSize+ButtonSizeConfiguration.swift @@ -1,3 +1,5 @@ +/* This file is code generated. */ + import Foundation import SDDSComponents import SwiftUI @@ -7,99 +9,74 @@ public enum IconButtonSize: String, CaseIterable { case medium case small case extraSmall - case extraExtraSmall } extension IconButtonSize: ButtonSizeConfiguration { public var height: CGFloat { switch self { - case .large: - return 56 - case .medium: - return 48 - case .small: - return 40 - case .extraSmall: - return 32 - case .extraExtraSmall: - return 24 + case .large: return 56 + case .medium: return 48 + case .small: return 40 + case .extraSmall: return 32 } } - + public var cornerRadius: CGFloat { switch self { - case .large: - return 14 - case .medium: - return 12 - case .small: - return 10 - case .extraSmall: - return 8 - case .extraExtraSmall: - return 6 + case .large: return ShapeToken.roundL.cornerRadius - 2.0 + case .medium: return ShapeToken.roundM.cornerRadius + case .small: return ShapeToken.roundM.cornerRadius - 2.0 + case .extraSmall: return ShapeToken.roundS.cornerRadius } } - + public var paddings: EdgeInsets { switch self { - case .large: - return EdgeInsets(top: 11, leading: 22, bottom: 11, trailing: 24) - case .medium: - return EdgeInsets(top: 11, leading: 20, bottom: 11, trailing: 20) - case .small: - return EdgeInsets(top: 11, leading: 16, bottom: 11, trailing: 16) - case .extraSmall: - return EdgeInsets(top: 11, leading: 12, bottom: 11, trailing: 12) - case .extraExtraSmall: - return EdgeInsets(top: 5, leading: 10, bottom: 5, trailing: 10) + case .large: return EdgeInsets(top: 0, leading: 16, bottom: 0, trailing: 16) + case .medium: return EdgeInsets(top: 0, leading: 12, bottom: 0, trailing: 12) + case .small: return EdgeInsets(top: 0, leading: 8, bottom: 0, trailing: 8) + case .extraSmall: return EdgeInsets(top: 0, leading: 8, bottom: 0, trailing: 8) } } - + public var iconSize: CGSize { switch self { - case .large, .medium, .small: - return CGSize(width: 24, height: 24) - case .extraSmall, .extraExtraSmall: - return CGSize(width: 16, height: 16) + case .large: return CGSize(width: 24, height: 24) + case .medium: return CGSize(width: 24, height: 24) + case .small: return CGSize(width: 24, height: 24) + case .extraSmall: return CGSize(width: 16, height: 16) } } - + public var spinnerSize: CGSize { switch self { - case .large, .medium, .small: - return CGSize(width: 22, height: 22) - case .extraSmall: - return CGSize(width: 16, height: 16) - case .extraExtraSmall: - return CGSize(width: 12, height: 12) + case .large: return CGSize(width: 22, height: 22) + case .medium: return CGSize(width: 22, height: 22) + case .small: return CGSize(width: 22, height: 22) + case .extraSmall: return CGSize(width: 16, height: 16) } } - + public var titleHorizontalGap: CGFloat { switch self { - case .extraSmall, .extraExtraSmall: - return 4 - default: - return 6 + case .large: return 0 + case .medium: return 0 + case .small: return 0 + case .extraSmall: return 0 } } public var iconHorizontalGap: CGFloat { switch self { - case .large: - return 8 - case .medium: - return 6 - case .small: - return 4 - case .extraSmall, .extraExtraSmall: - return 2 + case .large: return 0 + case .medium: return 0 + case .small: return 0 + case .extraSmall: return 0 } } - + public var debugDescription: String { - return "ButtonSize" + return "IconButtonSize" } } diff --git a/Themes/SDDSservTheme/SDDSButton/LinkButton+ColorVariations.swift b/Themes/SDDSservTheme/SDDSButton/LinkButton+ColorVariations.swift index aedea735e..b5eeb2678 100644 --- a/Themes/SDDSservTheme/SDDSButton/LinkButton+ColorVariations.swift +++ b/Themes/SDDSservTheme/SDDSButton/LinkButton+ColorVariations.swift @@ -1,39 +1,35 @@ +/* This file is code generated. */ + import Foundation import SDDSComponents import SDDSThemeCore -// MARK: - Color public extension ButtonAppearanceVariation { - var `default`: Self { + var accent: Self { .init( - appearance: appearance.applyColorVariation(variation: LinkButton.default.appearance) + appearance: appearance.applyColorVariation(variation: LinkButton.accent.appearance) ) } - - var secondary: Self { + var `default`: Self { .init( - appearance: appearance.applyColorVariation(variation: LinkButton.secondary.appearance) + appearance: appearance.applyColorVariation(variation: LinkButton.`default`.appearance) ) } - - var accent: Self { + var negative: Self { .init( - appearance: appearance.applyColorVariation(variation: LinkButton.accent.appearance) + appearance: appearance.applyColorVariation(variation: LinkButton.negative.appearance) ) } - var positive: Self { .init( appearance: appearance.applyColorVariation(variation: LinkButton.positive.appearance) ) } - - var negative: Self { + var secondary: Self { .init( - appearance: appearance.applyColorVariation(variation: LinkButton.negative.appearance) + appearance: appearance.applyColorVariation(variation: LinkButton.secondary.appearance) ) } - var warning: Self { .init( appearance: appearance.applyColorVariation(variation: LinkButton.warning.appearance) @@ -42,31 +38,31 @@ public extension ButtonAppearanceVariation { } public extension LinkButton { - static var `default`: ButtonAppearanceVariation { + static var accent: ButtonAppearanceVariation { .init( - name: "default", + name: "accent", appearance: ButtonAppearance( titleTypography: LinkButton.titleTypography, titleColor: ButtonColor( - defaultColor: .textDefaultPrimary, - highlightedColor: .textDefaultPrimaryActive, - hoveredColor: .textDefaultPrimaryHover + defaultColor: .textDefaultAccent, + highlightedColor: .textDefaultAccentActive, + hoveredColor: .textDefaultAccentHover ), - subtitleTypography: LinkButton.subtitleTypography, + subtitleTypography: .default, subtitleColor: ButtonColor( defaultColor: .clearColor, highlightedColor: .clearColor, hoveredColor: .clearColor ), iconColor: ButtonColor( - defaultColor: .textDefaultPrimary, - highlightedColor: .textDefaultPrimaryActive, - hoveredColor: .textDefaultPrimaryHover + defaultColor: .textDefaultAccent, + highlightedColor: .textDefaultAccentActive, + hoveredColor: .textDefaultAccentHover ), spinnerColor: ButtonColor( - defaultColor: .textDefaultPrimary, - highlightedColor: .textDefaultPrimaryActive, - hoveredColor: .textDefaultPrimaryHover + defaultColor: .textDefaultAccent, + highlightedColor: .textDefaultAccentActive, + hoveredColor: .textDefaultAccentHover ), backgroundColor: ButtonColor( defaultColor: .surfaceDefaultClear, @@ -78,32 +74,31 @@ public extension LinkButton { ) ) } - - static var secondary: ButtonAppearanceVariation { + static var `default`: ButtonAppearanceVariation { .init( - name: "secondary", + name: "default", appearance: ButtonAppearance( titleTypography: LinkButton.titleTypography, titleColor: ButtonColor( - defaultColor: .textDefaultSecondary, - highlightedColor: .textDefaultSecondaryActive, - hoveredColor: .textDefaultSecondaryHover + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover ), - subtitleTypography: LinkButton.subtitleTypography, + subtitleTypography: .default, subtitleColor: ButtonColor( defaultColor: .clearColor, highlightedColor: .clearColor, hoveredColor: .clearColor ), iconColor: ButtonColor( - defaultColor: .textDefaultSecondary, - highlightedColor: .textDefaultSecondaryActive, - hoveredColor: .textDefaultSecondaryHover + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover ), spinnerColor: ButtonColor( - defaultColor: .textDefaultSecondary, - highlightedColor: .textDefaultSecondaryActive, - hoveredColor: .textDefaultSecondaryHover + defaultColor: .textDefaultPrimary, + highlightedColor: .textDefaultPrimaryActive, + hoveredColor: .textDefaultPrimaryHover ), backgroundColor: ButtonColor( defaultColor: .surfaceDefaultClear, @@ -115,32 +110,31 @@ public extension LinkButton { ) ) } - - static var accent: ButtonAppearanceVariation { + static var negative: ButtonAppearanceVariation { .init( - name: "accent", + name: "negative", appearance: ButtonAppearance( titleTypography: LinkButton.titleTypography, titleColor: ButtonColor( - defaultColor: .textDefaultAccent, - highlightedColor: .textDefaultAccentActive, - hoveredColor: .textDefaultAccentHover + defaultColor: .textDefaultNegative, + highlightedColor: .textDefaultNegativeActive, + hoveredColor: .textDefaultNegativeHover ), - subtitleTypography: LinkButton.subtitleTypography, + subtitleTypography: .default, subtitleColor: ButtonColor( defaultColor: .clearColor, highlightedColor: .clearColor, hoveredColor: .clearColor ), iconColor: ButtonColor( - defaultColor: .textDefaultAccent, - highlightedColor: .textDefaultAccentActive, - hoveredColor: .textDefaultAccentHover + defaultColor: .textDefaultNegative, + highlightedColor: .textDefaultNegativeActive, + hoveredColor: .textDefaultNegativeHover ), spinnerColor: ButtonColor( - defaultColor: .textDefaultAccent, - highlightedColor: .textDefaultAccentActive, - hoveredColor: .textDefaultAccentHover + defaultColor: .textDefaultNegative, + highlightedColor: .textDefaultNegativeActive, + hoveredColor: .textDefaultNegativeHover ), backgroundColor: ButtonColor( defaultColor: .surfaceDefaultClear, @@ -152,7 +146,6 @@ public extension LinkButton { ) ) } - static var positive: ButtonAppearanceVariation { .init( name: "positive", @@ -163,7 +156,7 @@ public extension LinkButton { highlightedColor: .textDefaultPositiveActive, hoveredColor: .textDefaultPositiveHover ), - subtitleTypography: LinkButton.subtitleTypography, + subtitleTypography: .default, subtitleColor: ButtonColor( defaultColor: .clearColor, highlightedColor: .clearColor, @@ -189,32 +182,31 @@ public extension LinkButton { ) ) } - - static var negative: ButtonAppearanceVariation { + static var secondary: ButtonAppearanceVariation { .init( - name: "negative", + name: "secondary", appearance: ButtonAppearance( titleTypography: LinkButton.titleTypography, titleColor: ButtonColor( - defaultColor: .textDefaultNegative, - highlightedColor: .textDefaultNegativeActive, - hoveredColor: .textDefaultNegativeHover + defaultColor: .textDefaultSecondary, + highlightedColor: .textDefaultSecondaryActive, + hoveredColor: .textDefaultSecondaryHover ), - subtitleTypography: LinkButton.subtitleTypography, + subtitleTypography: .default, subtitleColor: ButtonColor( defaultColor: .clearColor, highlightedColor: .clearColor, hoveredColor: .clearColor ), iconColor: ButtonColor( - defaultColor: .textDefaultNegative, - highlightedColor: .textDefaultNegativeActive, - hoveredColor: .textDefaultNegativeHover + defaultColor: .textDefaultSecondary, + highlightedColor: .textDefaultSecondaryActive, + hoveredColor: .textDefaultSecondaryHover ), spinnerColor: ButtonColor( - defaultColor: .textDefaultNegative, - highlightedColor: .textDefaultNegativeActive, - hoveredColor: .textDefaultNegativeHover + defaultColor: .textDefaultSecondary, + highlightedColor: .textDefaultSecondaryActive, + hoveredColor: .textDefaultSecondaryHover ), backgroundColor: ButtonColor( defaultColor: .surfaceDefaultClear, @@ -226,7 +218,6 @@ public extension LinkButton { ) ) } - static var warning: ButtonAppearanceVariation { .init( name: "warning", @@ -237,7 +228,7 @@ public extension LinkButton { highlightedColor: .textDefaultWarningActive, hoveredColor: .textDefaultWarningHover ), - subtitleTypography: LinkButton.subtitleTypography, + subtitleTypography: .default, subtitleColor: ButtonColor( defaultColor: .clearColor, highlightedColor: .clearColor, @@ -263,15 +254,21 @@ public extension LinkButton { ) ) } - static var all: [ButtonAppearanceVariation] { [ - LinkButton.default, - LinkButton.secondary, + LinkButton.accent, - LinkButton.positive, + + LinkButton.`default`, + LinkButton.negative, + + LinkButton.positive, + + LinkButton.secondary, + LinkButton.warning + ] } } diff --git a/Themes/SDDSservTheme/SDDSButton/LinkButton+SizeVariations.swift b/Themes/SDDSservTheme/SDDSButton/LinkButton+SizeVariations.swift index 9d7f2a679..b5d423bc8 100644 --- a/Themes/SDDSservTheme/SDDSButton/LinkButton+SizeVariations.swift +++ b/Themes/SDDSservTheme/SDDSButton/LinkButton+SizeVariations.swift @@ -1,4 +1,5 @@ -// MARK: - Size +/* This file is code generated. */ + import Foundation import SDDSComponents import SDDSThemeCore @@ -10,34 +11,27 @@ public extension ButtonAppearanceVariation { appearance: appearance .size(LinkButtonSize.large) .titleTypography(LinkButton.titleTypography) - .subtitleTypography(LinkButton.subtitleTypography) ) } - var medium: Self { .init( appearance: appearance .size(LinkButtonSize.medium) .titleTypography(LinkButton.titleTypography) - .subtitleTypography(LinkButton.subtitleTypography) ) } - var small: Self { .init( appearance: appearance .size(LinkButtonSize.small) .titleTypography(LinkButton.titleTypography) - .subtitleTypography(LinkButton.subtitleTypography) ) } - var extraSmall: Self { .init( appearance: appearance .size(LinkButtonSize.extraSmall) .titleTypography(LinkButton.titleTypography) - .subtitleTypography(LinkButton.subtitleTypography) ) } } @@ -46,15 +40,12 @@ public extension LinkButton { static var large: ButtonAppearanceVariation { return ButtonAppearanceVariation().large } - static var medium: ButtonAppearanceVariation { return ButtonAppearanceVariation().medium } - static var small: ButtonAppearanceVariation { return ButtonAppearanceVariation().small } - static var extraSmall: ButtonAppearanceVariation { return ButtonAppearanceVariation().extraSmall } diff --git a/Themes/SDDSservTheme/SDDSButton/LinkButton+Typography.swift b/Themes/SDDSservTheme/SDDSButton/LinkButton+Typography.swift index 203f78da5..54c6f1430 100644 --- a/Themes/SDDSservTheme/SDDSButton/LinkButton+Typography.swift +++ b/Themes/SDDSservTheme/SDDSButton/LinkButton+Typography.swift @@ -1,3 +1,5 @@ +/* This file is code generated. */ + import Foundation import SDDSComponents import SDDSThemeCore @@ -8,19 +10,7 @@ public extension LinkButton { large: AdaptiveTypographyToken.bodyLBold.typography, medium: AdaptiveTypographyToken.bodyMBold.typography, small: AdaptiveTypographyToken.bodySBold.typography, - extraSmall: AdaptiveTypographyToken.bodyXsBold.typography, - extraExtraSmall: AdaptiveTypographyToken.bodyXsNormal.typography - ) - .asContainer - } - - static var subtitleTypography: TypographyConfiguration { - LinkButtonTypography( - large: AdaptiveTypographyToken.bodyLBold.typography, - medium: AdaptiveTypographyToken.bodyMBold.typography, - small: AdaptiveTypographyToken.bodySBold.typography, - extraSmall: AdaptiveTypographyToken.bodyXsBold.typography, - extraExtraSmall: AdaptiveTypographyToken.bodyXsNormal.typography + extraSmall: AdaptiveTypographyToken.bodyXsBold.typography ) .asContainer } diff --git a/Themes/SDDSservTheme/SDDSButton/LinkButtonSize+ButtonSizeConfiguration.swift b/Themes/SDDSservTheme/SDDSButton/LinkButtonSize+ButtonSizeConfiguration.swift index 387cc54a8..24244b1cc 100644 --- a/Themes/SDDSservTheme/SDDSButton/LinkButtonSize+ButtonSizeConfiguration.swift +++ b/Themes/SDDSservTheme/SDDSButton/LinkButtonSize+ButtonSizeConfiguration.swift @@ -1,3 +1,5 @@ +/* This file is code generated. */ + import Foundation import SDDSComponents import SwiftUI @@ -7,87 +9,69 @@ public enum LinkButtonSize: String, CaseIterable { case medium case small case extraSmall - case extraExtraSmall } extension LinkButtonSize: ButtonSizeConfiguration { + public var height: CGFloat { switch self { - case .large: - return 56 - case .medium: - return 48 - case .small: - return 40 - case .extraSmall: - return 32 - case .extraExtraSmall: - return 24 + case .large: return 56 + case .medium: return 48 + case .small: return 40 + case .extraSmall: return 32 } } - + public var cornerRadius: CGFloat { - return 0 + 0 } - + public var paddings: EdgeInsets { switch self { - case .large: - return EdgeInsets(top: 11, leading: 0, bottom: 11, trailing: 0) - case .medium: - return EdgeInsets(top: 11, leading: 0, bottom: 11, trailing: 0) - case .small: - return EdgeInsets(top: 11, leading: 0, bottom: 11, trailing: 0) - case .extraSmall: - return EdgeInsets(top: 11, leading: 0, bottom: 11, trailing: 0) - case .extraExtraSmall: - return EdgeInsets(top: 5, leading: 0, bottom: 5, trailing: 0) + case .large: return EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0) + case .medium: return EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0) + case .small: return EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0) + case .extraSmall: return EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0) } } - + public var iconSize: CGSize { switch self { - case .large, .medium, .small: - return CGSize(width: 24, height: 24) - case .extraSmall, .extraExtraSmall: - return CGSize(width: 16, height: 16) + case .large: return CGSize(width: 24, height: 24) + case .medium: return CGSize(width: 24, height: 24) + case .small: return CGSize(width: 24, height: 24) + case .extraSmall: return CGSize(width: 16, height: 16) } } - + public var spinnerSize: CGSize { switch self { - case .large, .medium, .small: - return CGSize(width: 22, height: 22) - case .extraSmall: - return CGSize(width: 16, height: 16) - case .extraExtraSmall: - return CGSize(width: 12, height: 12) + case .large: return CGSize(width: 22, height: 22) + case .medium: return CGSize(width: 22, height: 22) + case .small: return CGSize(width: 22, height: 22) + case .extraSmall: return CGSize(width: 16, height: 16) } } - - public var iconHorizontalGap: CGFloat { + + public var titleHorizontalGap: CGFloat { switch self { - case .large: - return 8 - case .medium: - return 6 - case .small: - return 4 - case .extraSmall, .extraExtraSmall: - return 2 + case .large: return 4 + case .medium: return 4 + case .small: return 4 + case .extraSmall: return 2 } } - - public var titleHorizontalGap: CGFloat { + + public var iconHorizontalGap: CGFloat { switch self { - case .extraSmall, .extraExtraSmall: - return 4 - default: - return 6 + case .large: return 8 + case .medium: return 6 + case .small: return 4 + case .extraSmall: return 4 } } - + public var debugDescription: String { - "LinkSize" + return "LinkButtonSize" } } diff --git a/Themes/SDDSservTheme/SDDSButton/LinkButtonTypography.swift b/Themes/SDDSservTheme/SDDSButton/LinkButtonTypography.swift index bbecf37e9..7100f53a4 100644 --- a/Themes/SDDSservTheme/SDDSButton/LinkButtonTypography.swift +++ b/Themes/SDDSservTheme/SDDSButton/LinkButtonTypography.swift @@ -1,23 +1,25 @@ +/* This file is code generated. */ + import Foundation import SDDSComponents public struct LinkButtonTypography: GeneralTypographyConfiguration { typealias S = ButtonSizeConfiguration - let large: TypographyToken? let medium: TypographyToken? let small: TypographyToken? let extraSmall: TypographyToken? - let extraExtraSmall: TypographyToken? - - init(large: TypographyToken?, medium: TypographyToken?, small: TypographyToken?, extraSmall: TypographyToken?, extraExtraSmall: TypographyToken?) { + init( + large: TypographyToken?, + medium: TypographyToken?, + small: TypographyToken?, + extraSmall: TypographyToken? + ) { self.large = large self.medium = medium self.small = small self.extraSmall = extraSmall - self.extraExtraSmall = extraExtraSmall } - /** Возвращает типографику для заданного размера кнопки. @@ -26,18 +28,13 @@ public struct LinkButtonTypography: GeneralTypographyConfiguration { */ public func typography(with size: ButtonSizeConfiguration) -> TypographyToken? { switch size as? LinkButtonSize { - case .large: - return large - case .medium: - return medium - case .small: - return small - case .extraSmall: - return extraSmall - case .extraExtraSmall: - return extraExtraSmall + case .large: return large + case .medium: return medium + case .small: return small + case .extraSmall: return extraSmall case .none: - return medium + return nil } } } + diff --git a/Themes/SDDSservTheme/SDDSCheckbox/SDDSCheckbox+ColorVariations.swift b/Themes/SDDSservTheme/SDDSCheckbox/SDDSCheckbox+ColorVariations.swift new file mode 100644 index 000000000..0ff8d81d3 --- /dev/null +++ b/Themes/SDDSservTheme/SDDSCheckbox/SDDSCheckbox+ColorVariations.swift @@ -0,0 +1,33 @@ +import Foundation +import SDDSComponents +import SDDSServTheme + +public extension AppearanceVariation { + var `default`: Self { + .init( + appearance: appearance.applyColorVariation(variation: SDDSCheckbox.default.appearance) + ) + } +} + +public extension SDDSCheckbox { + static var `default`: AppearanceVariation { + .init( + name: "default", + appearance: + .init( + titleTypography: CheckboxTypography.label, + subtitleTypography: CheckboxTypography.description, + titleColor: .backgroundInversePrimary, + subtitleColor: .surfaceInverseSolidPrimary.withOpacity(0.56), + disabledAlpha: 0.4 + ) + ) + } + + static var all: [AppearanceVariation] { + [ + SDDSCheckbox.default + ] + } +} diff --git a/Themes/SDDSservTheme/SDDSCheckbox/SDDSCheckbox+SizeVariations.swift b/Themes/SDDSservTheme/SDDSCheckbox/SDDSCheckbox+SizeVariations.swift new file mode 100644 index 000000000..237d6afdc --- /dev/null +++ b/Themes/SDDSservTheme/SDDSCheckbox/SDDSCheckbox+SizeVariations.swift @@ -0,0 +1,34 @@ +import Foundation +import SDDSComponents +import SDDSThemeCore + +// MARK: - Size +public extension AppearanceVariation { + var medium: Self { + .init( + appearance: appearance + .size(SDDSCheckbox.medium.appearance.size) + .titleTypography(CheckboxTypography.label) + .subtitleTypography(CheckboxTypography.description) + ) + } + + var small: Self { + .init( + appearance: appearance + .size(SDDSCheckbox.small.appearance.size) + .titleTypography(CheckboxTypography.label) + .subtitleTypography(CheckboxTypography.description) + ) + } +} + +public extension SDDSCheckbox { + static var medium: AppearanceVariation { + return AppearanceVariation(appearance: CheckboxAppearance()).medium + } + + static var small: AppearanceVariation { + return AppearanceVariation(appearance: CheckboxAppearance()).small + } +} diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSCheckbox/CheckboxTypography.swift b/Themes/SDDSservTheme/SDDSCheckbox/SDDSCheckbox+Typography.swift similarity index 91% rename from SDDSComponents/SDDSComponentsPreview/Components/SDDSCheckbox/CheckboxTypography.swift rename to Themes/SDDSservTheme/SDDSCheckbox/SDDSCheckbox+Typography.swift index fe61c9fd9..a94691aa0 100644 --- a/SDDSComponents/SDDSComponentsPreview/Components/SDDSCheckbox/CheckboxTypography.swift +++ b/Themes/SDDSservTheme/SDDSCheckbox/SDDSCheckbox+Typography.swift @@ -14,7 +14,7 @@ struct CheckboxTypography: GeneralTypographyConfiguration { } func typography(with size: SelectionControlSizeConfiguration) -> TypographyToken? { - switch size as? SDDSRadioboxSize { + switch size as? SDDSCheckboxSize { case .medium: return medium case .small, .none: @@ -25,14 +25,14 @@ struct CheckboxTypography: GeneralTypographyConfiguration { extension CheckboxTypography { static var label: TypographyConfiguration { - RadioboxTypography( + CheckboxTypography( medium: Typographies.bodyMNormal.typography, small: Typographies.bodySNormal.typography ).asContainer } static var description: TypographyConfiguration { - RadioboxTypography( + CheckboxTypography( medium: Typographies.bodyMNormal.typography, small: Typographies.bodyXsNormal.typography ).asContainer diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSCheckbox/SDDSCheckboxSize.swift b/Themes/SDDSservTheme/SDDSCheckbox/SDDSCheckboxSize.swift similarity index 95% rename from SDDSComponents/SDDSComponentsPreview/Components/SDDSCheckbox/SDDSCheckboxSize.swift rename to Themes/SDDSservTheme/SDDSCheckbox/SDDSCheckboxSize.swift index 9e2ed26b5..21d297471 100644 --- a/SDDSComponents/SDDSComponentsPreview/Components/SDDSCheckbox/SDDSCheckboxSize.swift +++ b/Themes/SDDSservTheme/SDDSCheckbox/SDDSCheckboxSize.swift @@ -7,7 +7,7 @@ public enum SDDSCheckboxSize: String, SelectionControlSizeConfiguration, CaseIte case small public var debugDescription: String { - String(reflecting: self) + rawValue } public var imageSize: CGSize { diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSChip/ChipAppearance+Extensions.swift b/Themes/SDDSservTheme/SDDSChip/ChipTypography.swift similarity index 68% rename from SDDSComponents/SDDSComponentsPreview/Components/SDDSChip/ChipAppearance+Extensions.swift rename to Themes/SDDSservTheme/SDDSChip/ChipTypography.swift index 11d0faab4..328720ba7 100644 --- a/SDDSComponents/SDDSComponentsPreview/Components/SDDSChip/ChipAppearance+Extensions.swift +++ b/Themes/SDDSservTheme/SDDSChip/ChipTypography.swift @@ -1,21 +1,6 @@ import Foundation -import SwiftUI -import SDDSServTheme import SDDSComponents -import SDDSThemeCore - -public extension ChipAppearance { - static var `default`: ChipAppearance { - .init( - titleColor: ColorToken.textInversePrimary, - titleTypography: ChipTypography.title, - imageTintColor: ColorToken.textInversePrimary, - buttonTintColor: ColorToken.textInversePrimary, - backgroundColor: ColorToken.backgroundInversePrimary, - disabledAlpha: 0.5 - ) - } -} +import SDDSServTheme public struct ChipTypography: GeneralTypographyConfiguration { public let large: TypographyToken? diff --git a/Themes/SDDSservTheme/SDDSChip/SDDSChip+ColorVariations.swift b/Themes/SDDSservTheme/SDDSChip/SDDSChip+ColorVariations.swift new file mode 100644 index 000000000..86840ab84 --- /dev/null +++ b/Themes/SDDSservTheme/SDDSChip/SDDSChip+ColorVariations.swift @@ -0,0 +1,140 @@ +import Foundation +import SDDSComponents +import SDDSServTheme + +public extension AppearanceVariation { + var accent: Self { + .init( + appearance: appearance.applyColorVariation(variation: SDDSChip.accent.appearance) + ) + } + var `default`: Self { + .init( + appearance: appearance.applyColorVariation(variation: SDDSChip.default.appearance) + ) + } + var negative: Self { + .init( + appearance: appearance.applyColorVariation(variation: SDDSChip.negative.appearance) + ) + } + var positive: Self { + .init( + appearance: appearance.applyColorVariation(variation: SDDSChip.positive.appearance) + ) + } + var secondary: Self { + .init( + appearance: appearance.applyColorVariation(variation: SDDSChip.secondary.appearance) + ) + } + var warning: Self { + .init( + appearance: appearance.applyColorVariation(variation: SDDSChip.warning.appearance) + ) + } +} + +public extension SDDSChip { + static var accent: AppearanceVariation { + .init( + name: "accent", + appearance: .init( + titleColor: ColorToken.textOnDarkPrimary, + titleTypography: ChipTypography.title, + imageTintColor: ColorToken.textOnDarkPrimary, + buttonTintColor: ColorToken.textOnDarkPrimary, + backgroundColor: ColorToken.surfaceDefaultAccent, + disabledAlpha: 0.4 + ) + ) + } + + static var `default`: AppearanceVariation { + .init( + name: "default", + appearance: .init( + titleColor: ColorToken.textInversePrimary, + titleTypography: ChipTypography.title, + imageTintColor: ColorToken.textInversePrimary, + buttonTintColor: ColorToken.textInversePrimary, + backgroundColor: ColorToken.surfaceDefaultSolidDefault, + disabledAlpha: 0.4 + ) + ) + } + + static var negative: AppearanceVariation { + .init( + name: "negative", + appearance: .init( + titleColor: ColorToken.textOnDarkPrimary, + titleTypography: ChipTypography.title, + imageTintColor: ColorToken.textOnDarkPrimary, + buttonTintColor: ColorToken.textOnDarkPrimary, + backgroundColor: ColorToken.surfaceDefaultNegative, + disabledAlpha: 0.4 + ) + ) + } + + static var positive: AppearanceVariation { + .init( + name: "positive", + appearance: .init( + titleColor: ColorToken.textOnDarkPrimary, + titleTypography: ChipTypography.title, + imageTintColor: ColorToken.textOnDarkPrimary, + buttonTintColor: ColorToken.textOnDarkPrimary, + backgroundColor: ColorToken.surfaceDefaultPositive, + disabledAlpha: 0.4 + ) + ) + } + + static var secondary: AppearanceVariation { + .init( + name: "secondary", + appearance: .init( + titleColor: ColorToken.textDefaultPrimary, + titleTypography: ChipTypography.title, + imageTintColor: ColorToken.textDefaultPrimary, + buttonTintColor: ColorToken.textDefaultPrimary, + backgroundColor: ColorToken.surfaceDefaultTransparentSecondary, + disabledAlpha: 0.4 + ) + ) + } + + static var warning: AppearanceVariation { + .init( + name: "warning", + appearance: .init( + titleColor: ColorToken.textOnDarkPrimary, + titleTypography: ChipTypography.title, + imageTintColor: ColorToken.textOnDarkPrimary, + buttonTintColor: ColorToken.textOnDarkPrimary, + backgroundColor: ColorToken.surfaceDefaultWarning, + disabledAlpha: 0.4 + ) + ) + } + + static var all: [AppearanceVariation] { + [ + + SDDSChip.accent, + + SDDSChip.`default`, + + SDDSChip.negative, + + SDDSChip.positive, + + SDDSChip.secondary, + + SDDSChip.warning + + ] + } +} diff --git a/Themes/SDDSservTheme/SDDSChip/SDDSChip+Pilled.swift b/Themes/SDDSservTheme/SDDSChip/SDDSChip+Pilled.swift new file mode 100644 index 000000000..f8bcc93e4 --- /dev/null +++ b/Themes/SDDSservTheme/SDDSChip/SDDSChip+Pilled.swift @@ -0,0 +1,19 @@ +import Foundation +import SDDSComponents +import SDDSServTheme + +public extension AppearanceVariation { + var pilled: Self { + .init( + appearance: .init( + size: (appearance.size as? SDDSChipSize)?.pilled ?? .extraSmall(.pilled), + titleColor: appearance.titleColor, + titleTypography: appearance.titleTypography, + imageTintColor: appearance.imageTintColor, + buttonTintColor: appearance.buttonTintColor, + backgroundColor: appearance.backgroundColor, + disabledAlpha: appearance.disabledAlpha + ) + ) + } +} diff --git a/Themes/SDDSservTheme/SDDSChip/SDDSChip+SizeVariations.swift b/Themes/SDDSservTheme/SDDSChip/SDDSChip+SizeVariations.swift new file mode 100644 index 000000000..703f7a557 --- /dev/null +++ b/Themes/SDDSservTheme/SDDSChip/SDDSChip+SizeVariations.swift @@ -0,0 +1,59 @@ +// MARK: - Size +import Foundation +import SDDSComponents +import SDDSThemeCore + +// MARK: - Size +public extension AppearanceVariation { + var large: Self { + .init( + appearance: appearance + .size(SDDSChipSize.large(.default(12))) + .titleTypography(AvatarTypography.title) + ) + } + + var medium: Self { + .init( + appearance: appearance + .size(SDDSChipSize.medium(.default(10))) + .titleTypography(AvatarTypography.title) + ) + } + + var small: Self { + .init( + appearance: appearance + .size(SDDSChipSize.small(.default(8))) + .titleTypography(AvatarTypography.title) + ) + } + + var extraSmall: Self { + .init( + appearance: appearance + .size(SDDSChipSize.extraSmall(.default(6))) + .titleTypography(AvatarTypography.title) + ) + } +} + +public extension SDDSChip { + static var large: AppearanceVariation { + return AppearanceVariation(appearance: ChipAppearance()).large + } + + static var medium: AppearanceVariation { + return AppearanceVariation(appearance: ChipAppearance()).medium + } + + static var small: AppearanceVariation { + return AppearanceVariation(appearance: ChipAppearance()).small + } + + static var extraSmall: AppearanceVariation { + return AppearanceVariation(appearance: ChipAppearance()).extraSmall + } +} + + diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSChip/SDDSChipSize.swift b/Themes/SDDSservTheme/SDDSChip/SDDSChipSize.swift similarity index 88% rename from SDDSComponents/SDDSComponentsPreview/Components/SDDSChip/SDDSChipSize.swift rename to Themes/SDDSservTheme/SDDSChip/SDDSChipSize.swift index d26b1be1e..50837c2ae 100644 --- a/SDDSComponents/SDDSComponentsPreview/Components/SDDSChip/SDDSChipSize.swift +++ b/Themes/SDDSservTheme/SDDSChip/SDDSChipSize.swift @@ -110,12 +110,24 @@ public enum SDDSChipSize: ChipSizeConfiguration { return style } } - + + public var pilled: SDDSChipSize { + switch self { + case .large: + return .large(.pilled) + case .medium: + return .medium(.pilled) + case .small: + return .small(.pilled) + case .extraSmall: + return .extraSmall(.pilled) + } + } } extension SDDSChipSize: Hashable { public static func == (lhs: SDDSChipSize, rhs: SDDSChipSize) -> Bool { - return lhs.hashValue == rhs.hashValue + return lhs.debugDescription == rhs.debugDescription } public func hash(into hasher: inout Hasher) { diff --git a/Themes/SDDSservTheme/SDDSProgressBar/SDDSProgressView+ColorVariations.swift b/Themes/SDDSservTheme/SDDSProgressBar/SDDSProgressView+ColorVariations.swift new file mode 100644 index 000000000..ebda2d4bd --- /dev/null +++ b/Themes/SDDSservTheme/SDDSProgressBar/SDDSProgressView+ColorVariations.swift @@ -0,0 +1,164 @@ +import Foundation +import SDDSComponents +import SDDSServTheme + +public extension AppearanceVariation { + var `default`: Self { + .init( + appearance: appearance.applyColorVariation(variation: SDDSProgressView.default.appearance) + ) + } + + var secondary: Self { + .init( + appearance: appearance.applyColorVariation(variation: SDDSProgressView.secondary.appearance) + ) + } + + var accent: Self { + .init( + appearance: appearance.applyColorVariation(variation: SDDSProgressView.accent.appearance) + ) + } + + var gradientAccent: Self { + .init( + appearance: appearance.applyColorVariation(variation: SDDSProgressView.gradientAccent.appearance) + ) + } + + var positive: Self { + .init( + appearance: appearance.applyColorVariation(variation: SDDSProgressView.positive.appearance) + ) + } + + var warning: Self { + .init( + appearance: appearance.applyColorVariation(variation: SDDSProgressView.warning.appearance) + ) + } + + var negative: Self { + .init( + appearance: appearance.applyColorVariation(variation: SDDSProgressView.negative.appearance) + ) + } + + var info: Self { + .init( + appearance: appearance.applyColorVariation(variation: SDDSProgressView.info.appearance) + ) + } +} + +public extension SDDSProgressView { + static var `default`: AppearanceVariation { + .init( + name: "default", + appearance: + .init( + size: SDDSProgressViewSize(), + tintFillStyle: .color(ColorToken.surfaceDefaultSolidDefault), + trackColor: ColorToken.surfaceDefaultTransparentSecondary + ) + ) + } + + static var secondary: AppearanceVariation { + .init( + name: "secondary", + appearance: + .init( + size: SDDSProgressViewSize(), + tintFillStyle: .color(ColorToken.surfaceDefaultSolidSecondary), + trackColor: ColorToken.surfaceDefaultTransparentSecondary + ) + ) + } + + static var accent: AppearanceVariation { + .init( + name: "accent", + appearance: + .init( + size: SDDSProgressViewSize(), + tintFillStyle: .color(ColorToken.surfaceDefaultAccent), + trackColor: ColorToken.surfaceDefaultTransparentSecondary + ) + ) + } + + static var gradientAccent: AppearanceVariation { + .init( + name: "gradientAccent", + appearance: + .init( + size: SDDSProgressViewSize(), + tintFillStyle: .gradient(GradientToken.surfaceDefaultAccentGradient), + trackColor: ColorToken.surfaceDefaultTransparentSecondary + ) + ) + } + + static var positive: AppearanceVariation { + .init( + name: "positive", + appearance: + .init( + size: SDDSProgressViewSize(), + tintFillStyle: .color(ColorToken.surfaceDefaultPositive), + trackColor: ColorToken.surfaceDefaultTransparentSecondary + ) + ) + } + + static var warning: AppearanceVariation { + .init( + name: "warning", + appearance: + .init( + size: SDDSProgressViewSize(), + tintFillStyle: .color(ColorToken.surfaceDefaultWarning), + trackColor: ColorToken.surfaceDefaultTransparentSecondary + ) + ) + } + + static var negative: AppearanceVariation { + .init( + name: "negative", + appearance: + .init( + size: SDDSProgressViewSize(), + tintFillStyle: .color(ColorToken.surfaceDefaultNegative), + trackColor: ColorToken.surfaceDefaultTransparentSecondary + ) + ) + } + + static var info: AppearanceVariation { + .init( + name: "info", + appearance: + .init( + size: SDDSProgressViewSize(), + tintFillStyle: .color(ColorToken.surfaceDefaultInfo), + trackColor: ColorToken.surfaceDefaultTransparentSecondary + ) + ) + } + + static var all: [AppearanceVariation] { + [ + SDDSProgressView.default, + SDDSProgressView.accent, + SDDSProgressView.secondary, + SDDSProgressView.gradientAccent, + SDDSProgressView.positive, + SDDSProgressView.warning, + SDDSProgressView.negative, + SDDSProgressView.info + ] + } +} diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSProgressBar/DefaultProgressBarSize.swift b/Themes/SDDSservTheme/SDDSProgressBar/SDDSProgressViewSize.swift similarity index 74% rename from SDDSComponents/SDDSComponentsPreview/Components/SDDSProgressBar/DefaultProgressBarSize.swift rename to Themes/SDDSservTheme/SDDSProgressBar/SDDSProgressViewSize.swift index 3e11ee3ad..cbe6334b9 100644 --- a/SDDSComponents/SDDSComponentsPreview/Components/SDDSProgressBar/DefaultProgressBarSize.swift +++ b/Themes/SDDSservTheme/SDDSProgressBar/SDDSProgressViewSize.swift @@ -1,10 +1,9 @@ import Foundation import SDDSComponents -// Size configuration -public struct DefaultProgressBarSize: ProgressBarSizeConfiguration { +public struct SDDSProgressViewSize: ProgressBarSizeConfiguration { public var debugDescription: String { - String(reflecting: self) + "SDDSProgressViewSize" } public var height: CGFloat { diff --git a/Themes/SDDSservTheme/SDDSRadiobox/SDDSRadiobox+ColorVariations.swift b/Themes/SDDSservTheme/SDDSRadiobox/SDDSRadiobox+ColorVariations.swift new file mode 100644 index 000000000..1c1b6dcfa --- /dev/null +++ b/Themes/SDDSservTheme/SDDSRadiobox/SDDSRadiobox+ColorVariations.swift @@ -0,0 +1,33 @@ +import Foundation +import SDDSComponents +import SDDSServTheme + +public extension AppearanceVariation { + var `default`: Self { + .init( + appearance: appearance.applyColorVariation(variation: SDDSRadiobox.default.appearance) + ) + } +} + +public extension SDDSRadiobox { + static var `default`: AppearanceVariation { + .init( + name: "default", + appearance: + .init( + titleTypography: RadioboxTypography.label, + subtitleTypography: RadioboxTypography.description, + titleColor: .backgroundInversePrimary, + subtitleColor: .surfaceInverseSolidPrimary.withOpacity(0.56), + disabledAlpha: 0.4 + ) + ) + } + + static var all: [AppearanceVariation] { + [ + SDDSRadiobox.default + ] + } +} diff --git a/Themes/SDDSservTheme/SDDSRadiobox/SDDSRadiobox+SizeVariations.swift b/Themes/SDDSservTheme/SDDSRadiobox/SDDSRadiobox+SizeVariations.swift new file mode 100644 index 000000000..5fe0c9d27 --- /dev/null +++ b/Themes/SDDSservTheme/SDDSRadiobox/SDDSRadiobox+SizeVariations.swift @@ -0,0 +1,34 @@ +import Foundation +import SDDSComponents +import SDDSThemeCore + +// MARK: - Size +public extension AppearanceVariation { + var medium: Self { + .init( + appearance: appearance + .size(SDDSRadiobox.medium.appearance.size) + .titleTypography(RadioboxTypography.label) + .subtitleTypography(RadioboxTypography.description) + ) + } + + var small: Self { + .init( + appearance: appearance + .size(SDDSRadiobox.small.appearance.size) + .titleTypography(RadioboxTypography.label) + .subtitleTypography(RadioboxTypography.description) + ) + } +} + +public extension SDDSRadiobox { + static var medium: AppearanceVariation { + return AppearanceVariation(appearance: RadioboxAppearance()).medium + } + + static var small: AppearanceVariation { + return AppearanceVariation(appearance: RadioboxAppearance()).small + } +} diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSRadiobox/RadioboxTypography.swift b/Themes/SDDSservTheme/SDDSRadiobox/SDDSRadiobox+Typography.swift similarity index 57% rename from SDDSComponents/SDDSComponentsPreview/Components/SDDSRadiobox/RadioboxTypography.swift rename to Themes/SDDSservTheme/SDDSRadiobox/SDDSRadiobox+Typography.swift index cb0806478..8b81d5cb1 100644 --- a/SDDSComponents/SDDSComponentsPreview/Components/SDDSRadiobox/RadioboxTypography.swift +++ b/Themes/SDDSservTheme/SDDSRadiobox/SDDSRadiobox+Typography.swift @@ -22,3 +22,19 @@ public struct RadioboxTypography: GeneralTypographyConfiguration { } } } + +public extension RadioboxTypography { + static var label: TypographyConfiguration { + RadioboxTypography( + medium: Typographies.bodyMNormal.typography, + small: Typographies.bodySNormal.typography + ).asContainer + } + + static var description: TypographyConfiguration { + RadioboxTypography( + medium: Typographies.bodyMNormal.typography, + small: Typographies.bodyXsNormal.typography + ).asContainer + } +} diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSRadiobox/SDDSRadioboxSize.swift b/Themes/SDDSservTheme/SDDSRadiobox/SDDSRadioboxSize.swift similarity index 84% rename from SDDSComponents/SDDSComponentsPreview/Components/SDDSRadiobox/SDDSRadioboxSize.swift rename to Themes/SDDSservTheme/SDDSRadiobox/SDDSRadioboxSize.swift index 09389900b..0893d6539 100644 --- a/SDDSComponents/SDDSComponentsPreview/Components/SDDSRadiobox/SDDSRadioboxSize.swift +++ b/Themes/SDDSservTheme/SDDSRadiobox/SDDSRadioboxSize.swift @@ -1,12 +1,12 @@ import Foundation import SDDSComponents -public enum SDDSRadioboxSize: SelectionControlSizeConfiguration { +public enum SDDSRadioboxSize: String, SelectionControlSizeConfiguration { case medium case small public var debugDescription: String { - String(reflecting: self) + rawValue } public var imageSize: CGSize { diff --git a/Themes/SDDSservTheme/SDDSSwitch/SDDSSwitch+ColorVariations.swift b/Themes/SDDSservTheme/SDDSSwitch/SDDSSwitch+ColorVariations.swift new file mode 100644 index 000000000..0a7dadd6f --- /dev/null +++ b/Themes/SDDSservTheme/SDDSSwitch/SDDSSwitch+ColorVariations.swift @@ -0,0 +1,33 @@ +import Foundation +import SDDSComponents +import SDDSServTheme + +public extension AppearanceVariation { + var `default`: Self { + .init( + appearance: appearance.applyColorVariation(variation: SDDSSwitch.default.appearance) + ) + } +} + +public extension SDDSSwitch { + static var `default`: AppearanceVariation { + .init( + name: "default", + appearance: SwitchAppearance( + titleTypography: SwitchTypography.label, + subtitleTypography: SwitchTypography.description, + titleColor: .backgroundInversePrimary, + subtitleColor: .surfaceInverseSolidPrimary.withOpacity(0.56), + tintColor: .surfaceDefaultAccent, + disabledAlpha: 0.4 + ) + ) + } + + static var all: [AppearanceVariation] { + [ + SDDSSwitch.default + ] + } +} diff --git a/Themes/SDDSservTheme/SDDSSwitch/SDDSSwitch+SizeVariations.swift b/Themes/SDDSservTheme/SDDSSwitch/SDDSSwitch+SizeVariations.swift new file mode 100644 index 000000000..ef95bdecd --- /dev/null +++ b/Themes/SDDSservTheme/SDDSSwitch/SDDSSwitch+SizeVariations.swift @@ -0,0 +1,48 @@ +// MARK: - Size +import Foundation +import SDDSComponents +import SDDSThemeCore + +// MARK: - Size +public extension AppearanceVariation { + var large: Self { + .init( + appearance: appearance + .size(SDDSSwitchSize.large) + .titleTypography(SwitchTypography.label) + .titleTypography(SwitchTypography.description) + ) + } + + var medium: Self { + .init( + appearance: appearance + .size(SDDSSwitchSize.medium) + .titleTypography(SwitchTypography.label) + .titleTypography(SwitchTypography.description) + ) + } + + var small: Self { + .init( + appearance: appearance + .size(SDDSSwitchSize.small) + .titleTypography(SwitchTypography.label) + .titleTypography(SwitchTypography.description) + ) + } +} + +public extension SDDSSwitch { + static var large: AppearanceVariation { + return AppearanceVariation(appearance: SwitchAppearance()).large + } + + static var medium: AppearanceVariation { + return AppearanceVariation(appearance: SwitchAppearance()).medium + } + + static var small: AppearanceVariation { + return AppearanceVariation(appearance: SwitchAppearance()).small + } +} diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSSwitch/SwitchAppearance+Extensions.swift b/Themes/SDDSservTheme/SDDSSwitch/SDDSSwitch+Typography.swift similarity index 96% rename from SDDSComponents/SDDSComponentsPreview/Components/SDDSSwitch/SwitchAppearance+Extensions.swift rename to Themes/SDDSservTheme/SDDSSwitch/SDDSSwitch+Typography.swift index 3cc190b14..4befbdafe 100644 --- a/SDDSComponents/SDDSComponentsPreview/Components/SDDSSwitch/SwitchAppearance+Extensions.swift +++ b/Themes/SDDSservTheme/SDDSSwitch/SDDSSwitch+Typography.swift @@ -5,6 +5,7 @@ import SDDSServTheme public extension SwitchAppearance { static var defaultAppearance: SwitchAppearance { .init( + size: SDDSSwitchSize.medium, titleTypography: SwitchTypography.label, subtitleTypography: SwitchTypography.description, titleColor: .backgroundInversePrimary, diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSSwitch/SDDSSwitchSize.swift b/Themes/SDDSservTheme/SDDSSwitch/SDDSSwitchSize.swift similarity index 85% rename from SDDSComponents/SDDSComponentsPreview/Components/SDDSSwitch/SDDSSwitchSize.swift rename to Themes/SDDSservTheme/SDDSSwitch/SDDSSwitchSize.swift index 770eecb68..98f0304d1 100644 --- a/SDDSComponents/SDDSComponentsPreview/Components/SDDSSwitch/SDDSSwitchSize.swift +++ b/Themes/SDDSservTheme/SDDSSwitch/SDDSSwitchSize.swift @@ -7,7 +7,7 @@ public enum SDDSSwitchSize: SwitchSizeConfiguration { case small public var debugDescription: String { - String(reflecting: self) + return "SDDSSwitchSize" } public var width: CGFloat? { @@ -15,6 +15,6 @@ public enum SDDSSwitchSize: SwitchSizeConfiguration { } public var verticalGap: CGFloat { - return 0 + return 4 } } diff --git a/SDDSComponents/SDDSComponentsPreview/Components/SDDSSwitch/SwitchTypography.swift b/Themes/SDDSservTheme/SDDSSwitch/SwitchTypography.swift similarity index 100% rename from SDDSComponents/SDDSComponentsPreview/Components/SDDSSwitch/SwitchTypography.swift rename to Themes/SDDSservTheme/SDDSSwitch/SwitchTypography.swift diff --git a/fastlane/Appfile b/fastlane/Appfile new file mode 100644 index 000000000..4282947e2 --- /dev/null +++ b/fastlane/Appfile @@ -0,0 +1,6 @@ +# app_identifier("[[APP_IDENTIFIER]]") # The bundle identifier of your app +# apple_id("[[APPLE_ID]]") # Your Apple Developer Portal username + + +# For more information about the Appfile, see: +# https://docs.fastlane.tools/advanced/#appfile diff --git a/fastlane/Fastfile b/fastlane/Fastfile new file mode 100644 index 000000000..319f20e97 --- /dev/null +++ b/fastlane/Fastfile @@ -0,0 +1,82 @@ +default_platform(:ios) + +platform :ios do + lane :build_and_upload do + def check_env_variable(key) + if ENV[key].nil? || ENV[key].empty? + UI.user_error!("Missing environment variable: #{key}") + end + end + + check_env_variable("APP_STORE_CONNECT_API_KEY_ID") + check_env_variable("APP_STORE_CONNECT_API_KEY") + check_env_variable("APP_STORE_CONNECT_ISSUER_ID") + + UI.message("All required environment variables are set!") + + # Получаем текущую версию из Info.plist + version = get_version_number( + xcodeproj: "SDDSDemoApp/SDDSDemoApp.xcodeproj", + target: "SDDSDemoApp" + ) + + if version.nil? + UI.user_error!("Version number is missing.") + end + + # Получение последнего номера сборки из TestFlight + latset_build_number_testflight = latest_testflight_build_number( + app_identifier: "com.sd.SDDSDemo", + api_key: { + key_id: ENV["APP_STORE_CONNECT_API_KEY_ID"], + issuer_id: ENV["APP_STORE_CONNECT_ISSUER_ID"], + key: ENV["APP_STORE_CONNECT_API_KEY"] + } + ) + + latset_build_number_testflight = (latset_build_number_testflight.to_i + 1).to_s + + # Увеличиваем номер сборки в Xcode проекте + increment_build_number( + build_number: latset_build_number_testflight, + xcodeproj: "SDDSDemoApp/SDDSDemoApp.xcodeproj" + ) + + next_build_number = get_build_number(xcodeproj: "SDDSDemoApp/SDDSDemoApp.xcodeproj") + + # Определяем имя сборки в зависимости от ветки + branch_name = git_branch + build_name = if branch_name == "develop" + "SDDSDemo #{version} #{next_build_number} (dev)" + else + "SDDSDemo" + end + + # Сборка приложения + UI.message("Building app...") + build_app( + scheme: "SDDSDemoApp", + export_method: "app-store", + export_options: { + signingStyle: "manual", + teamID: "KDMYYG676V", + provisioningProfiles: { + "com.sd.SDDSDemo" => "SDDS Demo Distribution" + }, + certificate: "iPhone Distribution: SALUTEDEV, MChJ (KDMYYG676V)", + profile: "SDDS Demo Distribution" + }, + output_name: build_name + ) + + # Загрузка в TestFlight + UI.message("Uploading to TestFlight...") + upload_to_testflight( + api_key: { + key_id: ENV["APP_STORE_CONNECT_API_KEY_ID"], + issuer_id: ENV["APP_STORE_CONNECT_ISSUER_ID"], + key: ENV["APP_STORE_CONNECT_API_KEY"] + } + ) + end +end diff --git a/scripts/install_certificate_and_profile.sh b/scripts/install_certificate_and_profile.sh new file mode 100644 index 000000000..05e68d792 --- /dev/null +++ b/scripts/install_certificate_and_profile.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +# Input parameters +RUNNER_TEMP=$1 +BUILD_CERTIFICATE_BASE64=$2 +P12_PASSWORD=$3 +BUILD_PROVISION_PROFILE_BASE64=$4 +KEYCHAIN_PASSWORD=$5 + +# Derived variables +CERTIFICATE_PATH="$RUNNER_TEMP/build_certificate.p12" +PP_PATH="$RUNNER_TEMP/build_pp.mobileprovision" +KEYCHAIN_PATH="$RUNNER_TEMP/app-signing.keychain-db" + +# Decode certificate and provisioning profile +echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode -o "$CERTIFICATE_PATH" +echo -n "$BUILD_PROVISION_PROFILE_BASE64" | base64 --decode -o "$PP_PATH" + +# Create temporary keychain +security create-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH" +security set-keychain-settings -lut 21600 "$KEYCHAIN_PATH" +security unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH" + +# Import certificate to keychain +security import "$CERTIFICATE_PATH" -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k "$KEYCHAIN_PATH" +security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH" +security list-keychain -d user -s "$KEYCHAIN_PATH" + +echo "Certificate and provisioning profile installed successfully." +