From 3a411c2643dfb12c986c33647142d2302bf50cf1 Mon Sep 17 00:00:00 2001 From: eldov Date: Sun, 30 Aug 2026 18:07:57 +0200 Subject: [PATCH] feat: export complete Discourse themes ecosystem (16 themes, SCSS, JS components and color schemes) --- README.md | 31 + deploy.sh | 67 ++ themes/-1_foundation/about_about.yml | 14 + .../-1_foundation/common_screenshot_dark.txt | 0 .../-1_foundation/common_screenshot_light.txt | 0 themes/-1_foundation/theme.json | 445 +++++++++ themes/-1_foundation/translations_ar.txt | 9 + themes/-1_foundation/translations_be.txt | 7 + themes/-1_foundation/translations_bg.txt | 7 + themes/-1_foundation/translations_bs_BA.txt | 7 + themes/-1_foundation/translations_ca.txt | 7 + themes/-1_foundation/translations_cs.txt | 9 + themes/-1_foundation/translations_da.txt | 7 + themes/-1_foundation/translations_de.yml | 9 + themes/-1_foundation/translations_el.txt | 7 + themes/-1_foundation/translations_en.yml | 3 + themes/-1_foundation/translations_en_GB.txt | 7 + themes/-1_foundation/translations_es.txt | 9 + themes/-1_foundation/translations_et.txt | 7 + themes/-1_foundation/translations_fa_IR.txt | 7 + themes/-1_foundation/translations_fi.txt | 9 + themes/-1_foundation/translations_fr.txt | 9 + themes/-1_foundation/translations_gl.txt | 7 + themes/-1_foundation/translations_he.txt | 9 + themes/-1_foundation/translations_hr.txt | 7 + themes/-1_foundation/translations_hu.txt | 9 + themes/-1_foundation/translations_hy.txt | 7 + themes/-1_foundation/translations_id.txt | 7 + themes/-1_foundation/translations_it.txt | 9 + themes/-1_foundation/translations_ja.txt | 9 + themes/-1_foundation/translations_ko.txt | 7 + themes/-1_foundation/translations_lt.txt | 7 + themes/-1_foundation/translations_lv.txt | 7 + themes/-1_foundation/translations_nb_NO.txt | 7 + themes/-1_foundation/translations_nl.txt | 9 + themes/-1_foundation/translations_pl_PL.txt | 9 + themes/-1_foundation/translations_pt.txt | 7 + themes/-1_foundation/translations_pt_BR.txt | 9 + themes/-1_foundation/translations_ro.txt | 9 + themes/-1_foundation/translations_ru.txt | 9 + themes/-1_foundation/translations_sk.txt | 9 + themes/-1_foundation/translations_sl.txt | 7 + themes/-1_foundation/translations_sq.txt | 7 + themes/-1_foundation/translations_sr.txt | 7 + themes/-1_foundation/translations_sv.txt | 7 + themes/-1_foundation/translations_sw.txt | 7 + themes/-1_foundation/translations_te.txt | 7 + themes/-1_foundation/translations_th.txt | 7 + themes/-1_foundation/translations_tr_TR.txt | 9 + themes/-1_foundation/translations_ug.txt | 9 + themes/-1_foundation/translations_uk.txt | 9 + themes/-1_foundation/translations_ur.txt | 9 + themes/-1_foundation/translations_vi.txt | 9 + themes/-1_foundation/translations_zh_CN.txt | 9 + themes/-1_foundation/translations_zh_TW.txt | 7 + themes/-2_horizon/about_about.yml | 151 +++ .../-2_horizon/common_color_definitions.txt | 108 +++ themes/-2_horizon/common_screenshot_dark.txt | 0 themes/-2_horizon/common_screenshot_light.txt | 0 themes/-2_horizon/common_scss.scss | 28 + themes/-2_horizon/desktop_scss.scss | 2 + themes/-2_horizon/extra_scss_buttons.txt | 122 +++ .../-2_horizon/extra_scss_categories-view.txt | 365 ++++++++ themes/-2_horizon/extra_scss_chat.txt | 117 +++ themes/-2_horizon/extra_scss_color-choice.txt | 29 + .../-2_horizon/extra_scss_compatibility.txt | 73 ++ .../extra_scss_composer-peek-mode.txt | 72 ++ themes/-2_horizon/extra_scss_composer.txt | 109 +++ .../extra_scss_desktop-full-width.txt | 254 +++++ .../extra_scss_desktop-horizon-fixes.txt | 76 ++ .../extra_scss_discourse-events.txt | 5 + .../extra_scss_experimental-screen.txt | 187 ++++ themes/-2_horizon/extra_scss_header.html | 87 ++ themes/-2_horizon/extra_scss_hiddenstuff.txt | 17 + .../extra_scss_high-context-cards.txt | 362 +++++++ themes/-2_horizon/extra_scss_login.txt | 15 + themes/-2_horizon/extra_scss_main.txt | 152 +++ themes/-2_horizon/extra_scss_misc.txt | 139 +++ themes/-2_horizon/extra_scss_mobile-stuff.txt | 224 +++++ themes/-2_horizon/extra_scss_nav-pills.txt | 64 ++ .../extra_scss_sidebar-new-topic-button.txt | 117 +++ themes/-2_horizon/extra_scss_sidebar.txt | 111 +++ themes/-2_horizon/extra_scss_topic-cards.txt | 654 +++++++++++++ themes/-2_horizon/extra_scss_topic-voting.txt | 35 + themes/-2_horizon/extra_scss_topic.txt | 135 +++ themes/-2_horizon/extra_scss_variables.txt | 6 + .../-2_horizon/extra_scss_welcome-banner.txt | 132 +++ ...ializers_composer-peek-toggle-connector.js | 6 + ...i-initializers_full-width-logo-behavior.js | 16 + ...ers_hamburger-click-outside-transformer.js | 10 + ...ipt_discourse_api-initializers_horizon.gjs | 8 + ...api-initializers_reposition-bulk-select.js | 7 + ...zers_sidebar-new-topic-button-connector.js | 6 + ...omponents_card_high-context-topic-card.gjs | 330 +++++++ ..._components_card_topic-activity-column.gjs | 43 + ..._components_card_topic-category-column.gjs | 7 + ...e_components_card_topic-creator-column.gjs | 17 + ...rse_components_card_topic-likes-column.gjs | 14 + ...e_components_card_topic-replies-column.gjs | 15 + ...se_components_card_topic-status-column.gjs | 18 + ...e_components_composer-peek-mode-toggle.gjs | 40 + ...scourse_components_experimental-screen.gjs | 68 ++ ...se_components_sidebar-new-topic-button.gjs | 139 +++ ...omponents_user-color-palette-menu-item.gjs | 40 + ...components_user-color-palette-selector.gjs | 212 +++++ ...course_initializers_topic-list-columns.gjs | 228 +++++ ...javascript_discourse_lib_topic-activity.js | 14 + ...script_discourse_lib_topic-status-badge.js | 19 + themes/-2_horizon/settings_yaml.yml | 3 + ...cceptance_high-context-topic-card-test.gjs | 75 ++ ...tance_nested-suggested-navigation-test.gjs | 189 ++++ ...ceptance_sidebar-new-topic-button-test.gjs | 46 + ..._acceptance_topic-activity-column-test.gjs | 66 ++ ...arget_7_integration_helpers_action-test.js | 66 ++ ...-convert-topic-card-context-to-boolean.txt | 7 + themes/-2_horizon/theme.json | 881 ++++++++++++++++++ themes/-2_horizon/translations_ar.txt | 38 + themes/-2_horizon/translations_be.txt | 8 + themes/-2_horizon/translations_bg.txt | 14 + themes/-2_horizon/translations_bs_BA.txt | 17 + themes/-2_horizon/translations_ca.txt | 18 + themes/-2_horizon/translations_cs.txt | 29 + themes/-2_horizon/translations_da.txt | 18 + themes/-2_horizon/translations_de.yml | 26 + themes/-2_horizon/translations_el.txt | 23 + themes/-2_horizon/translations_en.yml | 20 + themes/-2_horizon/translations_en_GB.txt | 7 + themes/-2_horizon/translations_es.txt | 23 + themes/-2_horizon/translations_et.txt | 12 + themes/-2_horizon/translations_fa_IR.txt | 18 + themes/-2_horizon/translations_fi.txt | 21 + themes/-2_horizon/translations_fr.txt | 26 + themes/-2_horizon/translations_gl.txt | 15 + themes/-2_horizon/translations_he.txt | 27 + themes/-2_horizon/translations_hr.txt | 21 + themes/-2_horizon/translations_hu.txt | 23 + themes/-2_horizon/translations_hy.txt | 12 + themes/-2_horizon/translations_id.txt | 13 + themes/-2_horizon/translations_it.txt | 21 + themes/-2_horizon/translations_ja.txt | 20 + themes/-2_horizon/translations_ko.txt | 15 + themes/-2_horizon/translations_lt.txt | 19 + themes/-2_horizon/translations_lv.txt | 12 + themes/-2_horizon/translations_nb_NO.txt | 12 + themes/-2_horizon/translations_nl.txt | 23 + themes/-2_horizon/translations_pl_PL.txt | 32 + themes/-2_horizon/translations_pt.txt | 18 + themes/-2_horizon/translations_pt_BR.txt | 23 + themes/-2_horizon/translations_ro.txt | 20 + themes/-2_horizon/translations_ru.txt | 32 + themes/-2_horizon/translations_sk.txt | 27 + themes/-2_horizon/translations_sl.txt | 19 + themes/-2_horizon/translations_sq.txt | 11 + themes/-2_horizon/translations_sr.txt | 12 + themes/-2_horizon/translations_sv.txt | 19 + themes/-2_horizon/translations_sw.txt | 12 + themes/-2_horizon/translations_te.txt | 14 + themes/-2_horizon/translations_th.txt | 11 + themes/-2_horizon/translations_tr_TR.txt | 23 + themes/-2_horizon/translations_ug.txt | 19 + themes/-2_horizon/translations_uk.txt | 32 + themes/-2_horizon/translations_ur.txt | 21 + themes/-2_horizon/translations_vi.txt | 20 + themes/-2_horizon/translations_zh_CN.txt | 23 + themes/-2_horizon/translations_zh_TW.txt | 15 + themes/1_default/theme.json | 28 + .../23_material_design_theme/about_about.yml | 79 ++ .../common_color_definitions.txt | 5 + .../common_head_tag.html | 1 + .../common_roboto-bold.txt | 0 .../common_roboto-italic.txt | 0 .../common_roboto.txt | 0 .../common_screenshot_dark.txt | 0 .../common_screenshot_light.txt | 0 .../23_material_design_theme/common_scss.scss | 200 ++++ .../desktop_scss.scss | 334 +++++++ .../extra_scss_sidebar.txt | 28 + .../23_material_design_theme/mobile_scss.scss | 81 ++ themes/23_material_design_theme/theme.json | 113 +++ .../translations_en.yml | 3 + themes/24_mint_theme/about_about.yml | 28 + .../common_color_definitions.txt | 5 + .../24_mint_theme/common_screenshot_dark.txt | 0 .../24_mint_theme/common_screenshot_light.txt | 0 themes/24_mint_theme/common_scss.scss | 357 +++++++ themes/24_mint_theme/desktop_scss.scss | 48 + themes/24_mint_theme/extra_scss_chat.txt | 35 + themes/24_mint_theme/extra_scss_sidebar.txt | 29 + themes/24_mint_theme/extra_scss_variables.txt | 27 + ...in-container_mint-component-extensions.gjs | 19 + themes/24_mint_theme/mobile_scss.scss | 5 + themes/24_mint_theme/theme.json | 123 +++ themes/24_mint_theme/translations_en.yml | 3 + themes/35_dracula_pro_ultra/common_scss.scss | 546 +++++++++++ themes/35_dracula_pro_ultra/theme.json | 36 + themes/36_tokyo_night_storm/common_scss.scss | 443 +++++++++ themes/36_tokyo_night_storm/theme.json | 36 + themes/37_onyx/common_scss.scss | 470 ++++++++++ themes/37_onyx/theme.json | 36 + .../common_head_tag.html | 1 + .../common_scss.scss | 455 +++++++++ themes/38_catppuccin_mocha_ultra/theme.json | 44 + themes/39_w-make_theme/common_scss.scss | 191 ++++ themes/39_w-make_theme/theme.json | 17 + .../about_about.yml | 10 + .../common_icons-sprite.txt | 0 ...scourse_api-initializers_phosphor-icons.js | 26 + .../javascript_discourse_lib_icon-map.js | 414 ++++++++ .../settings_yaml.yml | 14 + themes/40_discourse_phosphor_icons/theme.json | 57 ++ .../translations_en.yml | 6 + themes/41_air_theme/about_about.yml | 43 + themes/41_air_theme/common_header.html | 1 + .../41_air_theme/common_screenshot_dark.txt | 0 .../41_air_theme/common_screenshot_light.txt | 0 themes/41_air_theme/common_scss.scss | 615 ++++++++++++ themes/41_air_theme/desktop_scss.scss | 3 + .../41_air_theme/extra_scss_chat-desktop.txt | 56 ++ .../41_air_theme/extra_scss_chat-mobile.txt | 5 + .../extra_scss_showcased-categories.txt | 19 + .../extra_scss_sidebar-desktop.txt | 33 + ...course_initializers_init-topic-excerpts.js | 5 + themes/41_air_theme/mobile_scss.scss | 257 +++++ themes/41_air_theme/theme.json | 131 +++ themes/41_air_theme/translations_en.yml | 3 + .../about_about.yml | 8 + .../common_scss.scss | 372 ++++++++ ...ript_discourse_components_category-box.gjs | 122 +++ ...pt_discourse_components_category-boxes.gjs | 11 + ...t_discourse_components_category-header.gjs | 11 + ...ourse_components_custom-category-boxes.gjs | 120 +++ ..._initializers_initialize-category-boxes.js | 6 + .../mobile_scss.scss | 64 ++ .../settings_yaml.yml | 40 + .../theme.json | 89 ++ .../translations_en.yml | 3 + themes/43_clickable_topic/about_about.yml | 10 + themes/43_clickable_topic/common_scss.scss | 7 + ...se_api-initializers_clickable-topic-row.js | 31 + ...st-topic-list-item_clickable-topic-row.gjs | 40 + themes/43_clickable_topic/theme.json | 41 + themes/44_air_theme/about_about.yml | 43 + themes/44_air_theme/common_header.html | 1 + .../44_air_theme/common_screenshot_dark.txt | 0 .../44_air_theme/common_screenshot_light.txt | 0 themes/44_air_theme/common_scss.scss | 615 ++++++++++++ themes/44_air_theme/desktop_scss.scss | 3 + .../44_air_theme/extra_scss_chat-desktop.txt | 56 ++ .../44_air_theme/extra_scss_chat-mobile.txt | 5 + .../extra_scss_showcased-categories.txt | 19 + .../extra_scss_sidebar-desktop.txt | 33 + ...course_initializers_init-topic-excerpts.js | 5 + themes/44_air_theme/mobile_scss.scss | 257 +++++ themes/44_air_theme/theme.json | 131 +++ themes/44_air_theme/translations_en.yml | 3 + themes/45_custom_background/common_scss.scss | 1 + themes/45_custom_background/theme.json | 17 + themes/all_color_schemes.json | 758 +++++++++++++++ 258 files changed, 16878 insertions(+) create mode 100644 README.md create mode 100755 deploy.sh create mode 100644 themes/-1_foundation/about_about.yml create mode 100644 themes/-1_foundation/common_screenshot_dark.txt create mode 100644 themes/-1_foundation/common_screenshot_light.txt create mode 100644 themes/-1_foundation/theme.json create mode 100644 themes/-1_foundation/translations_ar.txt create mode 100644 themes/-1_foundation/translations_be.txt create mode 100644 themes/-1_foundation/translations_bg.txt create mode 100644 themes/-1_foundation/translations_bs_BA.txt create mode 100644 themes/-1_foundation/translations_ca.txt create mode 100644 themes/-1_foundation/translations_cs.txt create mode 100644 themes/-1_foundation/translations_da.txt create mode 100644 themes/-1_foundation/translations_de.yml create mode 100644 themes/-1_foundation/translations_el.txt create mode 100644 themes/-1_foundation/translations_en.yml create mode 100644 themes/-1_foundation/translations_en_GB.txt create mode 100644 themes/-1_foundation/translations_es.txt create mode 100644 themes/-1_foundation/translations_et.txt create mode 100644 themes/-1_foundation/translations_fa_IR.txt create mode 100644 themes/-1_foundation/translations_fi.txt create mode 100644 themes/-1_foundation/translations_fr.txt create mode 100644 themes/-1_foundation/translations_gl.txt create mode 100644 themes/-1_foundation/translations_he.txt create mode 100644 themes/-1_foundation/translations_hr.txt create mode 100644 themes/-1_foundation/translations_hu.txt create mode 100644 themes/-1_foundation/translations_hy.txt create mode 100644 themes/-1_foundation/translations_id.txt create mode 100644 themes/-1_foundation/translations_it.txt create mode 100644 themes/-1_foundation/translations_ja.txt create mode 100644 themes/-1_foundation/translations_ko.txt create mode 100644 themes/-1_foundation/translations_lt.txt create mode 100644 themes/-1_foundation/translations_lv.txt create mode 100644 themes/-1_foundation/translations_nb_NO.txt create mode 100644 themes/-1_foundation/translations_nl.txt create mode 100644 themes/-1_foundation/translations_pl_PL.txt create mode 100644 themes/-1_foundation/translations_pt.txt create mode 100644 themes/-1_foundation/translations_pt_BR.txt create mode 100644 themes/-1_foundation/translations_ro.txt create mode 100644 themes/-1_foundation/translations_ru.txt create mode 100644 themes/-1_foundation/translations_sk.txt create mode 100644 themes/-1_foundation/translations_sl.txt create mode 100644 themes/-1_foundation/translations_sq.txt create mode 100644 themes/-1_foundation/translations_sr.txt create mode 100644 themes/-1_foundation/translations_sv.txt create mode 100644 themes/-1_foundation/translations_sw.txt create mode 100644 themes/-1_foundation/translations_te.txt create mode 100644 themes/-1_foundation/translations_th.txt create mode 100644 themes/-1_foundation/translations_tr_TR.txt create mode 100644 themes/-1_foundation/translations_ug.txt create mode 100644 themes/-1_foundation/translations_uk.txt create mode 100644 themes/-1_foundation/translations_ur.txt create mode 100644 themes/-1_foundation/translations_vi.txt create mode 100644 themes/-1_foundation/translations_zh_CN.txt create mode 100644 themes/-1_foundation/translations_zh_TW.txt create mode 100644 themes/-2_horizon/about_about.yml create mode 100644 themes/-2_horizon/common_color_definitions.txt create mode 100644 themes/-2_horizon/common_screenshot_dark.txt create mode 100644 themes/-2_horizon/common_screenshot_light.txt create mode 100644 themes/-2_horizon/common_scss.scss create mode 100644 themes/-2_horizon/desktop_scss.scss create mode 100644 themes/-2_horizon/extra_scss_buttons.txt create mode 100644 themes/-2_horizon/extra_scss_categories-view.txt create mode 100644 themes/-2_horizon/extra_scss_chat.txt create mode 100644 themes/-2_horizon/extra_scss_color-choice.txt create mode 100644 themes/-2_horizon/extra_scss_compatibility.txt create mode 100644 themes/-2_horizon/extra_scss_composer-peek-mode.txt create mode 100644 themes/-2_horizon/extra_scss_composer.txt create mode 100644 themes/-2_horizon/extra_scss_desktop-full-width.txt create mode 100644 themes/-2_horizon/extra_scss_desktop-horizon-fixes.txt create mode 100644 themes/-2_horizon/extra_scss_discourse-events.txt create mode 100644 themes/-2_horizon/extra_scss_experimental-screen.txt create mode 100644 themes/-2_horizon/extra_scss_header.html create mode 100644 themes/-2_horizon/extra_scss_hiddenstuff.txt create mode 100644 themes/-2_horizon/extra_scss_high-context-cards.txt create mode 100644 themes/-2_horizon/extra_scss_login.txt create mode 100644 themes/-2_horizon/extra_scss_main.txt create mode 100644 themes/-2_horizon/extra_scss_misc.txt create mode 100644 themes/-2_horizon/extra_scss_mobile-stuff.txt create mode 100644 themes/-2_horizon/extra_scss_nav-pills.txt create mode 100644 themes/-2_horizon/extra_scss_sidebar-new-topic-button.txt create mode 100644 themes/-2_horizon/extra_scss_sidebar.txt create mode 100644 themes/-2_horizon/extra_scss_topic-cards.txt create mode 100644 themes/-2_horizon/extra_scss_topic-voting.txt create mode 100644 themes/-2_horizon/extra_scss_topic.txt create mode 100644 themes/-2_horizon/extra_scss_variables.txt create mode 100644 themes/-2_horizon/extra_scss_welcome-banner.txt create mode 100644 themes/-2_horizon/javascript_discourse_api-initializers_composer-peek-toggle-connector.js create mode 100644 themes/-2_horizon/javascript_discourse_api-initializers_full-width-logo-behavior.js create mode 100644 themes/-2_horizon/javascript_discourse_api-initializers_hamburger-click-outside-transformer.js create mode 100644 themes/-2_horizon/javascript_discourse_api-initializers_horizon.gjs create mode 100644 themes/-2_horizon/javascript_discourse_api-initializers_reposition-bulk-select.js create mode 100644 themes/-2_horizon/javascript_discourse_api-initializers_sidebar-new-topic-button-connector.js create mode 100644 themes/-2_horizon/javascript_discourse_components_card_high-context-topic-card.gjs create mode 100644 themes/-2_horizon/javascript_discourse_components_card_topic-activity-column.gjs create mode 100644 themes/-2_horizon/javascript_discourse_components_card_topic-category-column.gjs create mode 100644 themes/-2_horizon/javascript_discourse_components_card_topic-creator-column.gjs create mode 100644 themes/-2_horizon/javascript_discourse_components_card_topic-likes-column.gjs create mode 100644 themes/-2_horizon/javascript_discourse_components_card_topic-replies-column.gjs create mode 100644 themes/-2_horizon/javascript_discourse_components_card_topic-status-column.gjs create mode 100644 themes/-2_horizon/javascript_discourse_components_composer-peek-mode-toggle.gjs create mode 100644 themes/-2_horizon/javascript_discourse_components_experimental-screen.gjs create mode 100644 themes/-2_horizon/javascript_discourse_components_sidebar-new-topic-button.gjs create mode 100644 themes/-2_horizon/javascript_discourse_components_user-color-palette-menu-item.gjs create mode 100644 themes/-2_horizon/javascript_discourse_components_user-color-palette-selector.gjs create mode 100644 themes/-2_horizon/javascript_discourse_initializers_topic-list-columns.gjs create mode 100644 themes/-2_horizon/javascript_discourse_lib_topic-activity.js create mode 100644 themes/-2_horizon/javascript_discourse_lib_topic-status-badge.js create mode 100644 themes/-2_horizon/settings_yaml.yml create mode 100644 themes/-2_horizon/target_7_acceptance_high-context-topic-card-test.gjs create mode 100644 themes/-2_horizon/target_7_acceptance_nested-suggested-navigation-test.gjs create mode 100644 themes/-2_horizon/target_7_acceptance_sidebar-new-topic-button-test.gjs create mode 100644 themes/-2_horizon/target_7_acceptance_topic-activity-column-test.gjs create mode 100644 themes/-2_horizon/target_7_integration_helpers_action-test.js create mode 100644 themes/-2_horizon/target_8_0001-convert-topic-card-context-to-boolean.txt create mode 100644 themes/-2_horizon/theme.json create mode 100644 themes/-2_horizon/translations_ar.txt create mode 100644 themes/-2_horizon/translations_be.txt create mode 100644 themes/-2_horizon/translations_bg.txt create mode 100644 themes/-2_horizon/translations_bs_BA.txt create mode 100644 themes/-2_horizon/translations_ca.txt create mode 100644 themes/-2_horizon/translations_cs.txt create mode 100644 themes/-2_horizon/translations_da.txt create mode 100644 themes/-2_horizon/translations_de.yml create mode 100644 themes/-2_horizon/translations_el.txt create mode 100644 themes/-2_horizon/translations_en.yml create mode 100644 themes/-2_horizon/translations_en_GB.txt create mode 100644 themes/-2_horizon/translations_es.txt create mode 100644 themes/-2_horizon/translations_et.txt create mode 100644 themes/-2_horizon/translations_fa_IR.txt create mode 100644 themes/-2_horizon/translations_fi.txt create mode 100644 themes/-2_horizon/translations_fr.txt create mode 100644 themes/-2_horizon/translations_gl.txt create mode 100644 themes/-2_horizon/translations_he.txt create mode 100644 themes/-2_horizon/translations_hr.txt create mode 100644 themes/-2_horizon/translations_hu.txt create mode 100644 themes/-2_horizon/translations_hy.txt create mode 100644 themes/-2_horizon/translations_id.txt create mode 100644 themes/-2_horizon/translations_it.txt create mode 100644 themes/-2_horizon/translations_ja.txt create mode 100644 themes/-2_horizon/translations_ko.txt create mode 100644 themes/-2_horizon/translations_lt.txt create mode 100644 themes/-2_horizon/translations_lv.txt create mode 100644 themes/-2_horizon/translations_nb_NO.txt create mode 100644 themes/-2_horizon/translations_nl.txt create mode 100644 themes/-2_horizon/translations_pl_PL.txt create mode 100644 themes/-2_horizon/translations_pt.txt create mode 100644 themes/-2_horizon/translations_pt_BR.txt create mode 100644 themes/-2_horizon/translations_ro.txt create mode 100644 themes/-2_horizon/translations_ru.txt create mode 100644 themes/-2_horizon/translations_sk.txt create mode 100644 themes/-2_horizon/translations_sl.txt create mode 100644 themes/-2_horizon/translations_sq.txt create mode 100644 themes/-2_horizon/translations_sr.txt create mode 100644 themes/-2_horizon/translations_sv.txt create mode 100644 themes/-2_horizon/translations_sw.txt create mode 100644 themes/-2_horizon/translations_te.txt create mode 100644 themes/-2_horizon/translations_th.txt create mode 100644 themes/-2_horizon/translations_tr_TR.txt create mode 100644 themes/-2_horizon/translations_ug.txt create mode 100644 themes/-2_horizon/translations_uk.txt create mode 100644 themes/-2_horizon/translations_ur.txt create mode 100644 themes/-2_horizon/translations_vi.txt create mode 100644 themes/-2_horizon/translations_zh_CN.txt create mode 100644 themes/-2_horizon/translations_zh_TW.txt create mode 100644 themes/1_default/theme.json create mode 100644 themes/23_material_design_theme/about_about.yml create mode 100644 themes/23_material_design_theme/common_color_definitions.txt create mode 100644 themes/23_material_design_theme/common_head_tag.html create mode 100644 themes/23_material_design_theme/common_roboto-bold.txt create mode 100644 themes/23_material_design_theme/common_roboto-italic.txt create mode 100644 themes/23_material_design_theme/common_roboto.txt create mode 100644 themes/23_material_design_theme/common_screenshot_dark.txt create mode 100644 themes/23_material_design_theme/common_screenshot_light.txt create mode 100644 themes/23_material_design_theme/common_scss.scss create mode 100644 themes/23_material_design_theme/desktop_scss.scss create mode 100644 themes/23_material_design_theme/extra_scss_sidebar.txt create mode 100644 themes/23_material_design_theme/mobile_scss.scss create mode 100644 themes/23_material_design_theme/theme.json create mode 100644 themes/23_material_design_theme/translations_en.yml create mode 100644 themes/24_mint_theme/about_about.yml create mode 100644 themes/24_mint_theme/common_color_definitions.txt create mode 100644 themes/24_mint_theme/common_screenshot_dark.txt create mode 100644 themes/24_mint_theme/common_screenshot_light.txt create mode 100644 themes/24_mint_theme/common_scss.scss create mode 100644 themes/24_mint_theme/desktop_scss.scss create mode 100644 themes/24_mint_theme/extra_scss_chat.txt create mode 100644 themes/24_mint_theme/extra_scss_sidebar.txt create mode 100644 themes/24_mint_theme/extra_scss_variables.txt create mode 100644 themes/24_mint_theme/javascript_discourse_connectors_above-main-container_mint-component-extensions.gjs create mode 100644 themes/24_mint_theme/mobile_scss.scss create mode 100644 themes/24_mint_theme/theme.json create mode 100644 themes/24_mint_theme/translations_en.yml create mode 100644 themes/35_dracula_pro_ultra/common_scss.scss create mode 100644 themes/35_dracula_pro_ultra/theme.json create mode 100644 themes/36_tokyo_night_storm/common_scss.scss create mode 100644 themes/36_tokyo_night_storm/theme.json create mode 100644 themes/37_onyx/common_scss.scss create mode 100644 themes/37_onyx/theme.json create mode 100644 themes/38_catppuccin_mocha_ultra/common_head_tag.html create mode 100644 themes/38_catppuccin_mocha_ultra/common_scss.scss create mode 100644 themes/38_catppuccin_mocha_ultra/theme.json create mode 100644 themes/39_w-make_theme/common_scss.scss create mode 100644 themes/39_w-make_theme/theme.json create mode 100644 themes/40_discourse_phosphor_icons/about_about.yml create mode 100644 themes/40_discourse_phosphor_icons/common_icons-sprite.txt create mode 100644 themes/40_discourse_phosphor_icons/javascript_discourse_api-initializers_phosphor-icons.js create mode 100644 themes/40_discourse_phosphor_icons/javascript_discourse_lib_icon-map.js create mode 100644 themes/40_discourse_phosphor_icons/settings_yaml.yml create mode 100644 themes/40_discourse_phosphor_icons/theme.json create mode 100644 themes/40_discourse_phosphor_icons/translations_en.yml create mode 100644 themes/41_air_theme/about_about.yml create mode 100644 themes/41_air_theme/common_header.html create mode 100644 themes/41_air_theme/common_screenshot_dark.txt create mode 100644 themes/41_air_theme/common_screenshot_light.txt create mode 100644 themes/41_air_theme/common_scss.scss create mode 100644 themes/41_air_theme/desktop_scss.scss create mode 100644 themes/41_air_theme/extra_scss_chat-desktop.txt create mode 100644 themes/41_air_theme/extra_scss_chat-mobile.txt create mode 100644 themes/41_air_theme/extra_scss_showcased-categories.txt create mode 100644 themes/41_air_theme/extra_scss_sidebar-desktop.txt create mode 100644 themes/41_air_theme/javascript_discourse_initializers_init-topic-excerpts.js create mode 100644 themes/41_air_theme/mobile_scss.scss create mode 100644 themes/41_air_theme/theme.json create mode 100644 themes/41_air_theme/translations_en.yml create mode 100644 themes/42_modern_category___group_boxes/about_about.yml create mode 100644 themes/42_modern_category___group_boxes/common_scss.scss create mode 100644 themes/42_modern_category___group_boxes/javascript_discourse_components_category-box.gjs create mode 100644 themes/42_modern_category___group_boxes/javascript_discourse_components_category-boxes.gjs create mode 100644 themes/42_modern_category___group_boxes/javascript_discourse_components_category-header.gjs create mode 100644 themes/42_modern_category___group_boxes/javascript_discourse_components_custom-category-boxes.gjs create mode 100644 themes/42_modern_category___group_boxes/javascript_discourse_initializers_initialize-category-boxes.js create mode 100644 themes/42_modern_category___group_boxes/mobile_scss.scss create mode 100644 themes/42_modern_category___group_boxes/settings_yaml.yml create mode 100644 themes/42_modern_category___group_boxes/theme.json create mode 100644 themes/42_modern_category___group_boxes/translations_en.yml create mode 100644 themes/43_clickable_topic/about_about.yml create mode 100644 themes/43_clickable_topic/common_scss.scss create mode 100644 themes/43_clickable_topic/javascript_discourse_api-initializers_clickable-topic-row.js create mode 100644 themes/43_clickable_topic/javascript_discourse_connectors_above-latest-topic-list-item_clickable-topic-row.gjs create mode 100644 themes/43_clickable_topic/theme.json create mode 100644 themes/44_air_theme/about_about.yml create mode 100644 themes/44_air_theme/common_header.html create mode 100644 themes/44_air_theme/common_screenshot_dark.txt create mode 100644 themes/44_air_theme/common_screenshot_light.txt create mode 100644 themes/44_air_theme/common_scss.scss create mode 100644 themes/44_air_theme/desktop_scss.scss create mode 100644 themes/44_air_theme/extra_scss_chat-desktop.txt create mode 100644 themes/44_air_theme/extra_scss_chat-mobile.txt create mode 100644 themes/44_air_theme/extra_scss_showcased-categories.txt create mode 100644 themes/44_air_theme/extra_scss_sidebar-desktop.txt create mode 100644 themes/44_air_theme/javascript_discourse_initializers_init-topic-excerpts.js create mode 100644 themes/44_air_theme/mobile_scss.scss create mode 100644 themes/44_air_theme/theme.json create mode 100644 themes/44_air_theme/translations_en.yml create mode 100644 themes/45_custom_background/common_scss.scss create mode 100644 themes/45_custom_background/theme.json create mode 100644 themes/all_color_schemes.json diff --git a/README.md b/README.md new file mode 100644 index 0000000..ba433ab --- /dev/null +++ b/README.md @@ -0,0 +1,31 @@ +# Discourse Forum Themes – W-MAKE & Discourse Ecosystem + +Kompletter, lokaler Export und Theme-Manager aller Discourse Themes für [info-board.win](https://info-board.win) & [w-make.org](https://w-make.org). + +--- + +## 📁 Struktur + +- `themes/`: + - `39_w-make_theme/`: **W-MAKE Theme (ID 39)** – Primäres Custom Theme mit Cyber Glassmorphism, Farbverlauf-Akzentlinie im Header und angepassten Darkmode-Komponenten. + - `41_air_theme/`: **Air Theme (ID 41)** – Aktives Standardtheme mit Showcase-Kategorien, Chat-Stylings und Sidebar-Komponenten. + - `42_modern_category___group_boxes/`: Moderne Kategoriematrix & Group-Boxen Component. + - `43_clickable_topic/`: Clickable Topic Row Component. + - `40_discourse_phosphor_icons/`: Phosphor Icons Sprite & Map. + - `45_custom_background/`: Custom Background Extension. + - `35_dracula_pro_ultra/`, `36_tokyo_night_storm/`, `37_onyx/`, `38_catppuccin_mocha_ultra/`: Zusätzliche Darkmode-Themes. + - `-1_foundation/`, `-2_horizon/`, `23_material_design_theme/`, `24_mint_theme/`: Weitere Core- und Community-Themes. + - `all_color_schemes.json`: Vollständiger Export aller 34 Farbschemata (HEX-Werte, Zuordnungen). +- `deploy.sh`: Synchronisiert SCSS-/Codeänderungen direkt in die Discourse-Datenbank und leert den Cache. + +--- + +## 🚀 Deployment & Synchronisation + +```bash +# W-MAKE Theme (39) auf den VPS deployen: +./deploy.sh + +# Spezifisches Theme (z. B. Air Theme 41) deployen: +./deploy.sh 41 +``` diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 0000000..8179cb7 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,67 @@ +#!/usr/bin/env bash +# deploy.sh - Deploy and Sync Discourse Themes +# Domains: info-board.win / w-make.org +# Target Host: free-warez.win -> Discourse Container (app) + +set -euo pipefail + +TARGET_HOST="free-warez.win" +LOCAL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +THEMES_DIR="$LOCAL_DIR/themes" + +echo "🚀 Discourse Theme Deploy & Sync Manager" +echo " Target Host: $TARGET_HOST (Discourse container 'app')" +echo "=========================================================" + +# 1. Check SSH connection +echo "📡 Checking SSH connection to $TARGET_HOST..." +if ! ssh -q -o BatchMode=yes -o ConnectTimeout=5 "$TARGET_HOST" exit; then + echo "❌ Cannot connect to $TARGET_HOST via SSH." + exit 1 +fi + +THEME_ID="${1:-39}" + +if [ "$THEME_ID" = "39" ]; then + SCSS_FILE="$THEMES_DIR/39_w-make_theme/common_scss.scss" + if [ ! -f "$SCSS_FILE" ]; then + SCSS_FILE="$THEMES_DIR/w-make-theme.scss" + fi + echo "🔄 Deploying W-MAKE Theme (ID: 39) from $SCSS_FILE..." + scp "$SCSS_FILE" "$TARGET_HOST:/tmp/w-make-theme.scss" + ssh "$TARGET_HOST" 'docker exec -i app su - discourse -c "psql -d discourse" << "SQL" +UPDATE theme_fields +SET value = pg_read_file('\''/tmp/w-make-theme.scss'\'') +WHERE theme_id = 39 AND name = '\''scss'\''; + +UPDATE themes +SET updated_at = NOW() +WHERE id = 39; +SQL +rm -f /tmp/w-make-theme.scss +' +elif [ "$THEME_ID" = "41" ]; then + echo "🔄 Deploying Air Theme (ID: 41) common SCSS..." + SCSS_FILE="$THEMES_DIR/41_air_theme/common_scss.scss" + scp "$SCSS_FILE" "$TARGET_HOST:/tmp/air-theme.scss" + ssh "$TARGET_HOST" 'docker exec -i app su - discourse -c "psql -d discourse" << "SQL" +UPDATE theme_fields +SET value = pg_read_file('\''/tmp/air-theme.scss'\'') +WHERE theme_id = 41 AND name = '\''scss'\'' AND target_id = 0; + +UPDATE themes +SET updated_at = NOW() +WHERE id = 41; +SQL +rm -f /tmp/air-theme.scss +' +else + echo "ℹ️ Custom theme ID: $THEME_ID provided." +fi + +# Invalidate cache & recompile +echo "🔄 Clearing Discourse theme cache..." +ssh "$TARGET_HOST" 'docker exec -i app su - discourse -c "bundle exec rails runner \"Theme.find_by(id: $THEME_ID)&.changed_fields&.clear; Discourse.cache.clear\" 2>/dev/null || true"' + +echo "✅ Discourse theme(s) updated successfully!" +echo "✨ Deployment complete!" diff --git a/themes/-1_foundation/about_about.yml b/themes/-1_foundation/about_about.yml new file mode 100644 index 0000000..ef85133 --- /dev/null +++ b/themes/-1_foundation/about_about.yml @@ -0,0 +1,14 @@ +{ + "name": "Foundation", + "authors": "Discourse", + "theme_version": "1.0.0", + "minimum_discourse_version": null, + "maximum_discourse_version": null, + "assets": {}, + "modifiers": {}, + "color_schemes": {}, + "screenshots": [ + "screenshots/light.png", + "screenshots/dark.png" + ] +} diff --git a/themes/-1_foundation/common_screenshot_dark.txt b/themes/-1_foundation/common_screenshot_dark.txt new file mode 100644 index 0000000..e69de29 diff --git a/themes/-1_foundation/common_screenshot_light.txt b/themes/-1_foundation/common_screenshot_light.txt new file mode 100644 index 0000000..e69de29 diff --git a/themes/-1_foundation/theme.json b/themes/-1_foundation/theme.json new file mode 100644 index 0000000..ea9209e --- /dev/null +++ b/themes/-1_foundation/theme.json @@ -0,0 +1,445 @@ +{ + "id": -1, + "name": "Foundation", + "user_selectable": false, + "color_scheme": { + "id": 3, + "name": "WCAG Dark", + "theme_id": null, + "colors": { + "primary-medium": "999999", + "primary-low-mid": "888888", + "secondary": "0c0c0c", + "tertiary": "759AFF", + "quaternary": "759AFF", + "header_background": "000000", + "header_primary": "ffffff", + "highlight": "3369FF", + "selected": "0d2569", + "hover": "002382", + "danger": "FF697A", + "success": "70B880", + "love": "9D256B", + "primary": "b2c0cd" + } + }, + "fields_count": 52, + "files": [ + { + "field_id": 512, + "target_id": 0, + "target_name": "common", + "name": "screenshot_dark", + "filename": "common_screenshot_dark.txt", + "bytes": 0 + }, + { + "field_id": 511, + "target_id": 0, + "target_name": "common", + "name": "screenshot_light", + "filename": "common_screenshot_light.txt", + "bytes": 0 + }, + { + "field_id": 514, + "target_id": 4, + "target_name": "translations", + "name": "ar", + "filename": "translations_ar.txt", + "bytes": 333 + }, + { + "field_id": 515, + "target_id": 4, + "target_name": "translations", + "name": "be", + "filename": "translations_be.txt", + "bytes": 197 + }, + { + "field_id": 516, + "target_id": 4, + "target_name": "translations", + "name": "bg", + "filename": "translations_bg.txt", + "bytes": 197 + }, + { + "field_id": 517, + "target_id": 4, + "target_name": "translations", + "name": "bs_BA", + "filename": "translations_bs_BA.txt", + "bytes": 200 + }, + { + "field_id": 518, + "target_id": 4, + "target_name": "translations", + "name": "ca", + "filename": "translations_ca.txt", + "bytes": 197 + }, + { + "field_id": 519, + "target_id": 4, + "target_name": "translations", + "name": "cs", + "filename": "translations_cs.txt", + "bytes": 331 + }, + { + "field_id": 520, + "target_id": 4, + "target_name": "translations", + "name": "da", + "filename": "translations_da.txt", + "bytes": 197 + }, + { + "field_id": 521, + "target_id": 4, + "target_name": "translations", + "name": "de", + "filename": "translations_de.yml", + "bytes": 354 + }, + { + "field_id": 522, + "target_id": 4, + "target_name": "translations", + "name": "el", + "filename": "translations_el.txt", + "bytes": 197 + }, + { + "field_id": 523, + "target_id": 4, + "target_name": "translations", + "name": "en", + "filename": "translations_en.yml", + "bytes": 143 + }, + { + "field_id": 524, + "target_id": 4, + "target_name": "translations", + "name": "en_GB", + "filename": "translations_en_GB.txt", + "bytes": 200 + }, + { + "field_id": 525, + "target_id": 4, + "target_name": "translations", + "name": "es", + "filename": "translations_es.txt", + "bytes": 342 + }, + { + "field_id": 526, + "target_id": 4, + "target_name": "translations", + "name": "et", + "filename": "translations_et.txt", + "bytes": 197 + }, + { + "field_id": 527, + "target_id": 4, + "target_name": "translations", + "name": "fa_IR", + "filename": "translations_fa_IR.txt", + "bytes": 200 + }, + { + "field_id": 528, + "target_id": 4, + "target_name": "translations", + "name": "fi", + "filename": "translations_fi.txt", + "bytes": 326 + }, + { + "field_id": 529, + "target_id": 4, + "target_name": "translations", + "name": "fr", + "filename": "translations_fr.txt", + "bytes": 366 + }, + { + "field_id": 530, + "target_id": 4, + "target_name": "translations", + "name": "gl", + "filename": "translations_gl.txt", + "bytes": 197 + }, + { + "field_id": 531, + "target_id": 4, + "target_name": "translations", + "name": "he", + "filename": "translations_he.txt", + "bytes": 306 + }, + { + "field_id": 532, + "target_id": 4, + "target_name": "translations", + "name": "hr", + "filename": "translations_hr.txt", + "bytes": 197 + }, + { + "field_id": 533, + "target_id": 4, + "target_name": "translations", + "name": "hu", + "filename": "translations_hu.txt", + "bytes": 337 + }, + { + "field_id": 534, + "target_id": 4, + "target_name": "translations", + "name": "hy", + "filename": "translations_hy.txt", + "bytes": 197 + }, + { + "field_id": 535, + "target_id": 4, + "target_name": "translations", + "name": "id", + "filename": "translations_id.txt", + "bytes": 197 + }, + { + "field_id": 536, + "target_id": 4, + "target_name": "translations", + "name": "it", + "filename": "translations_it.txt", + "bytes": 351 + }, + { + "field_id": 537, + "target_id": 4, + "target_name": "translations", + "name": "ja", + "filename": "translations_ja.txt", + "bytes": 287 + }, + { + "field_id": 538, + "target_id": 4, + "target_name": "translations", + "name": "ko", + "filename": "translations_ko.txt", + "bytes": 197 + }, + { + "field_id": 539, + "target_id": 4, + "target_name": "translations", + "name": "lt", + "filename": "translations_lt.txt", + "bytes": 197 + }, + { + "field_id": 540, + "target_id": 4, + "target_name": "translations", + "name": "lv", + "filename": "translations_lv.txt", + "bytes": 197 + }, + { + "field_id": 541, + "target_id": 4, + "target_name": "translations", + "name": "nb_NO", + "filename": "translations_nb_NO.txt", + "bytes": 200 + }, + { + "field_id": 542, + "target_id": 4, + "target_name": "translations", + "name": "nl", + "filename": "translations_nl.txt", + "bytes": 352 + }, + { + "field_id": 543, + "target_id": 4, + "target_name": "translations", + "name": "pl_PL", + "filename": "translations_pl_PL.txt", + "bytes": 351 + }, + { + "field_id": 544, + "target_id": 4, + "target_name": "translations", + "name": "pt", + "filename": "translations_pt.txt", + "bytes": 197 + }, + { + "field_id": 545, + "target_id": 4, + "target_name": "translations", + "name": "pt_BR", + "filename": "translations_pt_BR.txt", + "bytes": 360 + }, + { + "field_id": 546, + "target_id": 4, + "target_name": "translations", + "name": "ro", + "filename": "translations_ro.txt", + "bytes": 352 + }, + { + "field_id": 547, + "target_id": 4, + "target_name": "translations", + "name": "ru", + "filename": "translations_ru.txt", + "bytes": 319 + }, + { + "field_id": 548, + "target_id": 4, + "target_name": "translations", + "name": "sk", + "filename": "translations_sk.txt", + "bytes": 329 + }, + { + "field_id": 549, + "target_id": 4, + "target_name": "translations", + "name": "sl", + "filename": "translations_sl.txt", + "bytes": 197 + }, + { + "field_id": 550, + "target_id": 4, + "target_name": "translations", + "name": "sq", + "filename": "translations_sq.txt", + "bytes": 197 + }, + { + "field_id": 551, + "target_id": 4, + "target_name": "translations", + "name": "sr", + "filename": "translations_sr.txt", + "bytes": 197 + }, + { + "field_id": 552, + "target_id": 4, + "target_name": "translations", + "name": "sv", + "filename": "translations_sv.txt", + "bytes": 197 + }, + { + "field_id": 553, + "target_id": 4, + "target_name": "translations", + "name": "sw", + "filename": "translations_sw.txt", + "bytes": 197 + }, + { + "field_id": 554, + "target_id": 4, + "target_name": "translations", + "name": "te", + "filename": "translations_te.txt", + "bytes": 197 + }, + { + "field_id": 555, + "target_id": 4, + "target_name": "translations", + "name": "th", + "filename": "translations_th.txt", + "bytes": 197 + }, + { + "field_id": 556, + "target_id": 4, + "target_name": "translations", + "name": "tr_TR", + "filename": "translations_tr_TR.txt", + "bytes": 324 + }, + { + "field_id": 557, + "target_id": 4, + "target_name": "translations", + "name": "ug", + "filename": "translations_ug.txt", + "bytes": 337 + }, + { + "field_id": 558, + "target_id": 4, + "target_name": "translations", + "name": "uk", + "filename": "translations_uk.txt", + "bytes": 335 + }, + { + "field_id": 559, + "target_id": 4, + "target_name": "translations", + "name": "ur", + "filename": "translations_ur.txt", + "bytes": 313 + }, + { + "field_id": 560, + "target_id": 4, + "target_name": "translations", + "name": "vi", + "filename": "translations_vi.txt", + "bytes": 326 + }, + { + "field_id": 561, + "target_id": 4, + "target_name": "translations", + "name": "zh_CN", + "filename": "translations_zh_CN.txt", + "bytes": 273 + }, + { + "field_id": 562, + "target_id": 4, + "target_name": "translations", + "name": "zh_TW", + "filename": "translations_zh_TW.txt", + "bytes": 200 + }, + { + "field_id": 513, + "target_id": 9, + "target_name": "about", + "name": "about", + "filename": "about_about.yml", + "bytes": 293 + } + ] +} \ No newline at end of file diff --git a/themes/-1_foundation/translations_ar.txt b/themes/-1_foundation/translations_ar.txt new file mode 100644 index 0000000..9983d87 --- /dev/null +++ b/themes/-1_foundation/translations_ar.txt @@ -0,0 +1,9 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +ar: + theme_metadata: + description: "السمة التقليدية لمنصة Discourse، الملائمة بشكل جيد للتخصيص بما يتوافق مع متطلبات مجتمعك المحدَّدة." diff --git a/themes/-1_foundation/translations_be.txt b/themes/-1_foundation/translations_be.txt new file mode 100644 index 0000000..2ea77a0 --- /dev/null +++ b/themes/-1_foundation/translations_be.txt @@ -0,0 +1,7 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +be: diff --git a/themes/-1_foundation/translations_bg.txt b/themes/-1_foundation/translations_bg.txt new file mode 100644 index 0000000..5233352 --- /dev/null +++ b/themes/-1_foundation/translations_bg.txt @@ -0,0 +1,7 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +bg: diff --git a/themes/-1_foundation/translations_bs_BA.txt b/themes/-1_foundation/translations_bs_BA.txt new file mode 100644 index 0000000..828a7e6 --- /dev/null +++ b/themes/-1_foundation/translations_bs_BA.txt @@ -0,0 +1,7 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +bs_BA: diff --git a/themes/-1_foundation/translations_ca.txt b/themes/-1_foundation/translations_ca.txt new file mode 100644 index 0000000..ec737bc --- /dev/null +++ b/themes/-1_foundation/translations_ca.txt @@ -0,0 +1,7 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +ca: diff --git a/themes/-1_foundation/translations_cs.txt b/themes/-1_foundation/translations_cs.txt new file mode 100644 index 0000000..925bffb --- /dev/null +++ b/themes/-1_foundation/translations_cs.txt @@ -0,0 +1,9 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +cs: + theme_metadata: + description: "Klasický motiv Discourse, který se dobře hodí k přizpůsobení specifickým potřebám vaší komunity." diff --git a/themes/-1_foundation/translations_da.txt b/themes/-1_foundation/translations_da.txt new file mode 100644 index 0000000..f39c727 --- /dev/null +++ b/themes/-1_foundation/translations_da.txt @@ -0,0 +1,7 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +da: diff --git a/themes/-1_foundation/translations_de.yml b/themes/-1_foundation/translations_de.yml new file mode 100644 index 0000000..a6b1e44 --- /dev/null +++ b/themes/-1_foundation/translations_de.yml @@ -0,0 +1,9 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +de: + theme_metadata: + description: "Das klassische Discourse-Theme, das sich gut für die Anpassung an die spezifischen Bedürfnisse deiner Community eignet." diff --git a/themes/-1_foundation/translations_el.txt b/themes/-1_foundation/translations_el.txt new file mode 100644 index 0000000..d872d0e --- /dev/null +++ b/themes/-1_foundation/translations_el.txt @@ -0,0 +1,7 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +el: diff --git a/themes/-1_foundation/translations_en.yml b/themes/-1_foundation/translations_en.yml new file mode 100644 index 0000000..6c9b0ba --- /dev/null +++ b/themes/-1_foundation/translations_en.yml @@ -0,0 +1,3 @@ +en: + theme_metadata: + description: "The classic Discourse theme that is well-suited to customization for your community’s specific needs." diff --git a/themes/-1_foundation/translations_en_GB.txt b/themes/-1_foundation/translations_en_GB.txt new file mode 100644 index 0000000..2d4fa18 --- /dev/null +++ b/themes/-1_foundation/translations_en_GB.txt @@ -0,0 +1,7 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +en_GB: diff --git a/themes/-1_foundation/translations_es.txt b/themes/-1_foundation/translations_es.txt new file mode 100644 index 0000000..1160003 --- /dev/null +++ b/themes/-1_foundation/translations_es.txt @@ -0,0 +1,9 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +es: + theme_metadata: + description: "El tema clásico de Discourse que se adapta bien a la personalización según las necesidades de tu comunidad." diff --git a/themes/-1_foundation/translations_et.txt b/themes/-1_foundation/translations_et.txt new file mode 100644 index 0000000..0ea0b6d --- /dev/null +++ b/themes/-1_foundation/translations_et.txt @@ -0,0 +1,7 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +et: diff --git a/themes/-1_foundation/translations_fa_IR.txt b/themes/-1_foundation/translations_fa_IR.txt new file mode 100644 index 0000000..5651208 --- /dev/null +++ b/themes/-1_foundation/translations_fa_IR.txt @@ -0,0 +1,7 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +fa_IR: diff --git a/themes/-1_foundation/translations_fi.txt b/themes/-1_foundation/translations_fi.txt new file mode 100644 index 0000000..ef5e90a --- /dev/null +++ b/themes/-1_foundation/translations_fi.txt @@ -0,0 +1,9 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +fi: + theme_metadata: + description: "Klassinen Discourse-teema, joka sopii hyvin mukauttamiseen yhteisösi erityisiin tarpeisiin." diff --git a/themes/-1_foundation/translations_fr.txt b/themes/-1_foundation/translations_fr.txt new file mode 100644 index 0000000..6d5dfe5 --- /dev/null +++ b/themes/-1_foundation/translations_fr.txt @@ -0,0 +1,9 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +fr: + theme_metadata: + description: "Le thème classique de Discourse, parfaitement adapté à la personnalisation en fonction des besoins spécifiques de votre communauté." diff --git a/themes/-1_foundation/translations_gl.txt b/themes/-1_foundation/translations_gl.txt new file mode 100644 index 0000000..fb911ce --- /dev/null +++ b/themes/-1_foundation/translations_gl.txt @@ -0,0 +1,7 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +gl: diff --git a/themes/-1_foundation/translations_he.txt b/themes/-1_foundation/translations_he.txt new file mode 100644 index 0000000..25ccb8d --- /dev/null +++ b/themes/-1_foundation/translations_he.txt @@ -0,0 +1,9 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +he: + theme_metadata: + description: "ערכת הנושא הקלאסית של Discourse שמותאמת לצרכים המסוימים של הקהילה שלכם." diff --git a/themes/-1_foundation/translations_hr.txt b/themes/-1_foundation/translations_hr.txt new file mode 100644 index 0000000..93343ce --- /dev/null +++ b/themes/-1_foundation/translations_hr.txt @@ -0,0 +1,7 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +hr: diff --git a/themes/-1_foundation/translations_hu.txt b/themes/-1_foundation/translations_hu.txt new file mode 100644 index 0000000..c87c083 --- /dev/null +++ b/themes/-1_foundation/translations_hu.txt @@ -0,0 +1,9 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +hu: + theme_metadata: + description: "A klasszikus diskurzus téma, amely jól illeszkedik a közösség sajátos igényeihez való testreszabáshoz." diff --git a/themes/-1_foundation/translations_hy.txt b/themes/-1_foundation/translations_hy.txt new file mode 100644 index 0000000..cb18f64 --- /dev/null +++ b/themes/-1_foundation/translations_hy.txt @@ -0,0 +1,7 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +hy: diff --git a/themes/-1_foundation/translations_id.txt b/themes/-1_foundation/translations_id.txt new file mode 100644 index 0000000..596e36b --- /dev/null +++ b/themes/-1_foundation/translations_id.txt @@ -0,0 +1,7 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +id: diff --git a/themes/-1_foundation/translations_it.txt b/themes/-1_foundation/translations_it.txt new file mode 100644 index 0000000..79c18a8 --- /dev/null +++ b/themes/-1_foundation/translations_it.txt @@ -0,0 +1,9 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +it: + theme_metadata: + description: "Il tema classico di Discourse, ideale per la personalizzazione in base alle esigenze specifiche della tua community." diff --git a/themes/-1_foundation/translations_ja.txt b/themes/-1_foundation/translations_ja.txt new file mode 100644 index 0000000..308939a --- /dev/null +++ b/themes/-1_foundation/translations_ja.txt @@ -0,0 +1,9 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +ja: + theme_metadata: + description: "コミュニティーの特定のニーズに合わせてカスタマイズするのに適した Discourse のクラシックテーマ" diff --git a/themes/-1_foundation/translations_ko.txt b/themes/-1_foundation/translations_ko.txt new file mode 100644 index 0000000..18dd77f --- /dev/null +++ b/themes/-1_foundation/translations_ko.txt @@ -0,0 +1,7 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +ko: diff --git a/themes/-1_foundation/translations_lt.txt b/themes/-1_foundation/translations_lt.txt new file mode 100644 index 0000000..16bb197 --- /dev/null +++ b/themes/-1_foundation/translations_lt.txt @@ -0,0 +1,7 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +lt: diff --git a/themes/-1_foundation/translations_lv.txt b/themes/-1_foundation/translations_lv.txt new file mode 100644 index 0000000..59e0ef6 --- /dev/null +++ b/themes/-1_foundation/translations_lv.txt @@ -0,0 +1,7 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +lv: diff --git a/themes/-1_foundation/translations_nb_NO.txt b/themes/-1_foundation/translations_nb_NO.txt new file mode 100644 index 0000000..2e2224d --- /dev/null +++ b/themes/-1_foundation/translations_nb_NO.txt @@ -0,0 +1,7 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +nb_NO: diff --git a/themes/-1_foundation/translations_nl.txt b/themes/-1_foundation/translations_nl.txt new file mode 100644 index 0000000..17f9444 --- /dev/null +++ b/themes/-1_foundation/translations_nl.txt @@ -0,0 +1,9 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +nl: + theme_metadata: + description: "Het klassieke Discourse-thema dat zich uitstekend leent voor aanpassing aan de specifieke behoeften van je community." diff --git a/themes/-1_foundation/translations_pl_PL.txt b/themes/-1_foundation/translations_pl_PL.txt new file mode 100644 index 0000000..3039176 --- /dev/null +++ b/themes/-1_foundation/translations_pl_PL.txt @@ -0,0 +1,9 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +pl_PL: + theme_metadata: + description: "Klasyczny motyw Discourse, który doskonale nadaje się do dostosowania do konkretnych potrzeb Twojej społeczności." diff --git a/themes/-1_foundation/translations_pt.txt b/themes/-1_foundation/translations_pt.txt new file mode 100644 index 0000000..298ba52 --- /dev/null +++ b/themes/-1_foundation/translations_pt.txt @@ -0,0 +1,7 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +pt: diff --git a/themes/-1_foundation/translations_pt_BR.txt b/themes/-1_foundation/translations_pt_BR.txt new file mode 100644 index 0000000..e0e28a9 --- /dev/null +++ b/themes/-1_foundation/translations_pt_BR.txt @@ -0,0 +1,9 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +pt_BR: + theme_metadata: + description: "O tema clássico do Discourse é adequado para a personalização de acordo com as necessidades específicas de sua comunidade." diff --git a/themes/-1_foundation/translations_ro.txt b/themes/-1_foundation/translations_ro.txt new file mode 100644 index 0000000..b973316 --- /dev/null +++ b/themes/-1_foundation/translations_ro.txt @@ -0,0 +1,9 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +ro: + theme_metadata: + description: "Tema clasică Discourse care este potrivită pentru personalizare în funcție de nevoile specifice ale comunității tale." diff --git a/themes/-1_foundation/translations_ru.txt b/themes/-1_foundation/translations_ru.txt new file mode 100644 index 0000000..81b44fd --- /dev/null +++ b/themes/-1_foundation/translations_ru.txt @@ -0,0 +1,9 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +ru: + theme_metadata: + description: "Классическая тема Discourse, которую легко адаптировать под нужды вашего сообщества." diff --git a/themes/-1_foundation/translations_sk.txt b/themes/-1_foundation/translations_sk.txt new file mode 100644 index 0000000..08df3a4 --- /dev/null +++ b/themes/-1_foundation/translations_sk.txt @@ -0,0 +1,9 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +sk: + theme_metadata: + description: "Klasická téma Discourse, ktorá je vhodná na prispôsobenie špecifickým potrebám vašej komunity." diff --git a/themes/-1_foundation/translations_sl.txt b/themes/-1_foundation/translations_sl.txt new file mode 100644 index 0000000..23489a4 --- /dev/null +++ b/themes/-1_foundation/translations_sl.txt @@ -0,0 +1,7 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +sl: diff --git a/themes/-1_foundation/translations_sq.txt b/themes/-1_foundation/translations_sq.txt new file mode 100644 index 0000000..7f051b7 --- /dev/null +++ b/themes/-1_foundation/translations_sq.txt @@ -0,0 +1,7 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +sq: diff --git a/themes/-1_foundation/translations_sr.txt b/themes/-1_foundation/translations_sr.txt new file mode 100644 index 0000000..88d63d6 --- /dev/null +++ b/themes/-1_foundation/translations_sr.txt @@ -0,0 +1,7 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +sr: diff --git a/themes/-1_foundation/translations_sv.txt b/themes/-1_foundation/translations_sv.txt new file mode 100644 index 0000000..b165aa2 --- /dev/null +++ b/themes/-1_foundation/translations_sv.txt @@ -0,0 +1,7 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +sv: diff --git a/themes/-1_foundation/translations_sw.txt b/themes/-1_foundation/translations_sw.txt new file mode 100644 index 0000000..0d7cdd0 --- /dev/null +++ b/themes/-1_foundation/translations_sw.txt @@ -0,0 +1,7 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +sw: diff --git a/themes/-1_foundation/translations_te.txt b/themes/-1_foundation/translations_te.txt new file mode 100644 index 0000000..03967bd --- /dev/null +++ b/themes/-1_foundation/translations_te.txt @@ -0,0 +1,7 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +te: diff --git a/themes/-1_foundation/translations_th.txt b/themes/-1_foundation/translations_th.txt new file mode 100644 index 0000000..7de85ff --- /dev/null +++ b/themes/-1_foundation/translations_th.txt @@ -0,0 +1,7 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +th: diff --git a/themes/-1_foundation/translations_tr_TR.txt b/themes/-1_foundation/translations_tr_TR.txt new file mode 100644 index 0000000..01b12bd --- /dev/null +++ b/themes/-1_foundation/translations_tr_TR.txt @@ -0,0 +1,9 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +tr_TR: + theme_metadata: + description: "Topluluğunuzun özel ihtiyaçlarına göre özelleştirilmeye uygun klasik Discourse teması." diff --git a/themes/-1_foundation/translations_ug.txt b/themes/-1_foundation/translations_ug.txt new file mode 100644 index 0000000..ebd9590 --- /dev/null +++ b/themes/-1_foundation/translations_ug.txt @@ -0,0 +1,9 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +ug: + theme_metadata: + description: "ئەنئەنىۋى Discourse ئۆرنىكى جامائەتنىڭ مۇئەييەن ئېھتىياجىغا ئاساسەن خاسلاشتۇرۇشقا ئىنتايىن ماس كېلىدۇ." diff --git a/themes/-1_foundation/translations_uk.txt b/themes/-1_foundation/translations_uk.txt new file mode 100644 index 0000000..5343787 --- /dev/null +++ b/themes/-1_foundation/translations_uk.txt @@ -0,0 +1,9 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +uk: + theme_metadata: + description: "Класична тема Discourse, яка добре підходить для налаштування під конкретні потреби вашої спільноти." diff --git a/themes/-1_foundation/translations_ur.txt b/themes/-1_foundation/translations_ur.txt new file mode 100644 index 0000000..a77c043 --- /dev/null +++ b/themes/-1_foundation/translations_ur.txt @@ -0,0 +1,9 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +ur: + theme_metadata: + description: "کلاسک ڈسکورس تھیم جو آپ کی کمیونٹی کی مخصوص ضروریات کے لیے حسب ضرورت موزوں ہے۔" diff --git a/themes/-1_foundation/translations_vi.txt b/themes/-1_foundation/translations_vi.txt new file mode 100644 index 0000000..dd10f5f --- /dev/null +++ b/themes/-1_foundation/translations_vi.txt @@ -0,0 +1,9 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +vi: + theme_metadata: + description: "Giao diện Discourse cổ điển, phù hợp để tùy chỉnh cho các nhu cầu cụ thể của cộng đồng bạn." diff --git a/themes/-1_foundation/translations_zh_CN.txt b/themes/-1_foundation/translations_zh_CN.txt new file mode 100644 index 0000000..2ca49bd --- /dev/null +++ b/themes/-1_foundation/translations_zh_CN.txt @@ -0,0 +1,9 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +zh_CN: + theme_metadata: + description: "经典的 Discourse 主题,非常适合根据社区的特定需求进行定制。" diff --git a/themes/-1_foundation/translations_zh_TW.txt b/themes/-1_foundation/translations_zh_TW.txt new file mode 100644 index 0000000..7e15fab --- /dev/null +++ b/themes/-1_foundation/translations_zh_TW.txt @@ -0,0 +1,7 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +zh_TW: diff --git a/themes/-2_horizon/about_about.yml b/themes/-2_horizon/about_about.yml new file mode 100644 index 0000000..72b1d44 --- /dev/null +++ b/themes/-2_horizon/about_about.yml @@ -0,0 +1,151 @@ +{ + "name": "Horizon", + "authors": "Design Team", + "theme_version": "1.0.0", + "modifiers": { + "svg_icons": [ + "fire", + "far-square-check", + "far-square", + "thumbtack", + "reply", + "heart", + "user-plus" + ], + "serialize_topic_is_hot": true, + "serialize_topic_excerpts": { + "type": "setting", + "value": "topic_card_high_context" + } + }, + "color_schemes": { + "Horizon": { + "primary": "1A1A1A", + "secondary": "ffffff", + "tertiary": "595bca", + "tertiary-med-or-tertiary": "595bca", + "selected": "d7dfff", + "header_background": "ffffff", + "header_primary": "1A1A1A", + "hover": "E1E8FF" + }, + "Horizon Dark": { + "primary": "ffffff", + "secondary": "1A1A1A", + "tertiary": "6568e6", + "tertiary-med-or-tertiary": "6568e6", + "selected": "3b3e56", + "header_background": "1A1A1A", + "header_primary": "ffffff", + "hover": "333548" + }, + "Royal": { + "primary": "1A1A1A", + "secondary": "ffffff", + "tertiary": "1F7BC1", + "tertiary-med-or-tertiary": "1F7BC1", + "selected": "c7e3ff", + "header_background": "ffffff", + "header_primary": "1A1A1A", + "hover": "D6EBFF" + }, + "Royal Dark": { + "primary": "ffffff", + "secondary": "1A1A1A", + "tertiary": "1F7BC1", + "tertiary-med-or-tertiary": "1F7BC1", + "selected": "3a455f", + "header_background": "1A1A1A", + "header_primary": "ffffff", + "hover": "323B4E" + }, + "Clover": { + "primary": "1A1A1A", + "secondary": "ffffff", + "tertiary": "39845B", + "tertiary-med-or-tertiary": "39845B", + "selected": "c6f1d5", + "header_background": "ffffff", + "header_primary": "1A1A1A", + "hover": "D5F5E0" + }, + "Clover Dark": { + "primary": "ffffff", + "secondary": "1A1A1A", + "tertiary": "39845B", + "tertiary-med-or-tertiary": "39845B", + "selected": "47594e", + "header_background": "1A1A1A", + "header_primary": "ffffff", + "hover": "3C4A40" + }, + "Lily": { + "primary": "1A1A1A", + "secondary": "ffffff", + "tertiary": "cc338c", + "tertiary-med-or-tertiary": "cc338c", + "selected": "ffc8ee", + "header_background": "ffffff", + "header_primary": "1A1A1A", + "hover": "FFD7F3" + }, + "Lily Dark": { + "primary": "ffffff", + "secondary": "1A1A1A", + "tertiary": "cc338c", + "tertiary-med-or-tertiary": "cc338c", + "selected": "5f3e4e", + "header_background": "1A1A1A", + "header_primary": "ffffff", + "hover": "4E3640" + }, + "Violet": { + "primary": "1A1A1A", + "secondary": "ffffff", + "tertiary": "9b15de", + "tertiary-med-or-tertiary": "9b15de", + "selected": "feccff", + "header_background": "ffffff", + "header_primary": "1A1A1A", + "hover": "FFD9FF" + }, + "Violet Dark": { + "primary": "ffffff", + "secondary": "1A1A1A", + "tertiary": "9b15de", + "tertiary-med-or-tertiary": "9b15de", + "selected": "4c385c", + "header_background": "1A1A1A", + "header_primary": "ffffff", + "hover": "40314C" + }, + "Marigold": { + "primary": "1A1A1A", + "secondary": "ffffff", + "tertiary": "d3881f", + "tertiary-med-or-tertiary": "d3881f", + "selected": "ffdcb2", + "header_background": "ffffff", + "header_primary": "1A1A1A", + "hover": "FFE6C6" + }, + "Marigold Dark": { + "primary": "ffffff", + "secondary": "1A1A1A", + "tertiary": "d3881f", + "tertiary-med-or-tertiary": "d3881f", + "selected": "6c5b49", + "header_background": "1A1A1A", + "header_primary": "ffffff", + "hover": "584B3E" + } + }, + "screenshots": [ + "screenshots/light.png", + "screenshots/dark.png" + ], + "theme_site_settings": { + "enable_welcome_banner": true, + "search_experience": "search_field" + } +} diff --git a/themes/-2_horizon/common_color_definitions.txt b/themes/-2_horizon/common_color_definitions.txt new file mode 100644 index 0000000..eb37788 --- /dev/null +++ b/themes/-2_horizon/common_color_definitions.txt @@ -0,0 +1,108 @@ +html { + --accent-color: #{$tertiary} !important; + --accent-text-color: #fff; + + // Background Colors + --background-color: light-dark( + oklch(from #{$tertiary} 96% calc(c * 0.125) h), + oklch(from #{$tertiary} 10% 0.025 h) + ) !important; + --d-content-background: light-dark( + oklch(from #{$secondary} calc(2 * l) c h), + oklch(from #{$secondary} l c h) + ) !important; + + // HeaderColors + --header_primary-low-mid: light-dark( + oklch(from #{$tertiary} 73.5% calc(c * 0.5) h), + oklch(from #{$tertiary} l calc(c * 0.25) h) + ) !important; + --header_primary-medium: light-dark( + oklch(from #{$tertiary} 54% calc(c * 0.5) h), + oklch(from #{$tertiary} calc(l * 1.35) calc(c * 0.25) h) + ) !important; + + // Sidebar Colors + --d-sidebar-border-color: light-dark( + oklch(from #{$tertiary} 88% calc(c * 0.25) h), + oklch(from #{$tertiary} calc(l * 0.7) calc(c * 0.25) h) + ) !important; + --d-sidebar-link-color: light-dark( + oklch(from #{$tertiary} calc(l * 0.8) calc(c * 0.25) h), + oklch(from #{$tertiary} calc(l * 1.5) calc(c * 0.25) h) + ) !important; + --d-sidebar-active-color: #{$primary} !important; + --d-sidebar-suffix-color: light-dark( + oklch(from #{$tertiary} l calc(c * 0.9) h), + oklch(from #{$tertiary} l calc(c * 0.9) h) + ) !important; + + // Other Colors + --d-selected: light-dark( + oklch(from #{$tertiary} 92% calc(c * 0.5) h), + oklch(from #{$tertiary} calc(l * 0.7) calc(c * 0.25) h) + ) !important; + --d-nav-color--active: light-dark( + oklch(from #{$tertiary} l c h), + oklch(from #{$tertiary} calc(l * 1.2) c h) + ) !important; + --d-nav-color--hover: light-dark( + oklch(from #{$tertiary} l c h), + oklch(from #{$tertiary} calc(l * 1.2) c h) + ) !important; + --link-color: light-dark( + oklch(from #{$tertiary} l c h), + oklch(from #{$tertiary} calc(l * 0.95) c h) + ) !important; + --link-color-hover: light-dark( + oklch(from #{$tertiary} l c h), + oklch(from #{$tertiary} calc(l * 1.5) calc(c * 2.25) h) + ) !important; + --tertiary-hover: #{$tertiary} !important; + + // Search Colors + --search-color: light-dark( + oklch(from #{$tertiary} l c h), + oklch(from #{$tertiary} calc(l * 1.5) calc(c * 0.25) h) + ) !important; + + // Button Colors + --button-box-shadow: light-dark( + oklch(from #{$tertiary} calc(l * 1.5) calc(c * 0.35) h), + oklch(from #{$tertiary} calc(l * 0.75) calc(c * 0.5) h) + ) !important; + --d-sidebar-highlight-hover-icon: var(--d-sidebar-link-color) !important; + --d-sidebar-highlight-hover-background: var(--d-selected) !important; + --d-sidebar-link-icon-color: var(--d-sidebar-link-color) !important; + --d-sidebar-header-color: var(--d-sidebar-link-color) !important; + --d-sidebar-header-icon-color: var(--d-sidebar-link-color) !important; + --d-sidebar-active-suffix-color: var(--d-sidebar-suffix-color) !important; + --d-sidebar-background: var(--background-color) !important; + --d-sidebar-footer-fade: var(--background-color) !important; + --d-sidebar-prefix-background: var(--d-selected) !important; + --d-sidebar-active-prefix-background: light-dark( + oklch(from var(--d-selected) calc(l * 0.85) c h), + oklch(from var(--d-selected) calc(l * 0.7) c h) + ) !important; + --d-sidebar-highlight-prefix-background: light-dark( + oklch(from var(--d-selected) calc(l * 0.85) c h), + oklch(from var(--d-selected) calc(l * 0.7) c h) + ) !important; + --d-sidebar-highlight-suffix-color: var( + --d-sidebar-active-suffix-color + ) !important; + --d-sidebar-highlight-color: var(--primary) !important; + --d-sidebar-highlight-background: var(--d-selected) !important; + --d-sidebar-section-link-icon-size: 1em !important; + --d-hover: oklch(from var(--d-selected) l c h / 0.75) !important; + --d-input-bg-color: var(--d-content-background) !important; + --discourse_id-text: var(--accent-text-color) !important; + --discourse_id-text-hover: var(--accent-text-color) !important; + --discourse_id-icon: var(--accent-text-color) !important; + --discourse_id-icon-hover: var(--accent-text-color) !important; + --discourse_id-border: var(--discourse_id-background) !important; +} + +:where(.uc-modernize-foundation-theme) { + --d-sidebar-active-background: var(--d-selected) !important; +} diff --git a/themes/-2_horizon/common_screenshot_dark.txt b/themes/-2_horizon/common_screenshot_dark.txt new file mode 100644 index 0000000..e69de29 diff --git a/themes/-2_horizon/common_screenshot_light.txt b/themes/-2_horizon/common_screenshot_light.txt new file mode 100644 index 0000000..e69de29 diff --git a/themes/-2_horizon/common_scss.scss b/themes/-2_horizon/common_scss.scss new file mode 100644 index 0000000..85472f8 --- /dev/null +++ b/themes/-2_horizon/common_scss.scss @@ -0,0 +1,28 @@ +@import "buttons"; +@import "chat"; +@import "categories-view"; +@import "color-choice"; +@import "compatibility"; +@import "composer"; +@import "composer-peek-mode"; +@import "experimental-screen"; +@import "discourse-events"; +@import "header"; +@import "hiddenstuff"; +@import "login"; +@import "main"; +@import "misc"; +@import "mobile-stuff"; +@import "nav-pills"; +@import "welcome-banner"; +@import "sidebar"; +@import "sidebar-new-topic-button"; +@import "topic"; +@import "topic-cards"; +@import "topic-voting"; +@import "high-context-cards"; +@import "variables"; + +:root { + --d-nav-pill-border-radius: 0; +} diff --git a/themes/-2_horizon/desktop_scss.scss b/themes/-2_horizon/desktop_scss.scss new file mode 100644 index 0000000..afb22ed --- /dev/null +++ b/themes/-2_horizon/desktop_scss.scss @@ -0,0 +1,2 @@ +@import "desktop-horizon-fixes"; +@import "desktop-full-width"; diff --git a/themes/-2_horizon/extra_scss_buttons.txt b/themes/-2_horizon/extra_scss_buttons.txt new file mode 100644 index 0000000..465d4cf --- /dev/null +++ b/themes/-2_horizon/extra_scss_buttons.txt @@ -0,0 +1,122 @@ +@use "lib/viewport"; + +:root { + --d-button-border-radius: 6.25rem; +} + +.discourse-no-touch .topic-body .actions .fade-out { + transition: none; +} + +.sidebar-new-topic-button__wrapper { + &:has(.fk-d-tooltip__trigger) { + #create-topic.btn { + border-radius: var(--d-button-border-radius) 0 0 + var(--d-button-border-radius); + } + } +} + +.discourse-no-touch .btn-default.sidebar-new-topic-button, +.discourse-no-touch .btn-default, +.discourse-no-touch .select-kit .select-kit-header.btn-default { + background: var(--primary-100); + + .d-icon { + color: var(--accent-color); + } + + &:focus-visible, + &:hover { + background: var(--primary-100); + color: var(--primary); + box-shadow: 0 0 0 4px var(--button-box-shadow); + + .d-icon { + color: var(--accent-color); + } + } + + &:active:not(:hover, :focus) { + color: var(--primary); + background: var(--tertiary-300); + background-image: none; + + .d-icon { + color: var(--tertiary-high); + } + } +} + +.btn-primary, +.discourse-no-touch .btn-default.ai-new-question-button { + background-color: var(--accent-color); + color: var(--accent-text-color); + + .d-icon { + color: var(--accent-text-color); + } + + &:not([disabled]):focus-visible, + &:not([disabled]):hover { + .discourse-no-touch & { + background-color: var(--accent-color); + box-shadow: 0 0 0 4px var(--button-box-shadow); + color: var(--accent-text-color); + + .d-icon { + color: var(--accent-text-color); + } + } + } + + &:active { + background: light-dark( + oklch(from var(--accent-color) 40% c h), + oklch(from var(--accent-color) 50% c h) + ); + } + + &:visited { + color: var(--accent-text-color); + } +} + +.btn-danger { + .discourse-no-touch & { + &:not([disabled]):focus-visible, + &:not([disabled]):hover { + background-color: var(--danger); + box-shadow: 0 0 0 4px var(--d-button-danger-bg-color--hover); + } + } +} + +// DiscoToc plugin +.d-toc-main, +.timeline-footer-controls { + .btn.timeline-toggle { + border-top-right-radius: 8px; + border-top-left-radius: 8px; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + bottom: var(--main-grid-gap); + } +} + +.d-combo-button:hover { + border-radius: var(--d-button-border-radius); + box-shadow: 0 0 0 4px var(--button-box-shadow); + + button:hover { + // remove duplicate shadow from child button + box-shadow: none; + } +} + +// Solved +.btn-default.post-action-menu__solved-shared-issue:not(.has-shared-issue) { + .d-icon { + color: var(--icon-color); + } +} diff --git a/themes/-2_horizon/extra_scss_categories-view.txt b/themes/-2_horizon/extra_scss_categories-view.txt new file mode 100644 index 0000000..e90b956 --- /dev/null +++ b/themes/-2_horizon/extra_scss_categories-view.txt @@ -0,0 +1,365 @@ +@use "lib/viewport"; + +.list-container.--categories { + .avatar-flair { + display: none; + } +} + +.categories-and-latest { + .category-list { + border-collapse: separate; + + th.topics, + .category-logo { + display: none; + } + + thead tr th { + font-size: var(--font-up-1-rem); + font-weight: bold; + } + + tbody { + display: flex; + flex-direction: column; + gap: 1em; + padding-top: 1em; + border: 0; + } + + tbody tr { + display: grid; + grid-template-areas: + "title topics" + "category category" + "subcategory subcategory"; + row-gap: 1em; + border: 1px solid var(--primary-300); + border-radius: var(--d-border-radius-large); + box-shadow: 0 0 12px 1px var(--topic-card-shadow); + } + + td.category { + display: contents; + border-top-left-radius: var(--d-border-radius-large); + border-bottom-left-radius: var(--d-border-radius-large); + border-width: 2px; + padding: 1em 1.5rem; + } + + tbody h3 { + grid-area: title; + padding: 1em 0 0 1.5rem; + font-size: var(--font-up-1-rem); + + .category-name { + display: flex; + align-self: center; + } + + .badge-category { + gap: 0.25em; + align-items: center; + font-size: var(--font-up-1-rem); + + .d-icon:first-of-type:not([class*="d-icon-lock"]), + &.--style-square::before, + &.--style-emoji .emoji { + width: 1.25em; + height: 1.25em; + margin-right: 0.25em; + } + + &.--style-square::before { + border-radius: 6px; + } + } + + [class*="d-icon-lock"] { + order: 1; + } + } + + .topics { + width: auto; + padding: 1em 1.5rem 0 0; + display: flex; + align-items: center; + justify-content: end; + } + + .category-description { + grid-area: category; + padding: 0 1.5rem; + margin: 0; + font-size: var(--font-down-1-rem); + } + + .subcategories { + grid-area: subcategory; + gap: 0.25em 0.5em; + padding: 0 1.5rem 1em; + margin: 0; + + .badge-category__wrapper { + background-color: var(--badge-category-bg); + padding: 0.25em 0.5rem; + border-radius: var(--d-border-radius); + } + + .badge-category__name { + color: var(--badge-category-text); + } + + .badge-category.--style-square::before { + border-radius: 3px; + } + } + } + + .latest-topic-list { + .table-heading { + border: 0; + font-size: var(--font-up-1-rem); + font-weight: bold; + } + + &-item { + display: grid; + grid-template-columns: min-content min-content auto min-content; + grid-template-areas: + "creator title title status" + ". category activity activity"; + column-gap: 0.75rem; + row-gap: 0.5rem; + background: var(--d-content-background); + box-shadow: 0 0 12px 1px var(--topic-card-shadow); + text-overflow: ellipsis; + padding: 0.75em 1rem; + border: 1px solid var(--primary-300); + border-radius: var(--d-border-radius-large); + margin-top: 1em; + } + + .main-link, + .topic-stats { + display: contents; + } + + .top-row { + grid-area: title; + } + + .bottom-row { + grid-area: category; + + .discourse-tags { + display: none; + } + } + + .badge-category__wrapper { + border-radius: var(--d-border-radius); + padding: 0.25em 0.5rem; + background-color: var(--badge-category-bg); + + @include viewport.until(md) { + padding: 0.25em 0.5rem; + font-size: var(--font-down-2); + } + + .badge-category__name { + color: var(--badge-category-text); + } + } + + .topic-list-data { + grid-area: likes-replies; + } + + .num.posts-map { + display: none; + } + + .topic-last-activity { + grid-area: activity; + display: flex; + align-items: center; + text-align: left; + font-size: var(--font-down-1-rem); + + &::before { + content: ""; + display: inline-block; + width: 0.25em; + height: 0.25em; + background-color: var(--primary-500); + border-radius: 100%; + margin-right: 0.5em; + } + } + + .topic-poster { + grid-area: creator; + width: auto; + align-self: flex-start; + + .avatar { + height: 24px; + width: 24px; + border-radius: var(--d-border-radius-small); + } + } + } +} + +@include viewport.until(sm) { + .category-list.with-topics { + margin-inline: 1rem; + + .num.posts, + .category-topics-count, + .category-logo { + display: none; + } + + .category-list { + &-item { + padding-top: 0; + padding-bottom: 0; + border-top: 0 !important; + border-bottom: 0 !important; + } + } + + tbody { + display: flex; + flex-direction: column; + + tr:first-of-type { + order: -2; + } + + tr.subcategories-list { + order: -1; + } + + tr:nth-last-of-type(2) { + border-bottom: 0; + } + } + + th.main-link { + padding-top: 0; + } + } +} + +.category-boxes, +.category-boxes-with-topics { + .category-logo { + display: none; + } + + @include viewport.from(sm) { + margin-top: 0; + } + + @include viewport.until(md) { + padding-inline: 1rem; + box-sizing: border-box; + } + + .category { + border: 0; + + &-box-inner { + border-radius: var(--d-border-radius-large); + border: 1px solid var(--primary-300); + background: var(--d-content-background); + box-shadow: 0 0 12px 1px var(--topic-card-shadow); + + &:hover { + .discourse-no-touch & { + border-color: var(--accent-color); + background: var(--d-content-background); + } + } + + &.selected { + box-shadow: + 0 0 0 2px var(--accent-color), + 0 0 12px 1px var(--topic-card-shadow); + } + } + + &-details { + display: flex; + flex-direction: column; + gap: 1rem; + height: 100%; + } + + &-box-heading { + h3 { + text-align: left; + } + + .badge-category { + display: flex; + flex-wrap: wrap; + align-items: flex-start; + gap: 1em; + justify-content: space-between; + width: 100%; + + &__wrapper { + display: flex; + } + + &.--style-square::before { + aspect-ratio: 1 / 1; + height: auto; + width: 13%; + border-radius: var(--d-border-radius); + } + + &__name { + flex-basis: 100%; + font-size: var(--font-up-1-rem); + } + + .d-icon:not([class*="d-icon-lock"]), + img.emoji { + aspect-ratio: 1 / 1; + height: auto; + width: 13%; + } + } + } + + .description { + text-align: left; + margin: 0; + font-size: var(--font-down-1-rem); + } + + .subcategories { + margin-top: auto; + + .subcategory { + margin-bottom: 0; + font-size: var(--font-down-1); + } + } + } +} + +// theme component: https://github.com/discourse/discourse-minimal-category-boxes +.custom-category-boxes-container { + @include viewport.until(sm) { + padding-inline: var(--space-4); + box-sizing: border-box; + } +} diff --git a/themes/-2_horizon/extra_scss_chat.txt b/themes/-2_horizon/extra_scss_chat.txt new file mode 100644 index 0000000..5b23302 --- /dev/null +++ b/themes/-2_horizon/extra_scss_chat.txt @@ -0,0 +1,117 @@ +@use "lib/viewport"; + +.full-page-chat.full-page-chat-sidebar-enabled { + border: none; +} + +.c-navbar-container { + background-color: var(--d-content-background); + + .full-page-chat & { + @include viewport.from(sm) { + padding: 0 1.5em; + } + } + + .chat-drawer.is-collapsed & { + background: var(--tertiary-low); + opacity: 0.7; + } +} + +body.has-full-page-chat { + background-color: var(--background-color); + + #main-outlet-wrapper { + @media screen and (width < 87rem) { + // ideal width just slightly larger than our xl viewport variable + padding-inline: 0; + } + } +} + +.chat-drawer-container { + .is-expanded & { + box-shadow: 0 0 0 2px var(--tertiary-medium); + } + + .chat-drawer.is-expanded & { + border: none; + } + + .c-navbar__title { + padding-left: 0.33em; // visual alignment for chat index, which does not have a back arrow + } +} + +.chat-drawer-outlet-container { + z-index: z("composer", "content"); + padding-bottom: 0; + right: var(--main-grid-gap); + + &:has(.is-expanded) { + z-index: calc(z("composer", "dropdown") + 1); + } + + &.above-composer { + padding-bottom: 0; + } +} + +// the below are elements whose z-index needs to be adjusted due to the above change +.chat-message-actions-container { + .has-drawer-chat & { + z-index: calc(z("composer", "dropdown") + 1); + } +} + +.fk-d-menu[data-identifier="usercard"], +.fk-d-menu[data-identifier="chat-message-reaction-users"] { + .has-drawer-chat & { + z-index: z("modal", "dialog"); + } +} + +.chat-drawer { + .peek-mode-active & { + max-width: 90vw; + } +} + +.chat-drawer .channels-list-container .chat-channel-row { + margin-bottom: var(--spacing-block-xs); + font-size: var(--font-up-1); + border-bottom: none; + + &:hover { + background-color: var(--d-sidebar-active-background); + } +} + +.channel-title { + font-weight: bold; + text-transform: uppercase; + font-size: var(--font-down-1); +} + +.chat-composer__wrapper { + background: var(--d-content-background); +} + +.chat-message-actions .more-buttons .btn-icon-text { + &:hover { + background-color: var(--d-selected); + box-shadow: none; + color: var(--primary); + } +} + +.chat-drawer-active.chat-drawer-expanded .chat-composer-dropdown__menu-content { + z-index: z("modal", "dialog"); +} + +.chat-replying-indicator-container { + @include viewport.from(sm) { + margin-left: calc(0.65em + 0.2rem); + } +} diff --git a/themes/-2_horizon/extra_scss_color-choice.txt b/themes/-2_horizon/extra_scss_color-choice.txt new file mode 100644 index 0000000..86be0fa --- /dev/null +++ b/themes/-2_horizon/extra_scss_color-choice.txt @@ -0,0 +1,29 @@ +.user-color-palette-menu { + &__item .btn-icon-text.btn-flat { + background-color: var(--d-content-background); + width: 100%; + justify-content: flex-start; + } + + &__item .btn-icon-text.btn-flat:hover { + background-color: var(--d-selected); + box-shadow: none; + color: var(--primary); + } + + &__item .btn-icon-text.btn-flat:hover svg { + color: var(--icon-color); + } + + &__item .btn-icon-text.btn-flat svg { + color: var(--icon-color); + } + + &__item-choice.active.btn-icon-text.btn-flat { + background-color: var(--d-selected); + } +} + +.user-color-palette-content .fk-d-menu__inner-content { + border: none; +} diff --git a/themes/-2_horizon/extra_scss_compatibility.txt b/themes/-2_horizon/extra_scss_compatibility.txt new file mode 100644 index 0000000..ed454c9 --- /dev/null +++ b/themes/-2_horizon/extra_scss_compatibility.txt @@ -0,0 +1,73 @@ +@use "lib/viewport"; + +.custom-homepage-columns { + .header-wrapper { + @include viewport.from(lg) { + margin-bottom: 1.25em; + } + } + + .topic-list .topic-list-item { + height: auto; + + &:nth-child(odd) { + background: var(--topic-list-item-background-color); + } + } +} + +.b-header { + .nav-pills > li > a:hover { + .discourse-no-touch & { + color: var(--secondary); + } + } + + .nav-pills > li > a:hover::after { + .discourse-no-touch & { + background: var(--secondary); + } + } +} + +// theme component: https://github.com/discourse/discourse-minimal-category-boxes +.custom-category-boxes-container { + @include viewport.until(sm) { + padding-inline: var(--space-4); + box-sizing: border-box; + } +} + +@include viewport.from(md) { + #main-outlet { + div[class^="category-title-header"] { + width: calc(100% - (2 * var(--space-4))); + border-radius: var(--d-border-radius-large); + max-width: calc(1000px - 3rem) !important; + } + + .list-container div[class^="category-title-header"] { + width: 100%; + } + } +} + +// livestream plugin: https://github.com/discourse/discourse-livestream +.livestream-topic.chat-enabled.archetype-regular { + #custom-chat-container { + margin-left: 0; + border-top-left-radius: var(--d-border-radius-large); + border-top-right-radius: var(--d-border-radius-large); + border: 0; + } + + .container.posts { + grid-template-columns: auto auto; + } +} + +// TC: Blog Style +body:not(.d-toc-installed).blog-post .container.posts, +body.d-toc-installed.blog-post .container.posts { + grid-template-columns: var(--blog-width) 0; +} diff --git a/themes/-2_horizon/extra_scss_composer-peek-mode.txt b/themes/-2_horizon/extra_scss_composer-peek-mode.txt new file mode 100644 index 0000000..a7fb6c0 --- /dev/null +++ b/themes/-2_horizon/extra_scss_composer-peek-mode.txt @@ -0,0 +1,72 @@ +@use "lib/viewport"; + +.peek-mode-toggle { + display: none; +} + +@include viewport.from(xl) { + html:not(.fullscreen-composer) { + .peek-mode-toggle svg { + transform: scaleX(-1); + } + + &.composer-open { + .full-width-enabled .peek-mode-toggle { + display: flex; + } + + .full-width-enabled.peek-mode-active { + #reply-control.hide-preview { + transition: none; + box-shadow: none; + border-radius: var(--d-border-radius-large); + + .grippie { + display: none; + } + + .reply-area { + padding-inline: 0.67em; + } + } + + #reply-control:not(.fullscreen).hide-preview { + width: 100%; + right: var(--main-grid-gap); + top: var(--header-offset); + bottom: var(--main-grid-gap); + left: unset; + max-width: 36.5vw; + } + + &.has-sidebar-page { + #main-outlet-wrapper { + grid-template-columns: + var(--d-sidebar-width) calc(100vw - 38vw - var(--d-sidebar-width)) + 1fr; + } + } + + &:not(.has-sidebar-page) { + #main-outlet-wrapper { + grid-template-columns: 0 calc(100vw - 52vw) 1fr; + } + + #reply-control:not(.fullscreen).hide-preview { + max-width: 46vw; + } + } + + .sidebar-wrapper .sidebar-container { + height: unset; + } + + &:not(.keyboard-visible) { + #reply-control:not(.fullscreen).hide-preview { + height: unset; + } + } + } + } + } +} diff --git a/themes/-2_horizon/extra_scss_composer.txt b/themes/-2_horizon/extra_scss_composer.txt new file mode 100644 index 0000000..3dd7168 --- /dev/null +++ b/themes/-2_horizon/extra_scss_composer.txt @@ -0,0 +1,109 @@ +@use "lib/viewport"; + +#reply-control + .select-kit.dropdown-select-box.composer-actions + .select-kit-header { + border: 1px solid var(--tertiary-700); + background: var(--secondary); + + &:hover { + .d-icon { + color: var(--accent-color); + } + } +} + +#reply-control.hide-preview:not(.draft) { + @include viewport.from(sm) { + background: var(--d-content-background); + + .user-selector, + .title-and-category { + padding: 0 var(--space-4); + width: calc(100% - var(--space-4) * 2); + } + + .d-editor-button-bar { + padding: 3px var(--space-4); + border: none; + } + + .d-editor-input { + padding: var(--space-4); + } + + .reply-area { + padding-inline: 0; + } + + .reply-to, + .submit-panel { + padding-inline: var(--space-2); + } + + .d-editor-textarea-wrapper { + border: 0; + border-bottom: 1px solid var(--content-border-color); + border-radius: 0; + + &.in-focus { + outline: 0; + } + } + } +} + +.d-editor-button-bar { + .btn:hover, + .toolbar-popup-menu-options.is-expanded { + .discourse-no-touch & { + background: var(--tertiary-very-low); + color: var(--accent-color); + + .d-icon { + color: inherit; + } + + // to have parity with regular select-kit styling used elsewhere + .select-kit-row { + .d-icon { + color: var(--primary-high); + } + + &:hover { + .d-icon { + color: var(--primary); + } + } + } + } + } + + .toolbar-popup-menu-options.is-expanded { + border-radius: var(--d-border-radius); + } +} + +.discourse-no-touch .translation-selector-dropdown { + .select-kit-header.btn-default { + background: var(--background-color); + } +} + +#reply-control.composer-action-add_translation { + .d-editor-translation-preview-wrapper { + border-color: var(--d-sidebar-border-color); + } + + .d-editor-translation-preview-wrapper__header { + top: 6.5rem; + padding: 0.25rem 0.75rem; + background: var(--background-color); + color: var(--accent-color); + border-radius: var(--d-border-radius-large); + } + + .topic-title-translator input { + width: 47.25vw; + } +} diff --git a/themes/-2_horizon/extra_scss_desktop-full-width.txt b/themes/-2_horizon/extra_scss_desktop-full-width.txt new file mode 100644 index 0000000..97aa208 --- /dev/null +++ b/themes/-2_horizon/extra_scss_desktop-full-width.txt @@ -0,0 +1,254 @@ +@use "lib/viewport"; + +// Full width layout. Ported from the Discourse Full Width theme component here +// https://meta.discourse.org/t/discourse-full-width-component/292496, which we +// intend to move into core over time. +// +// We are copying this here so we can continue to iterate on Horizon with full +// width without having to include the theme component as a dependency, we +// need to remove this once full width is in core. + +$sidebar-width: 17em; + +.wrap { + max-width: unset; // undoing core default +} + +.d-header #site-logo { + // this prevents the logo from shifting header content + // when the sidebar is opened + max-height: 100%; + max-width: 100%; + object-fit: contain; // contains logo without squishing/stretching + + // allows some flexibility for wide logos + body:not(.has-sidebar-page) & { + max-width: unset; + + @include viewport.until(sm) { + max-width: 25vw; + } + } +} + +.d-header #site-text-logo { + font-size: clamp(var(--font-0), 2.5vw, var(--font-up-1)); + + .has-sidebar-page & { + white-space: wrap; + line-height: var(--line-height-medium); + + @include line-clamp(2); + } +} + +#main-outlet-wrapper { + body.has-sidebar-page & { + .sidebar-wrapper { + width: var(--d-sidebar-width); + } + } + + body.has-full-page-chat & { + gap: 0; + } + + .sidebar-wrapper { + width: 100%; // safari has issues without this + } + + #main-outlet { + margin: 0 auto; + max-width: var(--d-max-width); + width: 100%; + + body.has-full-page-chat & { + max-width: unset; + } + } +} + +.has-full-page-chat:not(.discourse-sidebar) .full-page-chat { + border: none; +} + +#main-outlet > .regular { + max-width: var(--d-max-width); + margin: 0 auto; + + body.has-sidebar-page & { + margin: 0 auto; + } +} + +.d-header .title:not(.title--minimized) { + // allowing overflow here isn't always ideal + // but works well enough most of the time + overflow: visible; +} + +.d-header { + > .wrap { + .contents { + display: grid; + grid-template-areas: "logo lspace extra-info rspace panel"; + grid-template-columns: + minmax(auto, 1fr) + auto + minmax(0, calc(var(--d-max-width))) + auto + minmax(auto, 1fr); + + .d-header .title { + min-width: auto; + } + + .has-sidebar-page & { + // at wide widths, when 1fr > 0 + // we want the panel to be the same width as the sidebar + // this way we can get more accurate centering + grid-template-columns: + calc(var(--d-sidebar-width) - 11px) // 11px is wrap padding + 1fr + minmax(0, calc(var(--d-max-width))) + 1fr + minmax(0, calc(var(--d-sidebar-width) - 11px)); + gap: 1em; + + // at narrower widths, when 1fr = 0 + // we can center without matching the sidebar's width + // which allows the title to take up the remaining width + @media screen and (width <= 1400px) { + grid-template-columns: + calc(var(--d-sidebar-width) - 11px) + 1fr + minmax(0, calc(var(--d-max-width))) + 1fr + auto; + } + + @media screen and (width <= 1000px) { + gap: 0.5em; + } + } + } + } + + .header-sidebar-toggle { + grid-area: logo; + } + + .before-header-panel-outlet { + grid-area: extra-info; + } + + .home-logo-wrapper-outlet { + grid-area: logo; + margin-left: 3.7em; // 2.7em hamburger width + 1em for margin + margin-right: 0.725em; + display: flex; + overflow: visible; + + .title { + flex: 1 1 auto; + } + } + + .panel { + grid-area: panel; + } +} + +.extra-info-wrapper { + grid-area: extra-info; + max-width: var(--d-max-width); + width: 100%; + box-sizing: border-box; + padding: 0; +} + +.header-search--enabled .floating-search-input-wrapper { + grid-area: extra-info; + + @include viewport.until(md) { + grid-area: rspace; + } + + @include viewport.until(sm) { + display: none; + } +} + +body.has-sidebar-page { + .wrap { + max-width: unset; // undoing core default + } + + .extra-info-wrapper { + padding: 0; + } + + @media screen and (width >= calc($reply-area-max-width + ($sidebar-width * 2))) { + #reply-control.show-preview { + margin-left: auto; + margin-right: auto; + } + + .sidebar-container { + height: auto; + } + } + + @media screen and (width <= calc($reply-area-max-width + ($sidebar-width * 2))) and (width >= calc($reply-area-max-width + calc($sidebar-width / 2))) { + #reply-control.show-preview:not(.fullscreen) { + margin-left: $sidebar-width; + width: auto; + + // overruling new core composer changes + max-width: $reply-area-max-width; + transform: none; + } + + .sidebar-container { + height: auto; + } + } + + // overruling new core composer changes + @media screen and (min-width: $reply-area-max-width) { + #reply-control.show-preview:not(.fullscreen) { + max-width: $reply-area-max-width; + transform: none; + } + } +} + +body.sidebar-animate { + #main-outlet-wrapper { + transition: none; + } + + .d-header-wrap .wrap { + transition: none; + } +} + +.d-header-icons { + display: flex; +} + +.rtl { + .d-header .title { + margin-right: 3.7em; // 2.7em hamburger width + 1em for margin + margin-left: 0.725em; + } +} + +// provides some extra space for login buttons +@media screen and (width >= 1400px) { + .anon { + .d-header .panel { + grid-column-start: -4; + } + } +} diff --git a/themes/-2_horizon/extra_scss_desktop-horizon-fixes.txt b/themes/-2_horizon/extra_scss_desktop-horizon-fixes.txt new file mode 100644 index 0000000..fe816c0 --- /dev/null +++ b/themes/-2_horizon/extra_scss_desktop-horizon-fixes.txt @@ -0,0 +1,76 @@ +.topic-list .topic-list-header .topic-list-data:last-of-type { + padding: 0; +} + +// Fixing bulk select (only needed for desktop) +.bulk-select-enabled { + body:not(.user-messages-page) & { + .topic-list-header { + position: sticky; + top: 8em; + height: 0; + z-index: 1; + } + + .topic-author-avatar-data { + display: none; + } + + .bulk-select.topic-list-data { + grid-area: bulk-select; + margin-left: -0.5em; + + @media screen and (width <= 576px) { + margin-top: 0; + + label { + padding-block: 0.345em; + } + } + + input { + transform: scale(1.5); + } + } + } +} + +.topic-list-header { + body:not(.user-messages-page) & { + tr { + border: none; + } + + .topic-list-data { + padding: 0; + + &:not(.default) { + display: none; + } + + &.default { + .bulk-select, + span:not(.bulk-select-topics, .d-button-label) { + display: none; + } + } + + .bulk-select-topics { + position: absolute; + right: var(--space-2); + top: var(--space-2); + background: transparent; + border-radius: var(--d-border-radius); + display: flex; + gap: 0.5rem; + margin: var(--space-4) 0; + padding: var(--space-1); + + button { + white-space: nowrap; + margin: 0; + } + } + } + } +} diff --git a/themes/-2_horizon/extra_scss_discourse-events.txt b/themes/-2_horizon/extra_scss_discourse-events.txt new file mode 100644 index 0000000..a74a52f --- /dev/null +++ b/themes/-2_horizon/extra_scss_discourse-events.txt @@ -0,0 +1,5 @@ +.discourse-calendar-livestream-zoom-full { + .experimental-screen { + display: none; + } +} diff --git a/themes/-2_horizon/extra_scss_experimental-screen.txt b/themes/-2_horizon/extra_scss_experimental-screen.txt new file mode 100644 index 0000000..e84d7c8 --- /dev/null +++ b/themes/-2_horizon/extra_scss_experimental-screen.txt @@ -0,0 +1,187 @@ +@use "lib/viewport"; + +@media screen and (width >= 1300px) { + #main-outlet { + border-top-right-radius: var(--d-border-radius-large); + border-top-left-radius: var(--d-border-radius-large); + } +} + +.chat-drawer-active.chat-drawer-expanded { + .experimental-screen { + &__top-left, + &__top-right, + &__bottom-left, + &__bottom-right, + &__bottom-bar { + z-index: 199; + } + } +} + +.has-full-page-chat .chat-replying-indicator-container { + margin-bottom: var(--main-grid-gap); + + @include viewport.until(lg) { + margin-bottom: 0; + } +} + +.has-full-page-chat .chat-selection-management { + margin-bottom: var(--main-grid-gap); + + @include viewport.until(lg) { + margin-bottom: 0; + } +} + +.experimental-screen { + max-width: unset !important; + width: 100%; + display: block; + margin: 0; + padding: 0; + position: relative; + + @include viewport.until(lg) { + display: none; + } + + @media screen and (width <= 488px) { + display: none; + } + + @include viewport.until(md) { + display: none; + } + + li { + list-style: none; + margin: 0; + padding: 0; + } + + &__top-left, + &__top-right, + &__bottom-left, + &__bottom-right { + position: fixed; + width: var(--d-border-radius-large); + height: var(--d-border-radius-large); + background-color: var(--background-color); + z-index: calc( + z("base") + 1 + ); // has to top list-controls, which is sticky in Horizon + mask: radial-gradient( + circle at var(--d-border-radius-large) var(--d-border-radius-large), + transparent var(--d-border-radius-large), + transparent var(--d-border-radius-large), + black var(--d-border-radius-large) + ); + } + + &__top-left { + top: var(--main-outlet-offset); + left: var(--left-distance); + } + + &__top-right { + top: var(--main-outlet-offset); + transform: rotate(90deg); + left: calc(var(--right-distance) - var(--d-border-radius-large)); + } + + &__bottom-left { + transform: rotate(-90deg); + bottom: var(--main-grid-gap); + left: var(--left-distance); + + @media screen and (width <= 768px) { + bottom: calc(var(--d-border-radius-large) * 2); + } + } + + &__bottom-right { + transform: rotate(180deg); + bottom: var(--main-grid-gap); + left: calc(var(--right-distance) - var(--d-border-radius-large)); + + @media screen and (width <= 768px) { + bottom: calc(var(--d-border-radius-large) * 2); + } + } + + &__bottom-bar { + position: fixed; + width: 100%; + z-index: calc( + z("base") + 1 + ); // has to top list-controls, which is sticky in Horizon + background-color: var(--background-color); + bottom: 0; + left: var(--left-distance); + height: var(--main-grid-gap); + + @media screen and (width <= 768px) { + height: calc(var(--d-border-radius-large) * 2); + } + + @container content-width (width > 1px) { + width: 100cqw; + } + } +} + +.rtl .experimental-screen { + &__top-left { + right: var(--left-distance); + left: unset; + } + + &__top-right { + transform: rotate(-90deg) !important; + right: calc(var(--right-distance) - var(--d-border-radius-large)); + left: unset; + } + + &__bottom-left { + transform: rotate(90deg); + right: var(--left-distance); + left: unset; + } + + &__bottom-right { + transform: rotate(180deg); + left: unset; + right: calc(var(--right-distance) - var(--d-border-radius-large)); + } + + &__bottom-bar { + right: var(--left-distance); + left: unset; + } +} + +@media screen and (width >= 768px) { + .with-topic-progress { + bottom: calc( + env(safe-area-inset-bottom) + var(--composer-height, 0px) + + var(--d-border-radius-large) + ); + } +} + +@media screen and (width <= 768px) { + .with-topic-progress { + bottom: calc( + env(safe-area-inset-bottom) + var(--composer-height, 0px) + + calc(var(--d-border-radius-large) * 2) + ); + } +} + +@media screen and (width <= 400px) { + .with-topic-progress { + bottom: calc(env(safe-area-inset-bottom) + var(--composer-height, 0px)); + } +} diff --git a/themes/-2_horizon/extra_scss_header.html b/themes/-2_horizon/extra_scss_header.html new file mode 100644 index 0000000..b5cc2d3 --- /dev/null +++ b/themes/-2_horizon/extra_scss_header.html @@ -0,0 +1,87 @@ +@use "lib/viewport"; + +.d-header { + box-shadow: none; + background: var(--background-color); +} + +.search-menu .search-input, +.search-menu-container .search-input { + border-color: var(--header_primary-low-mid); +} + +.user-menu .quick-access-panel, +.user-notifications-list { + li { + &.pending, + &.unread { + background: var(--d-hover); + + .discourse-no-touch & { + &:hover, + &:focus { + background: var(--d-selected); + } + } + } + } +} + +.discourse-no-touch .d-header-icons .icon:hover, +.discourse-no-touch .d-header-icons .icon:focus, +.header-sidebar-toggle button:focus:hover, +.discourse-no-touch .header-sidebar-toggle button:hover { + background-color: transparent; +} + +.discourse-no-touch .d-header-icons .icon:hover > .d-icon, +.drop-down-mode .d-header-icons .active .icon > .d-icon, +.drop-down-mode + .d-header-icons + .header-color-scheme-toggle + .-expanded + > .d-icon, +.discourse-no-touch .header-sidebar-toggle button:hover .d-icon { + color: var(--header_primary-medium); +} + +.discourse-no-touch .interface-color-selector-content { + border: none; + border-radius: var(--d-border-radius); + + .btn { + border: none; + + &:hover { + box-shadow: none; + } + } +} + +.drop-down-mode .d-header-icons .active .icon, +.drop-down-mode .d-header-icons .header-color-scheme-toggle .-expanded { + border-color: transparent; + background-color: transparent; +} + +.badge-notification { + color: var(--accent-text-color); +} + +body.login-page, +body.signup-page, +body.invite-page, +body.password-reset-page, +body.activate-account-page { + .d-header { + background: var(--background-color); + } +} + +.header-dropdown-toggle.chat-header-icon .icon .chat-channel-unread-indicator { + border-color: var(--background-color); +} + +.d-header-icons .badge-notification { + border-color: var(--background-color); +} diff --git a/themes/-2_horizon/extra_scss_hiddenstuff.txt b/themes/-2_horizon/extra_scss_hiddenstuff.txt new file mode 100644 index 0000000..079cf1f --- /dev/null +++ b/themes/-2_horizon/extra_scss_hiddenstuff.txt @@ -0,0 +1,17 @@ +@use "lib/viewport"; + +.sidebar__panel-switch-button, +.notifications-button-footer .reason .text, +.pinned-button .reason .text, +.more-topics__browse-more, +.topic-list-layout-trigger { + display: none; +} + +@include viewport.from(md) { + .horizon-new-topic-button-enabled { + .list-controls .topic-create-button__combo { + display: none; + } + } +} diff --git a/themes/-2_horizon/extra_scss_high-context-cards.txt b/themes/-2_horizon/extra_scss_high-context-cards.txt new file mode 100644 index 0000000..87b677a --- /dev/null +++ b/themes/-2_horizon/extra_scss_high-context-cards.txt @@ -0,0 +1,362 @@ +@use "lib/viewport"; + +$padding-pills-small: var(--space-half) var(--space-2); + +.topic-list-body:has(.--high-context) { + --title-color--read: var(--primary-700); + --topic-title-font-weight--visited: 600; + + @include viewport.from(sm) { + gap: var(--space-4); + } +} + +.topic-list-item.--high-context { + display: block; + background: var(--secondary); + padding: 0; + + &.closed { + opacity: 0.9; + } + + &.bulk-selecting { + display: flex; + } + + &.bulk-selected { + background: var(--tertiary-low); + border-color: var(--tertiary); + + &:hover { + background: var(--tertiary-medium); + } + } + + @include viewport.from(sm) { + border: 1px solid var(--primary-low); + border-radius: var(--d-border-radius-large); + } + + @include viewport.until(sm) { + border-bottom: 1px solid var(--primary-low); + } + + &.selected { + border-color: var(--accent-color); + box-shadow: 0 0 12px 1px var(--topic-card-shadow); + } + + .bulk-select-enabled & { + > .bulk-select { + display: none; + } + } +} + +.hc-topic-card { + display: flex; + flex-direction: column; + gap: var(--space-3); + padding: var(--space-4) var(--space-5); + width: 100%; + box-sizing: border-box; + + @include viewport.until(sm) { + padding: var(--space-4) 0; + + > *:not(.hc-topic-card__footer) { + padding-inline: var(--space-4); + } + } + + @include viewport.from(sm) { + padding: var(--space-4); + } + + &__header { + display: flex; + justify-content: space-between; + align-items: flex-start; + + @include viewport.until(sm) { + align-items: center; + } + } + + &__op { + display: flex; + align-items: center; + gap: var(--space-2); + color: var(--primary-medium); + font-size: var(--font-down-1-rem); + } + + &__op-info { + display: flex; + flex-direction: column; + } + + &__avatar { + flex-shrink: 0; + + .avatar { + border-radius: var(--d-border-radius); + height: 32px; + width: 32px; + } + } + + &__status { + position: relative; + display: inline-flex; + align-items: center; + gap: var(--space-1); + border-radius: var(--d-border-radius); + white-space: nowrap; + background: var(--secondary); + border: 1px solid var(--primary-low-mid); + font-weight: 700; + + @include viewport.from(sm) { + padding: $padding-pills-small; + } + + @include viewport.until(sm) { + padding: var(--space-1); + border-radius: calc(var(--d-border-radius) / 2); + } + + &.--solved { + color: var(--success); + font-weight: 700; + border-color: var(--success); + } + + &.--pinned { + font-weight: 700; + } + + &.--hot { + border: 1px solid var(--danger); + color: var(--danger); + } + } + + &__category .badge-category__wrapper { + padding: var(--space-half) var(--space-2) !important; + font-size: var(--font-down-1-rem); + border-radius: var(--d-border-radius-small) !important; + } + + &__status-tags { + display: inline-flex; + align-items: center; + gap: var(--space-3); + + @include viewport.from(sm) { + font-size: var(--font-down-2-rem); + } + + @include viewport.until(sm) { + font-size: var(--font-0); + } + } + + &__content { + display: flex; + flex-direction: column; + gap: var(--space-2); + } + + &__bulk-select { + display: inline-flex; + align-items: center; + justify-content: center; + padding-inline: var(--space-3) 0; + cursor: pointer; + + input { + margin: 0; + } + } + + &__title { + font-weight: 700; + font-size: var(--font-up-1-rem); + color: var(--primary); + text-decoration: none; + line-height: 1.3; + + a { + color: var(--primary); + word-break: break-word; + + > * { + pointer-events: none; + } + } + + .topic-status.--pinned, + .topic-status.--unpinned, + .topic-status.--solved, + .topic-status.--unsolved { + display: none; + } + } + + .topic-excerpt { + overflow-wrap: anywhere; + + .--high-context & { + color: var(--primary-high); + line-height: 1.25; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + font-size: var(--font-0); + width: 100%; + } + } + + &__context { + display: flex; + gap: var(--space-3); + flex-wrap: wrap; + } + + &__assigned { + display: inline-flex; + align-items: center; + gap: var(--space-1); + padding: $padding-pills-small; + border-radius: var(--d-border-radius-small); + background: var(--primary-very-low); + color: var(--primary-medium); + font-size: var(--font-down-2-rem); + } + + &__tags { + flex-shrink: 0; + display: flex; + gap: var(--space-2); + flex-wrap: wrap; + + .discourse-tags__tag-separator { + display: none; + } + + .discourse-tag { + padding: var(--space-half) var(--space-2); + border-radius: var(--d-border-radius-small); + border: 1px solid var(--primary-low); + background: var(--secondary); + color: var(--primary-high); + white-space: nowrap; + font-size: var(--font-down-2-rem); + + &.assigned-to, + &.list-vote-count { + display: none; + } + } + } + + &__footer { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: center; + gap: var(--space-3); + + @include viewport.from(sm) { + border-top: 1px solid var(--primary-low); + padding-top: var(--space-3); + } + + @include viewport.until(sm) { + &::after { + content: ""; + position: absolute; + inset: 0; + pointer-events: none; + background: linear-gradient( + to right, + var(--secondary) 0, + transparent 1rem, + transparent calc(100% - 1rem), + var(--secondary) 100% + ); + } + } + } + + &__category-tags { + display: flex; + gap: var(--space-2); + overflow: auto; + + @include viewport.until(sm) { + padding-inline: var(--space-4); + } + + &::-webkit-scrollbar { + display: none; // Chrome/Safari + } + } + + &__category { + flex-shrink: 0; + } + + &__stats { + display: flex; + align-items: center; + gap: var(--space-4); + margin-left: auto; + flex-shrink: 0; + + @include viewport.until(sm) { + padding-inline: var(--space-4); + } + } + + &__replies, + &__likes, + &__votes { + display: inline-flex; + align-items: center; + gap: var(--space-1); + color: var(--primary-medium); + font-size: var(--font-down-1-rem); + } + + &__last-reply { + display: inline-flex; + align-items: center; + gap: var(--space-1); + padding: $padding-pills-small; + border-radius: var(--d-border-radius-small); + background: var(--primary-very-low); + font-size: var(--font-down-2-rem); + color: var(--primary-medium); + + .avatar { + border-radius: 50%; + height: 1rem; + width: 1rem; + } + + @include viewport.until(sm) { + .avatar { + width: 1rem; + height: 1rem; + } + } + } + + &__time { + color: var(--primary-medium); + } +} diff --git a/themes/-2_horizon/extra_scss_login.txt b/themes/-2_horizon/extra_scss_login.txt new file mode 100644 index 0000000..7eaeed9 --- /dev/null +++ b/themes/-2_horizon/extra_scss_login.txt @@ -0,0 +1,15 @@ +body.static-login { + #main-outlet-wrapper { + grid-template-areas: + "sidebar blank" + "sidebar content" + "sidebar below-content"; + grid-template-rows: auto 1fr auto; + } + + .login-welcome { + border-radius: 0; + border: none; + box-shadow: none; + } +} diff --git a/themes/-2_horizon/extra_scss_main.txt b/themes/-2_horizon/extra_scss_main.txt new file mode 100644 index 0000000..cf7b432 --- /dev/null +++ b/themes/-2_horizon/extra_scss_main.txt @@ -0,0 +1,152 @@ +@use "lib/viewport"; + +:root { + --main-grid-gap: 0.5em; +} + +html:not(:has(.has-full-page-chat)) { + background-color: var(--background-color); + + @include viewport.until(lg) { + background-color: var(--d-content-background); + } +} + +body { + -webkit-font-smoothing: antialiased; + + @include viewport.until(sm) { + background-color: var(--d-content-background); + } + + @include viewport.from(lg) { + &.account-created-page, + &.activate-account-page { + background: var(--background-color); + } + } +} + +#main-outlet-wrapper { + @include viewport.from(lg) { + gap: var(--main-grid-gap); + } +} + +body.has-sidebar-page.has-full-page-chat #main-outlet-wrapper { + column-gap: var(--main-grid-gap); + background-color: var(--background-color); + + @include viewport.until(lg) { + background-color: var(--secondary); + } +} + +body.has-full-page-chat:not(.has-sidebar-page) { + .d-header { + background-color: var(--background-color); + } + + #main-outlet-wrapper { + gap: var(--main-grid-gap); + + @include viewport.until(lg) { + gap: 0; + } + } +} + +body.has-sidebar-page #main-outlet-wrapper { + #main-outlet { + max-width: unset; + } + + @include viewport.from(lg) { + gap: var(--main-grid-gap); + padding-right: var(--main-grid-gap); + } +} + +body:not(.has-sidebar-page) #main-outlet-wrapper { + @include viewport.from(lg) { + grid-template-columns: 0 minmax(0, 1fr) 0; + } +} + +body:not(.has-full-page-chat, .wizard) { + @include viewport.from(xl) { + background-color: var(--background-color); + } + + #main-outlet-wrapper { + #main-outlet { + width: 100%; + max-width: unset; + padding-bottom: var(--space-6); + border-radius: var(--d-border-radius-large); + background-color: var(--d-content-background); + + @include viewport.until(lg) { + border-radius: 0; + } + + html.composer-open & { + padding-bottom: var(--composer-height); + } + + @include viewport.from(sm) { + > *:not( + .experimental-screen, + .activate-account, + .discourse-kanban-board-viewer + ) { + box-sizing: border-box; + max-width: 1000px; + margin-inline: auto; + padding-inline: var(--space-6); + } + } + } + } +} + +body.has-admin-changes-banner #main-outlet-wrapper #main-outlet { + // makes space so save banner doesn't overlap content + padding-bottom: 6em; +} + +@include viewport.until(sm) { + .welcome-banner { + display: none; + } +} + +#list-area { + .topic-list-body { + padding-top: var(--space-4); + } +} + +aside.onebox { + background-color: var(--d-content-background); +} + +.d-editor-preview-wrapper { + border-radius: var(--d-border-radius); + padding: 1em; + background-color: var(--d-content-background); +} + +.no-ember { + #main-outlet { + border-radius: var(--d-border-radius-large); + max-height: calc(100vh - 50px - 1em - var(--main-grid-gap)); + } +} + +.activate-account { + .activate-account-button, + .continue-button { + margin-inline: 0; + } +} diff --git a/themes/-2_horizon/extra_scss_misc.txt b/themes/-2_horizon/extra_scss_misc.txt new file mode 100644 index 0000000..1c41a0c --- /dev/null +++ b/themes/-2_horizon/extra_scss_misc.txt @@ -0,0 +1,139 @@ +@use "lib/viewport"; + +.user-main .about.collapsed-info .details { + background: var(--d-content-background); +} + +.user-menu .quick-access-panel .read, +.user-notifications-list .read { + background: var(--d-content-background); +} + +.powered-by-discourse { + z-index: calc( + z("base") + 2 + ); // has to top experimental framing inset elements of Horizon +} + +.boxed.white { + background-color: var(--d-content-background); +} + +.admin-area .sidebar-wrapper .admin-panel { + background-color: transparent; +} + +.admin-report .chart__body .report-alert.no-data, +.admin-report .chart__body .report-alert.rate-limited { + background-color: var(--d-content-background); +} + +.admin-detail { + background-color: var(--d-content-background); +} + +.select-kit.combo-box .select-kit-header, +.select-kit.multi-select .multi-select-header, +.d-editor-textarea-wrapper, +.fk-d-menu__inner-content, +.menu-panel { + background-color: var(--d-content-background); +} + +.d-editor-textarea-wrapper.in-focus, +input[type="text"]:focus, +input[type="password"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="date"]:focus, +input[type="month"]:focus, +input[type="time"]:focus, +input[type="week"]:focus, +input[type="number"]:focus, +input[type="email"]:focus, +input[type="url"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="color"]:focus, +.select-kit.multi-select.is-expanded .multi-select-header, +.select-kit.multi-select .multi-select-header:focus { + border-color: var(--accent-color); + outline: 2px solid var(--accent-color); +} + +#reply-control { + background-color: var(--background-color); +} + +@include viewport.until(sm) { + // pinned topic excerpts are hidden on small screens too + .fk-d-menu__trigger.topic-list-layout-trigger { + display: none; + } +} + +.search-container .search-header, +.search-container .search-bar, +.search-container .search-filters, +.search-container .search-filters .search-advanced-filters { + background-color: var(--d-content-background); +} + +.user-main .about .details { + padding: 1em 1em 0; + border-bottom: 0; + border-radius: var(--d-border-radius); + background-color: var(--primary-50); +} + +.alert.alert-info { + background: var(--tertiary-very-low); +} + +.discourse-reactions-list .reactions { + gap: 0.15em; +} + +.group-details-container { + border-radius: var(--d-border-radius); +} + +.period-chooser-header { + border-radius: 0; +} + +.upcoming-change__badge-info { + padding-right: var(--space-2); +} + +// compatibility with the top contributors sidebar theme component +// https://meta.discourse.org/t/top-contributors-sidebar/215110 +.list-container + #list-area + > .contents + > .topic-list:has(.discourse-top-contributors) { + grid-template-areas: "head head" "body sidebar"; + grid-template-rows: auto 1fr; + + @include viewport.until(lg) { + grid-template-areas: "head head" "body body"; + } + + tbody { + display: flex; + } + + .discourse-top-contributors { + width: auto; + box-sizing: border-box; + + @include viewport.until(lg) { + display: none; + } + + .top-contributors-heading { + font-size: var(--font-up-2); + padding-bottom: 0.5em; + } + } +} diff --git a/themes/-2_horizon/extra_scss_mobile-stuff.txt b/themes/-2_horizon/extra_scss_mobile-stuff.txt new file mode 100644 index 0000000..bd34b3d --- /dev/null +++ b/themes/-2_horizon/extra_scss_mobile-stuff.txt @@ -0,0 +1,224 @@ +@use "lib/viewport"; + +// temp separate file to avoid merge hell… to be distributed later +@include viewport.until(lg) { + html, + .d-header { + background-color: var(--d-content-background); + } +} + +#main-outlet-wrapper { + *[class*="navigation-"] & { + @include viewport.until(sm) { + padding: 0; + } + } +} + +#main-outlet { + @include viewport.until(sm) { + padding-top: var(--space-2); + } + + .list-controls { + @include viewport.until(sm) { + padding-inline: var( + --space-4 + ) !important; // override will be fixed when the whole chat page shenanigans is resolved + padding-block: var(--space-2); + border-bottom: 1px solid var(--primary-200); + } + + .navigation-container { + @include viewport.until(sm) { + gap: var(--space-2); + + .category-breadcrumb.hidden, + .category-breadcrumb { + display: flex !important; + column-gap: var(--space-4); + row-gap: var(--space-1); + flex-basis: 100%; + + li { + margin-right: 0; + margin-left: calc( + (var(--space-2) - 2px) * -1 + ); // 2px is width of the outline + } + + .select-kit-header-wrapper { + gap: 0.25em; + } + + .select-kit-header { + background: var(--d-content-background); + } + } + + .btn-default { + border: 0; + margin-right: 0; + + .d-icon { + font-size: var(--font-up-1); + } + } + + .fk-d-button-tooltip { + margin-right: 0; + margin-left: var( + --space-1 + ); // pure visual correction for horizontal alignment + + &:has(#create-topic) { + order: 1; + } + } + } + + #navigation-bar, + .navigation-controls, + .category-breadcrumb { + @include viewport.until(sm) { + margin-bottom: 0; + } + } + } + } + + .list-container { + @include viewport.until(sm) { + padding-inline: 0 !important; + } + + .topic-list-body { + @include viewport.until(sm) { + border-top: 0; + padding-top: 0; + } + } + } + + #topic-title { + @include viewport.until(sm) { + .title-wrapper { + gap: var(--space-2); + } + + .topic-category { + order: -1; + } + + .badge-category__wrapper { + font-size: var(--font-down-2-rem); + border-radius: var(--d-border-radius); + padding: var(--space-1) var(--space-2); + background-color: var(--badge-category-bg); + border: 1px solid var(--badge-category-bg); + } + + .badge-category__name { + color: var(--badge-category-text); + } + + .discourse-tags { + gap: var(--space-1); + + &__tag-separator { + display: none; + } + } + + .discourse-tag { + font-size: var(--font-down-2-rem); + padding: var(--space-1) var(--space-2); + gap: var(--space-1); + border-radius: var(--d-border-radius-large); + border: 1px solid var(--primary-low-mid); + background: var(--secondary); + } + } + } + + body:not(.archetype-private_message) { + .container.posts { + @include viewport.until(sm) { + .main-avatar .avatar { + width: 40px; + height: 40px; + } + + .topic-body { + .topic-meta-data { + .username { + font-size: var(--font-0-rem); + } + } + + .contents { + padding-top: var(--space-4); + } + } + + .small-action { + &-desc { + padding: var(--space-1) 0; + } + + // for core eventually, better way imo + .topic-avatar { + padding-top: 0; + align-items: center; + + .d-icon { + font-size: var(--font-up-1); + } + } + } + } + } + } + + #topic-footer-buttons { + @include viewport.until(sm) { + padding-inline: var(--space-1) !important; + } + } +} + +// should be changed in core, should not be a primary btn +// changing this into straight buttons to match the progress one, which doesn't work well with rounded corners +#topic-progress-wrapper { + .progress-back-container { + margin-right: 0; + margin-bottom: var(--space-1); + + .btn-primary.progress-back { + border-radius: 0; + background: var(--secondary); + border: 1px solid var(--tertiary-low); + color: var(--accent-color); + padding: var(--space-2) var(--space-4); + + .d-icon { + color: var(--accent-color); + } + } + } + + .topic-admin-menu-trigger { + border-radius: 0; + background: var(--secondary); + border: 1px solid var(--tertiary-low); + } +} + +.mobile-device #reply-control.show-preview .submit-panel { + background-color: var(--background-color); +} + +.d-editor-preview-wrapper { + outline: 2px solid var(--background-color); +} diff --git a/themes/-2_horizon/extra_scss_nav-pills.txt b/themes/-2_horizon/extra_scss_nav-pills.txt new file mode 100644 index 0000000..8edabff --- /dev/null +++ b/themes/-2_horizon/extra_scss_nav-pills.txt @@ -0,0 +1,64 @@ +.list-controls { + position: sticky; + top: var(--header-offset); + background: var(--d-content-background); + z-index: z("base") + 1; + padding: 1rem 0 0 0; + max-width: unset; + border-top-left-radius: var(--d-border-radius-large); + border-top-right-radius: var(--d-border-radius-large); + + .navigation-container { + gap: 1rem; + + .category-breadcrumb { + order: 1; + } + } + + .combo-box .combo-box-header { + // needs more specificity than just in the button file + background-color: var(--secondary); + border-radius: var(--d-border-radius); + border: 1px solid var(--primary-300); + + &:hover { + border: 1px solid var(--accent-color); + } + + &:focus-visible { + .discourse-no-touch & { + background: var(--secondary); + color: var(--accent-color); + box-shadow: 0 0 0 3px var(--button-box-shadow); + + .d-icon { + color: var(--accent-color); + } + } + } + } +} + +.select-kit.is-expanded .select-kit-body { + border-radius: var(--d-border-radius); + background-color: var(--d-content-background); +} + +.nav-pills > li > a:hover, +.nav-pills > li button:hover { + .discourse-no-touch & { + background: transparent; + color: var(--d-nav-color--hover); + + &::after { + content: ""; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: var(--d-nav-underline-height); + background: var(--d-nav-color--hover); + } + } +} diff --git a/themes/-2_horizon/extra_scss_sidebar-new-topic-button.txt b/themes/-2_horizon/extra_scss_sidebar-new-topic-button.txt new file mode 100644 index 0000000..601f9c7 --- /dev/null +++ b/themes/-2_horizon/extra_scss_sidebar-new-topic-button.txt @@ -0,0 +1,117 @@ +@use "lib/viewport"; + +.has-ai-conversations-sidebar { + .sidebar-new-topic-button__wrapper { + display: none; + } +} + +.sidebar-new-topic-button { + flex: 1 1 auto; + + &__wrapper { + box-sizing: border-box; + display: flex; + margin: var(--space-2) var(--space-6) 0 var(--space-2); + position: relative; + + @include viewport.from(lg) { + &:not(:hover, :focus-visible) { + &::after { + content: ""; + width: 100%; + height: var(--space-4); + position: absolute; + bottom: calc(var(--space-4) * -1); + background: linear-gradient( + to top, + transparent 0, + var(--background-color) 100% + ); + z-index: 1; + } + } + } + + &:focus-visible, + &:hover { + .discourse-no-touch & { + background-color: var(--button-box-shadow); + box-shadow: 0 0 0 4px var(--button-box-shadow); + color: var(--accent-text-color); + + .d-icon { + color: var(--accent-text-color); + } + } + } + + .mobile-view & { + margin: 0 0 1rem; + } + + &:has(.topic-drafts-menu-trigger) { + .sidebar-new-topic-button { + &:focus-visible, + &:hover { + .discourse-no-touch & { + box-shadow: none; + background: light-dark( + oklch(from var(--accent-color) 40% c h), + oklch(from var(--accent-color) 50% c h) + ); + } + } + } + } + + .fk-d-button-tooltip { + flex: 1 1 auto; + } + + .topic-drafts-menu-trigger { + flex: 0 1 auto; + margin: 0; + border-radius: 0 var(--d-button-border-radius) + var(--d-button-border-radius) 0; + + &:focus-visible, + &:hover { + .discourse-no-touch & { + box-shadow: none; + background: light-dark( + oklch(from var(--accent-color) 40% c h), + oklch(from var(--accent-color) 50% c h) + ); + } + } + } + + .fk-d-button-tooltip:has(button[disabled]) { + + .topic-drafts-menu-trigger { + display: none; + } + + .fk-d-tooltip__trigger { + background: var(--accent-color); + border-radius: 0 var(--d-button-border-radius) + var(--d-button-border-radius) 0; + padding-right: 0.65em; + + .d-icon { + color: var(--secondary); + } + } + } + } +} + +li.sidebar-section-link-wrapper[data-list-item-name="New Topic"] { + display: none; +} + +.has-full-page-chat { + .sidebar-new-topic-button__wrapper { + display: none; + } +} diff --git a/themes/-2_horizon/extra_scss_sidebar.txt b/themes/-2_horizon/extra_scss_sidebar.txt new file mode 100644 index 0000000..1987b0b --- /dev/null +++ b/themes/-2_horizon/extra_scss_sidebar.txt @@ -0,0 +1,111 @@ +@use "lib/viewport"; + +:root { + --d-sidebar-active-background: var(--d-selected); +} + +body.has-full-page-chat .sidebar-wrapper, +.sidebar-wrapper, +.sidebar-hamburger-dropdown { + @include viewport.until(lg) { + background: var(--secondary); + + .sidebar-footer-wrapper { + background: var(--secondary); + + .sidebar-footer-container::before { + display: none; + } + } + } + + .has-full-page-chat &, + .has-full-page-chat & .sidebar-footer-wrapper { + background: transparent; + } + + .sidebar-container { + border-right: none; + } + + .sidebar-section-link { + transition: none; + border-radius: var(--d-border-radius); + } + + .dropdown-menu__item .sidebar-section-link { + border-radius: 0; + } +} + +.sidebar-hamburger-dropdown { + .sidebar-new-topic-button__wrapper { + width: 100%; + margin: 0 0 var(--space-2); + } +} + +.sidebar-section-wrapper { + --d-sidebar-section-border-color: var(--d-sidebar-border-color); + + @include viewport.from(xl) { + padding-block: 0.45em; + } + + @include viewport.until(sm) { + .hamburger-panel .revamped & { + margin-bottom: var(--space-4); + } + } + + .sidebar-section-header { + font-size: var(--font-down-2); + } + + .sidebar-section-content { + margin: 0; + display: flex; + flex-direction: column; + + @include viewport.from(xl) { + gap: var(--space-1); + } + } +} + +.sidebar-wrapper .sidebar-sections { + --scrollbarThumbBg: var(--d-selected); +} + +.sidebar-section-link-wrapper .sidebar-section-link:focus, +.sidebar-section-link-wrapper .sidebar-section-link:hover { + .d-icon { + color: var(--primary); + } +} + +// put the draft menu above the slide-out hamburger on small desktop screens +@include viewport.until(md) { + html:not(.mobile-view) { + .topic-drafts-menu-content { + z-index: z("modal", "overlay"); + } + } +} + +.admin-area .sidebar-wrapper .admin-panel { + --d-sidebar-highlight-background: var(--d-selected); + --d-sidebar-link-icon-color: var(--d-sidebar-link-color); +} + +.sidebar-theme-toggle__wrapper { + order: -1; + + .d-icon-paintbrush { + display: none; + } +} + +.sidebar-theme-toggle-dropdown.select-kit.combo-box .select-kit-header { + padding-left: 1em; +} diff --git a/themes/-2_horizon/extra_scss_topic-cards.txt b/themes/-2_horizon/extra_scss_topic-cards.txt new file mode 100644 index 0000000..f992b97 --- /dev/null +++ b/themes/-2_horizon/extra_scss_topic-cards.txt @@ -0,0 +1,654 @@ +@use "lib/viewport"; + +:root { + --d-border-radius-small: calc(var(--d-border-radius) * 0.5); + --topic-list-item-background-color: var(--d-content-background); + --topic-list-item-background-color--visited: var(--d-content-background); + --topic-card-shadow: rgb(var(--tertiary-rgb), 0.1); +} + +.badge-category__wrapper { + --badge-category-bg: light-dark( + oklch(from var(--category-badge-color) 97% calc(c * 0.3) h), + oklch(from var(--category-badge-color) 45% calc(c * 0.5) h) + ); + --badge-category-text: light-dark( + oklch(from var(--category-badge-color) 20% calc(c * 1) h), + oklch(from var(--category-badge-color) 100% calc(c * 0.9) h) + ); +} + +.topic-list.--d-topic-cards .topic-list-header .topic-list-data { + max-width: unset; +} + +.topic-list .topic-list-item-separator { + display: none; +} + +.topic-list > .topic-list-body > .topic-list-item.last-visit { + border-bottom: 1px solid var(--primary-300); + + &:hover { + border-color: var(--accent-color); + } +} + +.topic-list, +.category-boxes .subcategories { + .badge-category__wrapper { + border-radius: var(--d-border-radius); + padding: 3px 6px; + background-color: var(--badge-category-bg); + + @include viewport.until(md) { + padding: 2px 6px; + font-size: var(--font-down-2); + } + + .badge-category__name { + color: var(--badge-category-text); + } + } +} + +// undo all the above for the few instances that arent styled like traditional badges +.category-text-title { + .badge-category__wrapper { + border-radius: 0; + padding: 0; + background-color: transparent; + + .badge-category__name { + color: var(--primary); + } + } +} + +.topic-list.--d-topic-cards .topic-list-body { + border: none; + display: flex; + flex-direction: column; + gap: var(--space-4); + + @include viewport.until(lg) { + gap: var(--space-2); + } + + @include viewport.until(sm) { + gap: 0; + padding: 0; + } +} + +.topic-list.--d-topic-cards .topic-list-body .topic-list-item { + cursor: pointer; +} + +.topic-list.--d-topic-cards + .topic-list-body + .topic-list-item:not(.--high-context) { + position: relative; + text-overflow: ellipsis; + padding: var(--space-3); + border: 1px solid var(--primary-300); + display: grid; + grid-template-columns: min-content min-content min-content auto min-content; + grid-template-areas: + "creator title title title status" + ". category activity activity ."; + gap: var(--space-3); + border-radius: var(--d-border-radius); + + &.--has-replies { + grid-template-areas: + "creator title title title status" + ". category likes-replies activity ."; + } + + &:not(.--has-replies) { + .topic-likes-replies-data { + display: none; + } + } + + @include viewport.until(sm) { + max-width: 100vw; + box-sizing: border-box; + grid-template-areas: + "creator title title title status" + ". category activity activity . "; + border: none; + border-bottom: 1px solid var(--primary-200); + box-shadow: none; + border-radius: 0; + padding: var(--space-4) var(--space-3); + + &.--has-replies { + grid-template-areas: + "creator title title title status" + ". category likes-replies activity . "; + } + } + + &.bulk-selecting { + grid-template-columns: min-content min-content min-content min-content auto min-content; + grid-template-areas: + "bulk-select creator title title title status" + "bulk-select category category activity activity ."; + + &.--has-replies { + grid-template-areas: + "bulk-select creator title title title status" + "bulk-select category category activity likes-replies ."; + + @include viewport.until(sm) { + grid-template-areas: + "bulk-select creator title title title status" + "bulk-select . category likes-replies activity . "; + } + } + + @include viewport.until(sm) { + grid-template-columns: min-content min-content min-content min-content auto min-content; + grid-template-areas: + "bulk-select creator title title title status" + "bulk-select . category activity activity . "; + } + } + + &:hover { + .discourse-no-touch & { + box-shadow: 1px 1px 12px 2px var(--topic-card-shadow); + background: var(--d-content-background); + } + } + + &.selected { + border: 1px solid var(--accent-color); + box-shadow: 0 0 12px 1px var(--topic-card-shadow); + } + + &.excerpt-expanded { + @include viewport.until(sm) { + .topic-excerpt, + .link-bottom-line { + display: none; + } + } + + @include viewport.from(sm) { + grid-template-areas: + "creator title title title status" + ". category activity activity . " + ". excerpt excerpt excerpt excerpt"; + + &.has-replies { + grid-template-areas: + "creator title title title status" + ". category likes-replies activity ." + ". excerpt excerpt excerpt excerpt"; + } + + .bulk-select-enabled & { + grid-template-areas: + "bulk-select creator title title title status" + "bulk-select category category activity likes-replies likes-replies " + " bulk-select excerpt excerpt excerpt excerpt excerpt"; + } + } + } + + .link-top-line { + grid-area: title; + font-weight: 500; + line-height: calc(var(--space-3) * 2); // avatar sizing + + @include viewport.until(sm) { + line-height: normal; + } + + .title { + padding: 0; + } + } + + // display contents + td.main-link, + td.posters, + td.posts, + td.views, + td.activity, + td.topic-category-status-data { + display: contents; + } + + td.num.posts a { + padding: 0; + } + + // display:nones + td.main-link a.topic-status, + .link-bottom-line, + .badge-notification.new-topic::before { + display: none; + } + + .topic-category-data { + grid-area: category; + display: flex; + } + + .badge-category__wrapper { + border-radius: var(--d-border-radius); + + @include viewport.until(sm) { + border-radius: var(--d-border-radius-small); + max-width: 125px; + } + padding: 0.25em 0.5rem; + background-color: var(--badge-category-bg); + + @include viewport.until(md) { + padding: 0.25em 0.5rem; + } + + .badge-category { + align-items: center; + } + + .badge-category__name { + font-size: var(--font-down-1); + color: var(--badge-category-text); + min-width: 0; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + + .d-icon { + width: var(--font-down-1); + height: var(--font-down-1); + } + } + + // OP avatar + .topic-creator-data { + grid-area: creator; + + .avatar { + height: calc(var(--space-3) * 2); + width: calc(var(--space-3) * 2); + border-radius: var(--d-border-radius); + + @include viewport.until(sm) { + border-radius: var(--d-border-radius-small); + } + } + } + + .dot-separator { + width: 0.25em; + height: 0.25em; + background-color: var(--primary-500); + border-radius: 100%; + margin-inline: 0.25em; + } + + // topic activity, icon, text + .topic-activity-data { + @include ellipsis; + grid-area: activity; + } + + .topic-activity { + display: flex; + font-size: var(--font-down-1); + height: 100%; + align-items: center; + gap: 0.25em; + } + + .topic-activity__type { + border-radius: 0.25rem; + display: flex; + align-items: center; + justify-content: center; + } + + .topic-activity__username { + @include ellipsis; + margin-left: 0.25em; + } + + // timestamp + td.activity .post-activity { + grid-area: activity; + font-size: var(--font-down-1); + color: var(--primary-500); + margin-left: auto; + padding: 0; + } + + // status + .topic-status-data { + display: none; + } + + &.--has-status-card .topic-status-data { + display: block; + grid-area: status; + } + + .topic-status-card { + height: min-content; + margin-left: auto; + display: flex; + flex-direction: row; + gap: 0.25em; + align-items: center; + padding: 0.2em 0.5rem; + font-size: var(--font-down-2); + + @include viewport.from(lg) { + font-size: var(--font-down-3); + } + font-weight: 600; + border-radius: var(--d-border-radius); + border: 1px solid var(--status-color); + color: var(--status-color); + + @include viewport.until(sm) { + border-radius: var(--d-border-radius-small); + padding: 0.35em; + } + + &.--pinned { + --status-color: var(--primary-500); + } + + &.--hot { + --status-color: var(--danger); + } + + @include viewport.from(lg) { + position: absolute; + right: 1rem; + top: 0; + transform: translateY(-45%); + background-color: var(--d-content-background); + } + + svg { + color: var(--status-color); + + @include viewport.from(lg) { + font-size: var(--font-down-1); + } + } + + &__name { + margin: 0; + + @include viewport.until(sm) { + display: none; + } + } + } + + .topic-list-data { + padding: 0; + } + + // metadata - excerpt + .topic-excerpt { + grid-area: excerpt; + margin: 0; + padding: 0; + font-size: var(--font-down-2); + width: 100%; + + .excerpt__contents { + color: var(--primary-high); + } + + .emoji { + width: 1em; + height: 1em; + } + + // default category position hidden + .badge-category__wrapper { + display: none; + } + } + + td.main-link .discourse-tags { + display: none; + } + + // metadata - likes and replies + td.posts .badge-posts { + grid-area: replies; + align-self: center; + font-weight: normal; + } + + td.topic-likes-replies-data { + grid-area: likes-replies; + display: flex; + flex-direction: row; + gap: var(--space-3); + height: min-content; + align-self: center; + + .topic-likes { + display: none; + } + } + + .topic-likes-replies-data .topic-replies { + display: flex; + flex-direction: row; + gap: 0.5em; + align-items: center; + color: var(--primary-500); + font-size: var(--font-down-1-rem); + + svg { + color: var(--primary-600); + } + + .number { + white-space: nowrap; + } + } + + .bulk-select { + grid-area: bulk-select; + padding: 0; + margin: 0; + align-self: center; + justify-self: center; + + @include viewport.until(sm) { + align-self: flex-start; + } + + label { + margin: 0; + } + + &th { + display: none; + } + } + + // Assigned List + &.assigned-list-item { + .topic-status-data { + display: none; + } + grid-template-areas: + "creator title title title dropdown" + ". category activity activity ."; + + &.--has-replies { + grid-template-areas: + "creator title title title dropdown" + "category category likes-replies activity ."; + } + + .assign-topic-buttons { + display: contents; + + .assign-actions-dropdown { + grid-area: dropdown; + justify-content: flex-end; + height: 1em; + + .select-kit-header { + padding-top: 0; + margin-left: auto; + align-items: center; + background: transparent; + } + + .select-kit-header-wrapper { + height: 1em; + width: 1em; + } + } + } + } + + // Bookmarks + &.bookmark-list-item { + grid-template-areas: + "creator title title title dropdown" + "category category activity . . "; + + @include viewport.until(sm) { + grid-template-areas: + "title title title title dropdown" + "category category activity activity . "; + + .avatar { + display: none; + } + } + + &.has-metadata { + grid-template-areas: + "creator title title title dropdown" + "category category activity metadata . "; + + @include viewport.until(sm) { + grid-template-areas: + "metadata metadata metadata metadata dropdown" + "title title title title ." + "category category activity activity . "; + } + } + + td.author-avatar { + grid-area: creator; + } + + td.main-link .link-bottom-line { + display: contents; + + .badge-category__wrapper { + grid-area: category; + display: flex; + align-items: center; + width: min-content; + justify-self: flex-end; + } + } + + td.main-link .link-top-line { + display: contents; + + .bookmark-metadata { + grid-area: metadata; + margin: 0; + display: flex; + align-items: center; + flex-wrap: wrap; + gap: var(--space-2); + white-space: nowrap; + } + + .bookmark-metadata-item { + margin: 0; + vertical-align: middle; + } + + .bookmark-status-with-link { + grid-area: title; + } + } + + .post-excerpt { + grid-area: excerpt; + margin: 0; + } + + .topic-list-data:last-of-type { + display: contents; + + .bookmark-actions-dropdown { + grid-area: dropdown; + align-self: flex-start; + height: 1em; + + .select-kit-header { + padding-top: 0; + margin-left: auto; + align-items: center; + background: transparent; + } + + .select-kit-header-wrapper { + height: 1em; + width: 1em; + } + } + } + + .post-metadata.topic-list-data.updated-at { + grid-area: activity; + display: flex; + align-items: center; + font-size: var(--font-down-1-rem); + } + + td.activity .post-activity { + display: none; + } + } +} + +// for both types of context cards +.topic-list.--d-topic-cards { + .event-date { + margin-left: var(--space-2); + font-size: var(--font-down-3); + white-space: nowrap; + font-weight: normal; + } + + .event-date-container { + display: inline-flex; + position: relative; + top: -0.15rem; + line-height: normal; + } +} + +// bulk-select overrule for j/k nav +.topic-list tr.selected td:first-of-type, +.topic-list-item.selected td:first-of-type { + box-shadow: none; +} diff --git a/themes/-2_horizon/extra_scss_topic-voting.txt b/themes/-2_horizon/extra_scss_topic-voting.txt new file mode 100644 index 0000000..ed7d485 --- /dev/null +++ b/themes/-2_horizon/extra_scss_topic-voting.txt @@ -0,0 +1,35 @@ +@use "lib/viewport"; + +.voting .voting-wrapper { + --d-button-border-radius: var(--d-border-radius-small); + --primary-100: var(--d-selected); + --primary-low: var(--d-selected); + + &__button { + background: var(--secondary); + } + + .discourse-no-touch & { + button { + &:focus-visible, + &:hover { + box-shadow: none; + } + + &:not(.btn-success) { + .d-icon { + color: var(--primary-high); + } + } + } + } +} + +.voting.header-title-voting .voting-wrapper { + --primary-high: var(--header_primary-high); + + @include viewport.from(lg) { + --secondary: var(--background-color); + --content-border-color: var(--d-sidebar-border-color); + } +} diff --git a/themes/-2_horizon/extra_scss_topic.txt b/themes/-2_horizon/extra_scss_topic.txt new file mode 100644 index 0000000..669b474 --- /dev/null +++ b/themes/-2_horizon/extra_scss_topic.txt @@ -0,0 +1,135 @@ +@use "lib/viewport"; + +:root { + --d-post-control-background--hover: var(--d-hover); +} + +.post-stream { + .contents { + font-size: var(--font-up-1); + line-height: 1.25; + -webkit-font-smoothing: antialiased; + } +} + +.timeline-container .topic-timeline { + .timeline-scrollarea { + border-left: 1px solid var(--accent-color); + + .timeline-scroller { + @include viewport.from(lg) { + margin-left: -4.5px; + height: 40px !important; // height is coming from element style have no other choice + } + + .timeline-replies, + .timeline-ago { + line-height: 1; + } + } + + .timeline-handle { + background-color: var(--accent-color); + outline: 3px solid var(--d-content-background); + + @include viewport.from(lg) { + width: 8px; + border-radius: 10px; + height: calc(100% - 6px); + } + } + } +} + +// should probably get rid of this extra specificity class in core? +.timeline-container.timeline-fullscreen { + @include viewport.until(lg) { + .topic-timeline + .timeline-scrollarea + .timeline-scroller + .timeline-scroller-content { + padding-right: 0.5em; + } + } +} + +body:not(.d-toc-installed) { + .container.posts { + grid-template-columns: auto 8em; + + @media screen and (width <= 924px) { + grid-template-columns: auto; + } + } + + .topic-navigation-popup { + min-width: 250px; + right: 0; + } +} + +.container.posts { + .post-notice { + padding: var(--space-2); + border-radius: var(--d-border-radius); + font-size: var(--font-down-1-rem); + + .d-icon { + font-size: var(--font-up-1); + width: 1em; + } + } +} + +.topic-post-badges { + .badge-notification { + font-size: var(--font-down-1); + padding: 0.15em 0.35em; + border-radius: 1em; + min-width: 1.3em; + box-sizing: border-box; + color: var(--secondary); + } +} + +.timeline-container .topic-timeline .timeline-scroller-content { + overflow: unset; +} + +.more-topics__container + .more-topics__list + .topic-list-body + .topic-list-item:last-of-type { + border-bottom: 1px solid var(--primary-300); +} + +.discourse-post-event .discourse-post-event-widget { + background: var(--d-content-background); +} + +.more-topics__container .nav { + position: unset; + margin-block: unset; + margin-bottom: 1em; +} + +nav.post-controls .actions button { + font-size: var(--font-0); +} + +.archetype-private_message { + --pm-border-radius: var(--d-border-radius); +} + +.header-title { + .event-date { + font-size: var(--font-down-3); + border: 1px solid var(--tertiary-low); + background: var(--tertiary-low); + + &.past { + border-color: transparent; + background-color: transparent; + } + } +} diff --git a/themes/-2_horizon/extra_scss_variables.txt b/themes/-2_horizon/extra_scss_variables.txt new file mode 100644 index 0000000..44cef31 --- /dev/null +++ b/themes/-2_horizon/extra_scss_variables.txt @@ -0,0 +1,6 @@ +:root { + --d-max-width: 1000px; + --d-border-radius-large: 20px; + --d-border-radius: 8px; + --d-input-border-radius: 6px; +} diff --git a/themes/-2_horizon/extra_scss_welcome-banner.txt b/themes/-2_horizon/extra_scss_welcome-banner.txt new file mode 100644 index 0000000..e34a3e3 --- /dev/null +++ b/themes/-2_horizon/extra_scss_welcome-banner.txt @@ -0,0 +1,132 @@ +@use "lib/viewport"; + +.welcome-banner { + &.--location-below-site-header { + border-radius: 0; + + @include viewport.until(lg) { + margin-bottom: var(--space-4); + } + } + + &__wrap { + display: flex; + align-items: center; + gap: var(--space-8); + border-bottom: 1px solid var(--primary-300); + margin-block: 0; + padding-block: var(--space-4) var(--space-8); + + .--with-bg-img & { + padding-block: clamp(var(--space-4), 10vh, var(--space-11)); + } + + @include viewport.from(xl) { + justify-content: center; + } + + @include viewport.until(md) { + flex-direction: column; + gap: var(--space-4); + } + + @include viewport.until(sm) { + display: block; + padding: 0.5em; + margin-top: 0; + } + + .--location-below-site-header & { + border-bottom: 0; + padding: var(--space-8); + margin: 0 var(--main-grid-gap) var(--space-2); + + @include viewport.until(lg) { + padding: var(--space-8) var(--space-4) var(--space-8); + } + } + + .--location-above-topic-content & { + @container (width <= 800px) { + flex-direction: column; + gap: var(--space-4); + } + + @include viewport.until(lg) { + padding-inline: var(--space-4); + } + } + + .search-menu { + width: 100%; + align-self: center; + + .--location-above-topic-content & { + @container (width >= 800px) { + width: 50cqw; + } + } + + @include viewport.from(xl) { + margin-inline: unset; + } + } + } + + .search-menu .search-input, + .search-menu-container .search-input { + border: 1px solid var(--input-border-color); + border-radius: var(--d-border-radius); + } + + .search-menu .search-input:focus-within, + .search-menu-container .search-input:focus-within { + border: 1px solid var(--search-color); + outline: 2px solid var(--search-color); + } + + .panel-body { + z-index: z("dropdown"); + } + + .results { + background: var(--d-content-background); + } + + &__title { + text-align: left; + margin: 0; + color: var(--search-color); + + .--location-above-topic-content & { + @container (width >= 800px) { + flex-grow: 1; + } + + @container (width <= 800px) { + white-space: nowrap; + text-align: center; + } + } + + @include viewport.from(xl) { + margin-inline: unset; + } + + @include viewport.from(md) { + font-size: clamp(var(--font-up-4), 4vw, var(--font-up-6)); + } + + @include viewport.until(md) { + font-size: var(--font-up-4); + } + + @include viewport.until(sm) { + font-size: var(--font-up-2); + } + } + + &__subheader { + white-space: wrap; + } +} diff --git a/themes/-2_horizon/javascript_discourse_api-initializers_composer-peek-toggle-connector.js b/themes/-2_horizon/javascript_discourse_api-initializers_composer-peek-toggle-connector.js new file mode 100644 index 0000000..09de65e --- /dev/null +++ b/themes/-2_horizon/javascript_discourse_api-initializers_composer-peek-toggle-connector.js @@ -0,0 +1,6 @@ +import { apiInitializer } from "discourse/lib/api"; +import ComposerPeekModeToggle from "../components/composer-peek-mode-toggle"; + +export default apiInitializer((api) => { + api.renderInOutlet("before-composer-toggles", ComposerPeekModeToggle); +}); diff --git a/themes/-2_horizon/javascript_discourse_api-initializers_full-width-logo-behavior.js b/themes/-2_horizon/javascript_discourse_api-initializers_full-width-logo-behavior.js new file mode 100644 index 0000000..82c406d --- /dev/null +++ b/themes/-2_horizon/javascript_discourse_api-initializers_full-width-logo-behavior.js @@ -0,0 +1,16 @@ +import { apiInitializer } from "discourse/lib/api"; + +export default apiInitializer((api) => { + document.body.classList.add("full-width-enabled"); + + // When the sidebar is visible, force the HomeLogo to be in an 'un-minimized' state. + api.registerValueTransformer?.( + "home-logo-minimized", + ({ value, context }) => { + if (value && context.showSidebar) { + return false; + } + return value; + } + ); +}); diff --git a/themes/-2_horizon/javascript_discourse_api-initializers_hamburger-click-outside-transformer.js b/themes/-2_horizon/javascript_discourse_api-initializers_hamburger-click-outside-transformer.js new file mode 100644 index 0000000..bedeb04 --- /dev/null +++ b/themes/-2_horizon/javascript_discourse_api-initializers_hamburger-click-outside-transformer.js @@ -0,0 +1,10 @@ +import { apiInitializer } from "discourse/lib/api"; + +export default apiInitializer((api) => { + api.registerValueTransformer( + "hamburger-dropdown-click-outside-exceptions", + ({ value }) => { + return [...value, ".topic-drafts-menu-content"]; + } + ); +}); diff --git a/themes/-2_horizon/javascript_discourse_api-initializers_horizon.gjs b/themes/-2_horizon/javascript_discourse_api-initializers_horizon.gjs new file mode 100644 index 0000000..344e5ff --- /dev/null +++ b/themes/-2_horizon/javascript_discourse_api-initializers_horizon.gjs @@ -0,0 +1,8 @@ +import { apiInitializer } from "discourse/lib/api"; +import ExperimentalScreen from "../components/experimental-screen"; +import UserColorPaletteSelector from "../components/user-color-palette-selector"; + +export default apiInitializer((api) => { + api.renderInOutlet("above-main-container", ExperimentalScreen); + api.renderInOutlet("sidebar-footer-actions", UserColorPaletteSelector); +}); diff --git a/themes/-2_horizon/javascript_discourse_api-initializers_reposition-bulk-select.js b/themes/-2_horizon/javascript_discourse_api-initializers_reposition-bulk-select.js new file mode 100644 index 0000000..5d4d68d --- /dev/null +++ b/themes/-2_horizon/javascript_discourse_api-initializers_reposition-bulk-select.js @@ -0,0 +1,7 @@ +import { apiInitializer } from "discourse/lib/api"; + +export default apiInitializer((api) => { + api.registerValueTransformer("bulk-select-in-nav-controls", () => { + return true; + }); +}); diff --git a/themes/-2_horizon/javascript_discourse_api-initializers_sidebar-new-topic-button-connector.js b/themes/-2_horizon/javascript_discourse_api-initializers_sidebar-new-topic-button-connector.js new file mode 100644 index 0000000..96447a5 --- /dev/null +++ b/themes/-2_horizon/javascript_discourse_api-initializers_sidebar-new-topic-button-connector.js @@ -0,0 +1,6 @@ +import { apiInitializer } from "discourse/lib/api"; +import SidebarNewTopicButton from "../components/sidebar-new-topic-button"; + +export default apiInitializer((api) => { + api.renderInOutlet("before-sidebar-sections", SidebarNewTopicButton); +}); diff --git a/themes/-2_horizon/javascript_discourse_components_card_high-context-topic-card.gjs b/themes/-2_horizon/javascript_discourse_components_card_high-context-topic-card.gjs new file mode 100644 index 0000000..b207ae0 --- /dev/null +++ b/themes/-2_horizon/javascript_discourse_components_card_high-context-topic-card.gjs @@ -0,0 +1,330 @@ +import Component from "@glimmer/component"; +import { on } from "@ember/modifier"; +import { action } from "@ember/object"; +import { service } from "@ember/service"; +import { themePrefix } from "virtual:theme"; +import PluginOutlet from "discourse/components/plugin-outlet"; +import BulkSelectCheckbox from "discourse/components/topic-list/bulk-select-checkbox"; +import TopicExcerpt from "discourse/components/topic-list/topic-excerpt"; +import TopicLink from "discourse/components/topic-list/topic-link"; +import UnreadIndicator from "discourse/components/topic-list/unread-indicator"; +import TopicPostBadges from "discourse/components/topic-post-badges"; +import TopicStatus from "discourse/components/topic-status"; +import lazyHash from "discourse/helpers/lazy-hash"; +import topicFeaturedLink from "discourse/helpers/topic-featured-link"; +import { shortDateNoYear } from "discourse/lib/formatter"; +import dAvatar from "discourse/ui-kit/helpers/d-avatar"; +import { categoryLinkHTML } from "discourse/ui-kit/helpers/d-category-link"; +import dConcatClass from "discourse/ui-kit/helpers/d-concat-class"; +import dDiscourseTags from "discourse/ui-kit/helpers/d-discourse-tags"; +import dFormatDate from "discourse/ui-kit/helpers/d-format-date"; +import dIcon from "discourse/ui-kit/helpers/d-icon"; +import dNumber from "discourse/ui-kit/helpers/d-number"; +import { i18n } from "discourse-i18n"; +import { topicWasUpdatedAfterLastPost } from "../../lib/topic-activity"; +import { getTopicStatusBadge } from "../../lib/topic-status-badge"; + +export default class HighContextTopicCard extends Component { + @service capabilities; + + get hasSolved() { + return ( + this.args.topic.has_accepted_answer || this.args.topic.accepted_answer + ); + } + + get hasVotes() { + return this.args.topic.can_vote && this.args.topic.vote_count > 0; + } + + get voteCountLabel() { + return i18n(themePrefix("vote_count"), { + count: this.args.topic.vote_count, + }); + } + + get hasAssigned() { + return this.args.topic.assigned_to_user || this.hasIndirectAssignments; + } + + get assignedUser() { + return this.args.topic.assigned_to_user; + } + + get hasIndirectAssignments() { + const indirect = this.args.topic.indirectly_assigned_to; + return indirect && Object.keys(indirect).length > 0; + } + + get indirectAssignees() { + const indirect = this.args.topic.indirectly_assigned_to; + if (!indirect) { + return []; + } + return Object.values(indirect).map((assignment) => ({ + user: assignment.assigned_to, + postNumber: assignment.post_number, + })); + } + + get hasTags() { + return this.args.topic.tags?.length > 0; + } + + get hasReplies() { + return this.args.topic.replyCount > 0; + } + + get hasLikes() { + return this.args.topic.like_count > 0; + } + + get replyCountLabel() { + return i18n(themePrefix("reply_count"), { + count: this.args.topic.replyCount, + }); + } + + get likeCountLabel() { + return i18n(themePrefix("like_count"), { + count: this.args.topic.like_count, + }); + } + + get hasExcerpt() { + return this.args.topic.excerpt || this.args.topic.hasExcerpt; + } + + get statusBadge() { + return getTopicStatusBadge(this.args.topic); + } + + get topicCreator() { + return this.args.topic.creator; + } + + get hasLastReplyContext() { + return this.hasReplies && !topicWasUpdatedAfterLastPost(this.args.topic); + } + + get hasContext() { + return this.hasLastReplyContext || this.hasAssigned; + } + + get lastPoster() { + return { + user: this.args.topic.lastPosterUser, + username: this.args.topic.last_poster_username, + }; + } + + get topicTimestamp() { + return shortDateNoYear(new Date(this.args.topic.created_at)); + } + + @action + onTitleFocus(event) { + event.target.closest(".topic-list-item").classList.add("selected"); + } + + @action + onTitleBlur(event) { + event.target.closest(".topic-list-item").classList.remove("selected"); + } + + +} diff --git a/themes/-2_horizon/javascript_discourse_components_card_topic-activity-column.gjs b/themes/-2_horizon/javascript_discourse_components_card_topic-activity-column.gjs new file mode 100644 index 0000000..eb8126b --- /dev/null +++ b/themes/-2_horizon/javascript_discourse_components_card_topic-activity-column.gjs @@ -0,0 +1,43 @@ +import Component from "@glimmer/component"; +import dConcatClass from "discourse/ui-kit/helpers/d-concat-class"; +import dFormatDate from "discourse/ui-kit/helpers/d-format-date"; +import { topicWasUpdatedAfterLastPost } from "../../lib/topic-activity"; + +export default class TopicActivityColumn extends Component { + get topicUser() { + if (topicWasUpdatedAfterLastPost(this.args.topic)) { + return { + username: undefined, + class: "--updated", + }; + } + + if (this.args.topic.posts_count > 1) { + return { + username: this.args.topic.last_poster_username, + class: "--replied", + }; + } else if (this.args.topic.posts_count === 1) { + return { + username: this.args.topic.last_poster_username, + class: "--created", + }; + } else { + return; + } + } + + +} diff --git a/themes/-2_horizon/javascript_discourse_components_card_topic-category-column.gjs b/themes/-2_horizon/javascript_discourse_components_card_topic-category-column.gjs new file mode 100644 index 0000000..4c08f0e --- /dev/null +++ b/themes/-2_horizon/javascript_discourse_components_card_topic-category-column.gjs @@ -0,0 +1,7 @@ +import { categoryLinkHTML } from "discourse/ui-kit/helpers/d-category-link"; + +const TopicCategoryColumn = ; + +export default TopicCategoryColumn; diff --git a/themes/-2_horizon/javascript_discourse_components_card_topic-creator-column.gjs b/themes/-2_horizon/javascript_discourse_components_card_topic-creator-column.gjs new file mode 100644 index 0000000..36943d9 --- /dev/null +++ b/themes/-2_horizon/javascript_discourse_components_card_topic-creator-column.gjs @@ -0,0 +1,17 @@ +import Component from "@glimmer/component"; +import dAvatar from "discourse/ui-kit/helpers/d-avatar"; + +export default class TopicCreatorColumn extends Component { + get topicCreator() { + return { + user: this.args.topic.creator, + class: "--topic-creator", + }; + } + + +} diff --git a/themes/-2_horizon/javascript_discourse_components_card_topic-likes-column.gjs b/themes/-2_horizon/javascript_discourse_components_card_topic-likes-column.gjs new file mode 100644 index 0000000..0093d7c --- /dev/null +++ b/themes/-2_horizon/javascript_discourse_components_card_topic-likes-column.gjs @@ -0,0 +1,14 @@ +import { themePrefix } from "virtual:theme"; +import dIcon from "discourse/ui-kit/helpers/d-icon"; +import { i18n } from "discourse-i18n"; + +const TopicLikesColumn = ; + +export default TopicLikesColumn; diff --git a/themes/-2_horizon/javascript_discourse_components_card_topic-replies-column.gjs b/themes/-2_horizon/javascript_discourse_components_card_topic-replies-column.gjs new file mode 100644 index 0000000..06108e8 --- /dev/null +++ b/themes/-2_horizon/javascript_discourse_components_card_topic-replies-column.gjs @@ -0,0 +1,15 @@ +import { themePrefix } from "virtual:theme"; +import dIcon from "discourse/ui-kit/helpers/d-icon"; +import dNumber from "discourse/ui-kit/helpers/d-number"; +import { i18n } from "discourse-i18n"; + +const TopicRepliesColumn = ; + +export default TopicRepliesColumn; diff --git a/themes/-2_horizon/javascript_discourse_components_card_topic-status-column.gjs b/themes/-2_horizon/javascript_discourse_components_card_topic-status-column.gjs new file mode 100644 index 0000000..3f9459c --- /dev/null +++ b/themes/-2_horizon/javascript_discourse_components_card_topic-status-column.gjs @@ -0,0 +1,18 @@ +import Component from "@glimmer/component"; +import dIcon from "discourse/ui-kit/helpers/d-icon"; +import { i18n } from "discourse-i18n"; +import { getTopicStatusBadge } from "../../lib/topic-status-badge"; + +export default class TopicStatusColumn extends Component { + get badge() { + return getTopicStatusBadge(this.args.topic); + } + + +} diff --git a/themes/-2_horizon/javascript_discourse_components_composer-peek-mode-toggle.gjs b/themes/-2_horizon/javascript_discourse_components_composer-peek-mode-toggle.gjs new file mode 100644 index 0000000..3934729 --- /dev/null +++ b/themes/-2_horizon/javascript_discourse_components_composer-peek-mode-toggle.gjs @@ -0,0 +1,40 @@ +import Component from "@glimmer/component"; +import { tracked } from "@glimmer/tracking"; +import { action } from "@ember/object"; +import { service } from "@ember/service"; +import bodyClass from "discourse/helpers/body-class"; +import DButton from "discourse/ui-kit/d-button"; + +export default class ComposerPeekModeToggle extends Component { + @service composer; + @service keyValueStore; + + @tracked + peekModeActive = this.keyValueStore.getItem("peekModeActive") === "true"; + + get bodyCssClass() { + return this.peekModeActive && !this.composer.isPreviewVisible + ? "peek-mode-active" + : ""; + } + + @action + togglePeekMode() { + this.peekModeActive = !this.peekModeActive; + this.keyValueStore.setItem("peekModeActive", this.peekModeActive); + if (this.composer.showPreview) { + this.composer.togglePreview(); + } + } + + +} diff --git a/themes/-2_horizon/javascript_discourse_components_experimental-screen.gjs b/themes/-2_horizon/javascript_discourse_components_experimental-screen.gjs new file mode 100644 index 0000000..f445883 --- /dev/null +++ b/themes/-2_horizon/javascript_discourse_components_experimental-screen.gjs @@ -0,0 +1,68 @@ +import Component from "@glimmer/component"; +import { tracked } from "@glimmer/tracking"; +import { action } from "@ember/object"; +import didInsert from "@ember/render-modifiers/modifiers/did-insert"; +import { service } from "@ember/service"; +import { trustHTML } from "@ember/template"; +import { bind } from "discourse/lib/decorators"; + +const DO_NOT_RENDER_LIST = ["login"]; + +export default class ExperimentalScreen extends Component { + @service router; + + @tracked left = 0; + @tracked right = 0; + resizeObserver; + + willDestroy() { + super.willDestroy(...arguments); + this.resizeObserver.disconnect(); + } + + @bind + calculateDistance(element) { + const distance = element.getBoundingClientRect(); + this.left = distance.left; + this.right = distance.right; + } + + get distanceStyles() { + return trustHTML( + `--left-distance: ${this.left}px; --right-distance: ${this.right}px;` + ); + } + + get shouldRender() { + return !DO_NOT_RENDER_LIST.includes(this.router.currentRouteName); + } + + @action + onInsert(element) { + this.calculateDistance(element); + + this.resizeObserver = new ResizeObserver((entries) => { + for (const entry of entries) { + this.calculateDistance(entry.target); + } + }); + + this.resizeObserver.observe(element); + } + + +} diff --git a/themes/-2_horizon/javascript_discourse_components_sidebar-new-topic-button.gjs b/themes/-2_horizon/javascript_discourse_components_sidebar-new-topic-button.gjs new file mode 100644 index 0000000..cfb7328 --- /dev/null +++ b/themes/-2_horizon/javascript_discourse_components_sidebar-new-topic-button.gjs @@ -0,0 +1,139 @@ +import Component from "@glimmer/component"; +import { tracked } from "@glimmer/tracking"; +import { inject as controller } from "@ember/controller"; +import { action } from "@ember/object"; +import didInsert from "@ember/render-modifiers/modifiers/did-insert"; +import didUpdate from "@ember/render-modifiers/modifiers/did-update"; +import willDestroy from "@ember/render-modifiers/modifiers/will-destroy"; +import { service } from "@ember/service"; +import CreateTopicButton from "discourse/components/create-topic-button"; +import bodyClass from "discourse/helpers/body-class"; +import { applyValueTransformer } from "discourse/lib/transformer"; +import { gt } from "discourse/truth-helpers"; + +export default class SidebarNewTopicButton extends Component { + @service composer; + @service currentUser; + @service siteSettings; + @service site; + @service router; + @service header; + @service appEvents; + @service sidebarState; + @controller application; + + @tracked category; + @tracked tag; + + // Keyed on the panel that owns the sidebar rather than on the path: every takeover displaces + // the forum navigation this button is part of, and most have no distinguishing URL prefix. + // `isForcingSidebar` is not equivalent, since a panel can take over without setting it. + get shouldRender() { + return ( + this.currentUser && + this.sidebarState.showMainPanel && + this.application.sidebarEnabled + ); + } + + get canCreateTopic() { + return this.currentUser?.can_create_topic; + } + + get draftCount() { + return this.currentUser?.get("draft_count"); + } + + get createTopicLabel() { + const defaultKey = "topic.create"; + let value = defaultKey; + + if ( + this.site.shared_drafts_category_id && + this.category?.id === this.site.shared_drafts_category_id + ) { + value = "topic.create_shared_draft"; + } + + return applyValueTransformer("create-topic-label", value, { + site: this.site, + defaultKey, + category: this.category, + currentUser: this.currentUser, + }); + } + + get createTopicIcon() { + const defaultIcon = "far-pen-to-square"; + + return applyValueTransformer("create-topic-icon", defaultIcon, { + site: this.site, + defaultIcon, + category: this.category, + currentUser: this.currentUser, + }); + } + + get createTopicTargetCategory() { + let subcategory; + + if ( + !this.category?.canCreateTopic && + this.siteSettings.default_subcategory_on_read_only_category + ) { + subcategory = this.category?.subcategoryWithCreateTopicPermission; + } + + return subcategory ?? this.category; + } + + @action + createNewTopic() { + this.composer.openNewTopic({ + category: this.createTopicTargetCategory, + tags: this.tag?.name, + }); + } + + @action + getCategoryAndTag() { + this.category = this.router.currentRoute.attributes?.category || null; + this.tag = this.router.currentRoute.attributes?.tag || null; + } + + @action + watchForComposer() { + // this covers opening drafts from the hamburger menu + this.appEvents.on("composer:will-open", this, this.closeHamburger); + } + + @action + stopWatchingForComposer() { + this.appEvents.off("composer:will-open", this, this.closeHamburger); + } + + @action + closeHamburger() { + this.header.hamburgerVisible = false; + } + + +} diff --git a/themes/-2_horizon/javascript_discourse_components_user-color-palette-menu-item.gjs b/themes/-2_horizon/javascript_discourse_components_user-color-palette-menu-item.gjs new file mode 100644 index 0000000..333cdd6 --- /dev/null +++ b/themes/-2_horizon/javascript_discourse_components_user-color-palette-menu-item.gjs @@ -0,0 +1,40 @@ +import Component from "@glimmer/component"; +import { action } from "@ember/object"; +import { trustHTML } from "@ember/template"; +import DButton from "discourse/ui-kit/d-button"; +import dConcatClass from "discourse/ui-kit/helpers/d-concat-class"; + +export default class UserColorPaletteMenuItem extends Component { + get siteStyle() { + return `--icon-color: ${this.args.colorPalette.accent}`; + } + + get activeClass() { + if (this.args.selectedColorPaletteId === this.args.colorPalette.id) { + return "active"; + } + } + + @action + paletteSelected() { + this.args.paletteSelected(this.args.colorPalette); + } + + +} diff --git a/themes/-2_horizon/javascript_discourse_components_user-color-palette-selector.gjs b/themes/-2_horizon/javascript_discourse_components_user-color-palette-selector.gjs new file mode 100644 index 0000000..f0eafbb --- /dev/null +++ b/themes/-2_horizon/javascript_discourse_components_user-color-palette-selector.gjs @@ -0,0 +1,212 @@ +import Component from "@glimmer/component"; +import { tracked } from "@glimmer/tracking"; +import { action } from "@ember/object"; +import { service } from "@ember/service"; +import { isEmpty } from "@ember/utils"; +import { Promise } from "rsvp"; +import DMenu from "discourse/float-kit/components/d-menu"; +import { reload } from "discourse/helpers/page-reloader"; +import { ajax } from "discourse/lib/ajax"; +import { + listColorSchemes, + updateColorSchemeCookie, +} from "discourse/lib/color-scheme-picker"; +import cookie from "discourse/lib/cookie"; +import dConcatClass from "discourse/ui-kit/helpers/d-concat-class"; +import dIcon from "discourse/ui-kit/helpers/d-icon"; +import UserColorPaletteMenuItem from "./user-color-palette-menu-item"; + +const HORIZON_PALETTES = [ + "Horizon", + "Marigold", + "Violet", + "Lily", + "Clover", + "Royal", +]; + +export default class UserColorPaletteSelector extends Component { + @service currentUser; + @service site; + @service session; + + @tracked anonColorPaletteId = this.#loadAnonColorPalette(); + @tracked userColorPaletteId = this.session.userColorSchemeId; + @tracked cssLoaded = true; + + get userColorPalettes() { + const availablePalettes = listColorSchemes(this.site) + ?.map((userPalette) => { + const hex = userPalette.colors.find( + (color) => color.name === "tertiary" + )?.hex; + return { + ...userPalette, + accent: hex && `#${hex}`, + }; + }) + .filter((userPalette) => { + return HORIZON_PALETTES.some((palette) => { + return ( + userPalette.name.toLowerCase().includes(palette.toLowerCase()) && + userPalette.accent + ); + }); + }) + .sort(); + + // Match the light scheme with the corresponding dark id based in the name + return ( + availablePalettes + ?.map((palette) => { + if (palette.is_dark) { + return palette; + } + + const normalizedLightName = palette.name.toLowerCase(); + + const correspondingDarkModeId = availablePalettes.find( + (item) => + item.is_dark && + normalizedLightName === + item.name.toLowerCase().replace(/\s+dark$/, "") + )?.id; + + return { + ...palette, + correspondingDarkModeId, + }; + }) + // Only want to show palettes that have corresponding light/dark modes + .filter((palette) => !palette.is_dark) + ); + } + + get selectedColorPaletteId() { + if (this.currentUser) { + return this.userColorPaletteId; + } + + return this.anonColorPaletteId; + } + + @action + onRegisterMenu(api) { + this.dMenu = api; + } + + @action + paletteSelected(selectedPalette) { + if (selectedPalette.id === this.selectedColorPaletteId) { + return; + } + + this.#updatePreference(selectedPalette); + this.#changeSiteColorPalette(selectedPalette); + this.dMenu.close(); + } + + #updatePreference(selectedPalette) { + updateColorSchemeCookie(selectedPalette.id); + updateColorSchemeCookie(selectedPalette.correspondingDarkModeId, { + dark: true, + }); + + if (!this.currentUser) { + this.anonColorPaletteId = selectedPalette.id; + } else { + this.userColorPaletteId = selectedPalette.id; + } + } + + #loadAnonColorPalette() { + const storedAnonPaletteId = cookie("color_scheme_id"); + if (storedAnonPaletteId) { + return parseInt(storedAnonPaletteId, 10); + } + } + + async #changeSiteColorPalette(colorPalette) { + this.cssLoaded = false; + + const lightPaletteId = colorPalette.id; + const darkPaletteId = colorPalette.correspondingDarkModeId; + const darkTag = document.querySelector("link.dark-scheme"); + + // TODO(osama) once we have built-in light/dark modes for each palette, we + // can stop making the 2nd ajax call for the dark palette and replace it + // with a include_dark_scheme param on the ajax call for the light + // palette which will include the href for the dark palette in the response + if (!darkTag) { + reload(); + return; + } + + const lightPaletteInfo = await ajax( + `/color-scheme-stylesheet/${lightPaletteId}/${colorPalette.theme_id}.json` + ); + const darkPaletteInfo = await ajax( + `/color-scheme-stylesheet/${darkPaletteId}/${colorPalette.theme_id}.json` + ); + + Promise.all([ + this.#preloadAndSwapCSS(lightPaletteInfo.new_href, "light-scheme"), + this.#preloadAndSwapCSS(darkPaletteInfo.new_href, "dark-scheme"), + ]).then(() => { + this.cssLoaded = true; + }); + } + + #preloadAndSwapCSS(newHref, existingLinkClass) { + return new Promise((resolve) => { + const existingLink = document.querySelector( + `link[rel='stylesheet'].${existingLinkClass}` + ); + const newTag = document.createElement("link"); + + newTag.rel = "preload"; + newTag.href = newHref; + newTag.as = "style"; + newTag.onload = () => { + existingLink.href = newHref; + newTag.remove(); + resolve(); + }; + + document.head.appendChild(newTag); + }); + } + + +} diff --git a/themes/-2_horizon/javascript_discourse_initializers_topic-list-columns.gjs b/themes/-2_horizon/javascript_discourse_initializers_topic-list-columns.gjs new file mode 100644 index 0000000..f21479d --- /dev/null +++ b/themes/-2_horizon/javascript_discourse_initializers_topic-list-columns.gjs @@ -0,0 +1,228 @@ +import { settings } from "virtual:theme"; +import HeaderTopicCell from "discourse/components/topic-list/header/topic-cell"; +import { withPluginApi } from "discourse/lib/plugin-api"; +import HighContextTopicCard from "../components/card/high-context-topic-card"; +import TopicActivityColumn from "../components/card/topic-activity-column"; +import TopicCategoryColumn from "../components/card/topic-category-column"; +import TopicCreatorColumn from "../components/card/topic-creator-column"; +import TopicRepliesColumn from "../components/card/topic-replies-column"; +import TopicStatusColumn from "../components/card/topic-status-column"; + +const TOPIC_CARD_CONTEXTS = [ + "discovery", + "suggested", + "related", + "group-activity", + "user-activity", +]; + +const SIMPLE_CARD_CONTEXTS = ["suggested", "related"]; + +const isTopicCardContext = ({ listContext, category }) => + TOPIC_CARD_CONTEXTS.includes(listContext) && !category?.doc_index_topic_id; + +const isSimpleCardContext = ({ listContext }) => + SIMPLE_CARD_CONTEXTS.includes(listContext); + +const TopicActivity = ; + +const TopicStatus = ; + +const TopicCategory = ; + +const TopicReplies = ; + +const TopicCreator = ; + +const HighContextCard = ; + +export default { + name: "topic-list-customizations", + + initialize() { + const isHighContext = settings.topic_card_high_context; + + function applySimpleLayout(columns) { + columns.add("topic-status", { + item: TopicStatus, + after: "topic-author", + }); + columns.add("topic-category", { + item: TopicCategory, + after: "topic-status", + }); + columns.add("topic-likes-replies", { + item: TopicReplies, + after: "topic-author-avatar", + }); + columns.add("topic-creator", { + item: TopicCreator, + after: "topic-author-avatar", + }); + + columns.delete("views"); + columns.delete("replies"); + + columns.add("topic-activity", { + item: TopicActivity, + after: "title", + }); + columns.delete("posters"); + columns.delete("activity"); + } + + function applyHighContextLayout(columns) { + columns.delete("topic"); + columns.delete("posters"); + columns.delete("replies"); + columns.delete("views"); + columns.delete("activity"); + columns.add("high-context-card", { + header: HeaderTopicCell, + item: HighContextCard, + }); + } + + withPluginApi((api) => { + api.registerValueTransformer( + "topic-list-class", + ({ value: classes, context }) => { + if (isTopicCardContext(context)) { + classes.push("--d-topic-cards"); + } + return classes; + } + ); + + api.registerValueTransformer( + "topic-list-columns", + ({ value: columns, context }) => { + if (!isTopicCardContext(context)) { + return columns; + } + + isHighContext && !isSimpleCardContext(context) + ? applyHighContextLayout(columns) + : applySimpleLayout(columns); + + return columns; + } + ); + + api.registerValueTransformer( + "topic-list-item-class", + ({ value: classes, context }) => { + if (!isTopicCardContext(context)) { + return classes; + } + + if (isHighContext && !isSimpleCardContext(context)) { + classes.push("--high-context"); + } + + if (context.topic.replyCount) { + classes.push("--has-replies"); + } + + if ( + context.topic.is_hot || + context.topic.pinned || + context.topic.pinned_globally + ) { + classes.push("--has-status-card"); + } + + return classes; + } + ); + + // Disable mobile layout for topic card contexts + api.registerValueTransformer( + "topic-list-item-mobile-layout", + ({ value, context }) => { + if (isTopicCardContext(context)) { + return false; + } + return value; + } + ); + + api.registerBehaviorTransformer( + "topic-list-item-click", + ({ context, next }) => { + const { event, topic, listContext } = context; + + if ( + !isTopicCardContext({ + listContext, + category: topic?.category, + }) + ) { + return next(); + } + + if ( + (event.target.closest("a, button, input") && + !event.target.closest(".topic-excerpt")) || + event.target.closest(".topic-excerpt-more") + ) { + return next(); + } + + event.preventDefault(); + event.stopPropagation(); + + const topicLink = event.target + .closest("tr") + .querySelector("a.raw-topic-link"); + + if (event.button === 1) { + // click events with button=1 can't naturally trigger browser navigation + window.open(topicLink.href, "_blank", "noopener,noreferrer"); + return; + } + + topicLink.dispatchEvent( + new MouseEvent("click", { + ctrlKey: event.ctrlKey, + metaKey: event.metaKey, + shiftKey: event.shiftKey, + button: event.button, + which: event.which, + bubbles: true, + cancelable: true, + }) + ); + } + ); + }); + }, +}; diff --git a/themes/-2_horizon/javascript_discourse_lib_topic-activity.js b/themes/-2_horizon/javascript_discourse_lib_topic-activity.js new file mode 100644 index 0000000..1525868 --- /dev/null +++ b/themes/-2_horizon/javascript_discourse_lib_topic-activity.js @@ -0,0 +1,14 @@ +const UPDATED_AFTER_LAST_POST_THRESHOLD_DAYS = 1; + +export function topicWasUpdatedAfterLastPost(topic) { + const bumpedAt = moment(topic.bumped_at); + const lastPostedAt = moment(topic.last_posted_at); + const bumpedLastPostedDaysDiff = moment + .duration(bumpedAt.diff(lastPostedAt)) + .asDays(); + + return ( + bumpedAt.isAfter(lastPostedAt) && + bumpedLastPostedDaysDiff > UPDATED_AFTER_LAST_POST_THRESHOLD_DAYS + ); +} diff --git a/themes/-2_horizon/javascript_discourse_lib_topic-status-badge.js b/themes/-2_horizon/javascript_discourse_lib_topic-status-badge.js new file mode 100644 index 0000000..48fbc4f --- /dev/null +++ b/themes/-2_horizon/javascript_discourse_lib_topic-status-badge.js @@ -0,0 +1,19 @@ +export function getTopicStatusBadge(topic) { + if (topic.is_hot) { + return { + icon: "fire", + text: "topic_statuses.hot.title", + className: "--hot", + }; + } + + if (topic.pinned || topic.pinned_globally) { + return { + icon: "thumbtack", + text: "topic_statuses.pinned.title", + className: "--pinned", + }; + } + + return null; +} diff --git a/themes/-2_horizon/settings_yaml.yml b/themes/-2_horizon/settings_yaml.yml new file mode 100644 index 0000000..95014f3 --- /dev/null +++ b/themes/-2_horizon/settings_yaml.yml @@ -0,0 +1,3 @@ +topic_card_high_context: + type: bool + default: true diff --git a/themes/-2_horizon/target_7_acceptance_high-context-topic-card-test.gjs b/themes/-2_horizon/target_7_acceptance_high-context-topic-card-test.gjs new file mode 100644 index 0000000..fc48421 --- /dev/null +++ b/themes/-2_horizon/target_7_acceptance_high-context-topic-card-test.gjs @@ -0,0 +1,75 @@ +import { render } from "@ember/test-helpers"; +import { module, test } from "qunit"; +import Topic from "discourse/models/topic"; +import { setupRenderingTest } from "discourse/tests/helpers/component-test"; +import HighContextTopicCard from "../../discourse/components/card/high-context-topic-card"; + +function topicFor(attrs = {}) { + return Topic.create({ + id: 1, + title: "How do cards work?", + fancy_title: "How do cards work?", + created_at: "2024-06-01T08:00:00Z", + bumped_at: "2024-06-01T18:00:00Z", + last_posted_at: "2024-06-01T12:00:00Z", + last_poster_username: "alice", + posts_count: 3, + like_count: 0, + tags: [], + posters: [ + { + extras: "latest single", + user: { + id: 1, + username: "alice", + name: "Alice", + avatar_template: "/letter_avatar_proxy/v4/letter/a/{size}.png", + }, + }, + ], + ...attrs, + }); +} + +module( + "Horizon | Integration | Component | Card | HighContextTopicCard", + function (hooks) { + setupRenderingTest(hooks); + + test("shows the last reply line with the actual reply time when a reply is recent", async function (assert) { + const lastPostedAt = "2024-06-01T12:00:00Z"; + const topic = topicFor({ + bumped_at: "2024-06-01T18:00:00Z", + last_posted_at: lastPostedAt, + }); + + await render( + + ); + + assert.dom(".hc-topic-card__last-reply").exists(); + assert.dom(".hc-topic-card__last-reply-name").hasText("alice"); + assert + .dom(".hc-topic-card__time .relative-date") + .hasAttribute("data-time", String(new Date(lastPostedAt).getTime())); + }); + + test("hides the last reply line when the topic was bumped more than a day after the last post", async function (assert) { + const topic = topicFor({ + bumped_at: "2024-06-10T12:00:00Z", + last_posted_at: "2024-06-01T12:00:00Z", + }); + + await render( + + ); + + assert.dom(".hc-topic-card__last-reply").doesNotExist(); + assert.dom(".hc-topic-card__context").doesNotExist(); + }); + } +); diff --git a/themes/-2_horizon/target_7_acceptance_nested-suggested-navigation-test.gjs b/themes/-2_horizon/target_7_acceptance_nested-suggested-navigation-test.gjs new file mode 100644 index 0000000..0057a23 --- /dev/null +++ b/themes/-2_horizon/target_7_acceptance_nested-suggested-navigation-test.gjs @@ -0,0 +1,189 @@ +import { click, currentURL, visit } from "@ember/test-helpers"; +import { test } from "qunit"; +import { acceptance } from "discourse/tests/helpers/qunit-helpers"; + +function topicAttrs(id, slug, title) { + return { + id, + slug, + title, + fancy_title: title, + posts_count: 4, + reply_count: 3, + highest_post_number: 4, + last_read_post_number: 4, + last_poster_username: "alice", + bumped_at: "2024-06-01T12:00:00.000Z", + last_posted_at: "2024-06-01T12:00:00.000Z", + created_at: "2024-06-01T10:00:00.000Z", + category_id: 1, + visible: true, + closed: false, + archived: false, + pinned: false, + pinned_globally: false, + deleted_at: null, + archetype: "regular", + details: { can_create_post: true, notification_level: 1 }, + is_nested_view: true, + }; +} + +function postAttrs(topic, postNumber, id, cooked, replyToPostNumber = null) { + return { + id, + topic_id: topic.id, + topic_slug: topic.slug, + post_number: postNumber, + reply_to_post_number: replyToPostNumber, + username: "alice", + name: "Alice", + avatar_template: "/letter_avatar_proxy/v4/letter/a/{size}.png", + cooked: `

${cooked}

`, + created_at: "2024-06-01T10:00:00.000Z", + updated_at: "2024-06-01T10:00:00.000Z", + post_type: 1, + can_edit: true, + can_delete: false, + actions_summary: [], + reply_count: 0, + reads: 1, + read: true, + yours: false, + }; +} + +function nestedResponse({ id, slug, title, marker, suggestedTopic }) { + const topic = topicAttrs(id, slug, title); + const opPost = postAttrs(topic, 1, id * 10 + 1, `${marker} op`); + const firstReply = postAttrs( + topic, + 2, + id * 10 + 2, + `${marker} first branch`, + 1 + ); + const childOne = postAttrs(topic, 3, id * 10 + 3, `${marker} child one`, 2); + const childTwo = postAttrs(topic, 4, id * 10 + 4, `${marker} child two`, 2); + + return { + topic, + op_post: opPost, + roots: [ + { + ...firstReply, + reply_count: 2, + direct_reply_count: 2, + total_descendant_count: 2, + children: [childOne, childTwo], + }, + ], + page: 0, + has_more_roots: false, + sort: "old", + pinned_post_ids: [], + message_bus_last_id: id, + suggested_topics: suggestedTopic ? [suggestedTopic] : [], + }; +} + +function topicViewResponse(id, slug, title) { + const topic = topicAttrs(id, slug, title); + const opPost = postAttrs(topic, 1, id * 10 + 1, `${title} op`); + + return { + ...topic, + post_stream: { + posts: [opPost], + stream: [opPost.id], + }, + timeline_lookup: [[1, 0]], + }; +} + +acceptance("Horizon | Nested suggested topic navigation", function (needs) { + needs.user(); + needs.settings({ + nested_replies_enabled: true, + nested_replies_default_sort: "old", + }); + + needs.pretender((server, helper) => { + const firstTopicSuggestion = topicAttrs( + 102, + "second-nested-topic", + "Second nested topic" + ); + const secondTopicSuggestion = topicAttrs( + 101, + "first-nested-topic", + "First nested topic" + ); + + server.get("/t/101.json", () => + helper.response( + topicViewResponse(101, "first-nested-topic", "First nested topic") + ) + ); + + server.get("/t/102.json", () => + helper.response( + topicViewResponse(102, "second-nested-topic", "Second nested topic") + ) + ); + + server.get("/n/first-nested-topic/101.json", () => + helper.response( + nestedResponse({ + id: 101, + slug: "first-nested-topic", + title: "First nested topic", + marker: "FIRST_TOPIC_UNIQUE", + suggestedTopic: firstTopicSuggestion, + }) + ) + ); + + server.get("/n/second-nested-topic/102.json", () => + helper.response( + nestedResponse({ + id: 102, + slug: "second-nested-topic", + title: "Second nested topic", + marker: "SECOND_TOPIC_UNIQUE", + suggestedTopic: secondTopicSuggestion, + }) + ) + ); + }); + + test("row-clicking a suggested nested topic replaces the old root branch", async function (assert) { + await visit("/t/first-nested-topic/101"); + + assert + .dom(".nested-view__roots") + .includesText("FIRST_TOPIC_UNIQUE first branch"); + assert + .dom(".nested-view__roots") + .includesText("FIRST_TOPIC_UNIQUE child one"); + assert + .dom("#suggested-topics .topic-list-item") + .exists("renders suggested topics with Horizon's card row behavior"); + + await click("#suggested-topics .topic-list-item"); + + assert.strictEqual(currentURL(), "/t/second-nested-topic/102?sort=old"); + assert + .dom(".nested-view__roots") + .includesText("SECOND_TOPIC_UNIQUE first branch"); + assert + .dom(".nested-view__roots") + .includesText("SECOND_TOPIC_UNIQUE child one"); + assert + .dom(".nested-view__roots") + .doesNotIncludeText("FIRST_TOPIC_UNIQUE first branch"); + assert + .dom(".nested-view__roots") + .doesNotIncludeText("FIRST_TOPIC_UNIQUE child one"); + }); +}); diff --git a/themes/-2_horizon/target_7_acceptance_sidebar-new-topic-button-test.gjs b/themes/-2_horizon/target_7_acceptance_sidebar-new-topic-button-test.gjs new file mode 100644 index 0000000..4e22324 --- /dev/null +++ b/themes/-2_horizon/target_7_acceptance_sidebar-new-topic-button-test.gjs @@ -0,0 +1,46 @@ +import { render } from "@ember/test-helpers"; +import { module, test } from "qunit"; +import sinon from "sinon"; +import { ADMIN_PANEL, MAIN_PANEL } from "discourse/lib/sidebar/panels"; +import { setupRenderingTest } from "discourse/tests/helpers/component-test"; +import SidebarNewTopicButton from "../../discourse/components/sidebar-new-topic-button"; + +module( + "Horizon | Integration | Component | SidebarNewTopicButton", + function (hooks) { + // stubRouter supplies the currentRoute the button reads to pre-fill a category or tag. + setupRenderingTest(hooks, { stubRouter: true }); + + hooks.beforeEach(function () { + // Both of these gate rendering on their own, so without them the negative assertion below + // would pass no matter what the panel is. `sidebarEnabled` is a getter and has to be + // stubbed rather than set. + sinon + .stub(this.owner.lookup("controller:application"), "sidebarEnabled") + .get(() => true); + this.currentUser.set("can_create_topic", true); + + // A plain forum path. The panel, not the path, is what should decide this, so the + // assertions below have to hold on a URL that looks like ordinary browsing. + this.owner.lookup("service:router").currentURL = "/latest"; + }); + + test("renders while the forum panel owns the sidebar", async function (assert) { + this.owner.lookup("service:sidebar-state").setPanel(MAIN_PANEL); + + await render(); + + assert.dom(".sidebar-new-topic-button__wrapper").exists(); + }); + + // Rendering happens without a URL, so nothing here can be hidden by matching a path. Admin + // stands in for every takeover, which all claim the sidebar the same way. + test("is hidden while another panel owns the sidebar", async function (assert) { + this.owner.lookup("service:sidebar-state").setPanel(ADMIN_PANEL); + + await render(); + + assert.dom(".sidebar-new-topic-button__wrapper").doesNotExist(); + }); + } +); diff --git a/themes/-2_horizon/target_7_acceptance_topic-activity-column-test.gjs b/themes/-2_horizon/target_7_acceptance_topic-activity-column-test.gjs new file mode 100644 index 0000000..7072ae2 --- /dev/null +++ b/themes/-2_horizon/target_7_acceptance_topic-activity-column-test.gjs @@ -0,0 +1,66 @@ +import { render } from "@ember/test-helpers"; +import { module, test } from "qunit"; +import Topic from "discourse/models/topic"; +import { setupRenderingTest } from "discourse/tests/helpers/component-test"; +import TopicActivityColumn from "../../discourse/components/card/topic-activity-column"; + +module( + "Horizon | Integration | Component | Card | TopicActivityColumn", + function (hooks) { + setupRenderingTest(hooks); + + test("formats the bumpedAt date", async function (assert) { + const topic = Topic.create({ + id: 1, + bumped_at: "2024-06-01T12:00:00Z", + }); + await render( + + ); + assert.dom(".topic-activity__time").hasText("Jun 2024"); + }); + + test("has the correct user details and class when there is only one post", async function (assert) { + const topic = Topic.create({ + id: 1, + bumped_at: "2024-06-01T12:00:00Z", + posts_count: 1, + last_poster_username: "bob", + }); + await render( + + ); + assert.dom(".topic-activity.--created").exists(); + assert.dom(".topic-activity__username").hasText("bob"); + }); + + test("has the correct user details and class when there are multiple posts", async function (assert) { + const topic = Topic.create({ + id: 1, + bumped_at: "2024-06-01T12:00:00Z", + posts_count: 3, + last_poster_username: "alice", + }); + await render( + + ); + assert.dom(".topic-activity.--replied").exists(); + assert.dom(".topic-activity__username").hasText("alice"); + }); + + test("shows no user and the updated class when the topic was bumped long after the last post", async function (assert) { + const topic = Topic.create({ + id: 1, + bumped_at: "2024-06-10T12:00:00Z", + last_posted_at: "2024-06-01T12:00:00Z", + posts_count: 3, + last_poster_username: "alice", + }); + await render( + + ); + assert.dom(".topic-activity.--updated").exists(); + assert.dom(".topic-activity__username").doesNotExist(); + }); + } +); diff --git a/themes/-2_horizon/target_7_integration_helpers_action-test.js b/themes/-2_horizon/target_7_integration_helpers_action-test.js new file mode 100644 index 0000000..5f0e483 --- /dev/null +++ b/themes/-2_horizon/target_7_integration_helpers_action-test.js @@ -0,0 +1,66 @@ +// eslint-disable-next-line ember/no-classic-components +import Component from "@ember/component"; +import { action } from "@ember/object"; +import { click, render } from "@ember/test-helpers"; +import { hbs } from "ember-cli-htmlbars"; +import { module, test } from "qunit"; +import { withSilencedDeprecationsAsync } from "discourse/lib/deprecated"; +import { setupRenderingTest } from "discourse/tests/helpers/component-test"; + +class FooString extends Component { + layout = hbs``; + + @action + bar(value) { + this.callback(value); + } +} + +class FooReference extends Component { + layout = hbs``; + + @action + bar() { + this.callback(); + } +} + +// This is a core test but has to be in a theme since the transform +// (that injects `this` into actions' params) is applied only to +// themes and plugins +module("Integration | Helper | action", function (hooks) { + setupRenderingTest(hooks); + + test("string argument", async function (assert) { + this.registry.register("component:foo", FooString); + this.callback = (value) => { + assert.step("called"); + assert.strictEqual(value, 123); + }; + + await withSilencedDeprecationsAsync( + "discourse.template-action", + async () => { + await render(hbs``); + } + ); + + await click("button"); + assert.verifySteps(["called"]); + }); + + test("reference argument", async function (assert) { + this.registry.register("component:foo", FooReference); + this.callback = () => assert.step("called"); + + await withSilencedDeprecationsAsync( + "discourse.template-action", + async () => { + await render(hbs``); + } + ); + + await click("button"); + assert.verifySteps(["called"]); + }); +}); diff --git a/themes/-2_horizon/target_8_0001-convert-topic-card-context-to-boolean.txt b/themes/-2_horizon/target_8_0001-convert-topic-card-context-to-boolean.txt new file mode 100644 index 0000000..1e1b96d --- /dev/null +++ b/themes/-2_horizon/target_8_0001-convert-topic-card-context-to-boolean.txt @@ -0,0 +1,7 @@ +export default function migrate(settings) { + if (settings.get("topic_card_context") === "high_context") { + settings.set("topic_card_high_context", true); + } + settings.delete("topic_card_context"); + return settings; +} diff --git a/themes/-2_horizon/theme.json b/themes/-2_horizon/theme.json new file mode 100644 index 0000000..3b1d0b9 --- /dev/null +++ b/themes/-2_horizon/theme.json @@ -0,0 +1,881 @@ +{ + "id": -2, + "name": "Horizon", + "user_selectable": false, + "color_scheme": null, + "fields_count": 109, + "files": [ + { + "field_id": 566, + "target_id": 0, + "target_name": "common", + "name": "color_definitions", + "filename": "common_color_definitions.txt", + "bytes": 4215 + }, + { + "field_id": 564, + "target_id": 0, + "target_name": "common", + "name": "screenshot_dark", + "filename": "common_screenshot_dark.txt", + "bytes": 0 + }, + { + "field_id": 563, + "target_id": 0, + "target_name": "common", + "name": "screenshot_light", + "filename": "common_screenshot_light.txt", + "bytes": 0 + }, + { + "field_id": 567, + "target_id": 0, + "target_name": "common", + "name": "scss", + "filename": "common_scss.scss", + "bytes": 595 + }, + { + "field_id": 569, + "target_id": 1, + "target_name": "desktop", + "name": "scss", + "filename": "desktop_scss.scss", + "bytes": 63 + }, + { + "field_id": 700, + "target_id": 3, + "target_name": "settings", + "name": "yaml", + "filename": "settings_yaml.yml", + "bytes": 54 + }, + { + "field_id": 588, + "target_id": 4, + "target_name": "translations", + "name": "ar", + "filename": "translations_ar.txt", + "bytes": 1190 + }, + { + "field_id": 589, + "target_id": 4, + "target_name": "translations", + "name": "be", + "filename": "translations_be.txt", + "bytes": 218 + }, + { + "field_id": 590, + "target_id": 4, + "target_name": "translations", + "name": "bg", + "filename": "translations_bg.txt", + "bytes": 362 + }, + { + "field_id": 591, + "target_id": 4, + "target_name": "translations", + "name": "bs_BA", + "filename": "translations_bs_BA.txt", + "bytes": 447 + }, + { + "field_id": 592, + "target_id": 4, + "target_name": "translations", + "name": "ca", + "filename": "translations_ca.txt", + "bytes": 461 + }, + { + "field_id": 593, + "target_id": 4, + "target_name": "translations", + "name": "cs", + "filename": "translations_cs.txt", + "bytes": 840 + }, + { + "field_id": 594, + "target_id": 4, + "target_name": "translations", + "name": "da", + "filename": "translations_da.txt", + "bytes": 452 + }, + { + "field_id": 595, + "target_id": 4, + "target_name": "translations", + "name": "de", + "filename": "translations_de.yml", + "bytes": 964 + }, + { + "field_id": 596, + "target_id": 4, + "target_name": "translations", + "name": "el", + "filename": "translations_el.txt", + "bytes": 752 + }, + { + "field_id": 597, + "target_id": 4, + "target_name": "translations", + "name": "en", + "filename": "translations_en.yml", + "bytes": 650 + }, + { + "field_id": 598, + "target_id": 4, + "target_name": "translations", + "name": "en_GB", + "filename": "translations_en_GB.txt", + "bytes": 200 + }, + { + "field_id": 599, + "target_id": 4, + "target_name": "translations", + "name": "es", + "filename": "translations_es.txt", + "bytes": 675 + }, + { + "field_id": 600, + "target_id": 4, + "target_name": "translations", + "name": "et", + "filename": "translations_et.txt", + "bytes": 315 + }, + { + "field_id": 601, + "target_id": 4, + "target_name": "translations", + "name": "fa_IR", + "filename": "translations_fa_IR.txt", + "bytes": 444 + }, + { + "field_id": 602, + "target_id": 4, + "target_name": "translations", + "name": "fi", + "filename": "translations_fi.txt", + "bytes": 634 + }, + { + "field_id": 603, + "target_id": 4, + "target_name": "translations", + "name": "fr", + "filename": "translations_fr.txt", + "bytes": 971 + }, + { + "field_id": 604, + "target_id": 4, + "target_name": "translations", + "name": "gl", + "filename": "translations_gl.txt", + "bytes": 398 + }, + { + "field_id": 605, + "target_id": 4, + "target_name": "translations", + "name": "he", + "filename": "translations_he.txt", + "bytes": 710 + }, + { + "field_id": 606, + "target_id": 4, + "target_name": "translations", + "name": "hr", + "filename": "translations_hr.txt", + "bytes": 532 + }, + { + "field_id": 607, + "target_id": 4, + "target_name": "translations", + "name": "hu", + "filename": "translations_hu.txt", + "bytes": 658 + }, + { + "field_id": 608, + "target_id": 4, + "target_name": "translations", + "name": "hy", + "filename": "translations_hy.txt", + "bytes": 318 + }, + { + "field_id": 609, + "target_id": 4, + "target_name": "translations", + "name": "id", + "filename": "translations_id.txt", + "bytes": 325 + }, + { + "field_id": 610, + "target_id": 4, + "target_name": "translations", + "name": "it", + "filename": "translations_it.txt", + "bytes": 621 + }, + { + "field_id": 611, + "target_id": 4, + "target_name": "translations", + "name": "ja", + "filename": "translations_ja.txt", + "bytes": 514 + }, + { + "field_id": 612, + "target_id": 4, + "target_name": "translations", + "name": "ko", + "filename": "translations_ko.txt", + "bytes": 347 + }, + { + "field_id": 613, + "target_id": 4, + "target_name": "translations", + "name": "lt", + "filename": "translations_lt.txt", + "bytes": 508 + }, + { + "field_id": 614, + "target_id": 4, + "target_name": "translations", + "name": "lv", + "filename": "translations_lv.txt", + "bytes": 324 + }, + { + "field_id": 615, + "target_id": 4, + "target_name": "translations", + "name": "nb_NO", + "filename": "translations_nb_NO.txt", + "bytes": 304 + }, + { + "field_id": 616, + "target_id": 4, + "target_name": "translations", + "name": "nl", + "filename": "translations_nl.txt", + "bytes": 662 + }, + { + "field_id": 617, + "target_id": 4, + "target_name": "translations", + "name": "pl_PL", + "filename": "translations_pl_PL.txt", + "bytes": 1087 + }, + { + "field_id": 618, + "target_id": 4, + "target_name": "translations", + "name": "pt", + "filename": "translations_pt.txt", + "bytes": 455 + }, + { + "field_id": 619, + "target_id": 4, + "target_name": "translations", + "name": "pt_BR", + "filename": "translations_pt_BR.txt", + "bytes": 672 + }, + { + "field_id": 620, + "target_id": 4, + "target_name": "translations", + "name": "ro", + "filename": "translations_ro.txt", + "bytes": 609 + }, + { + "field_id": 621, + "target_id": 4, + "target_name": "translations", + "name": "ru", + "filename": "translations_ru.txt", + "bytes": 1032 + }, + { + "field_id": 622, + "target_id": 4, + "target_name": "translations", + "name": "sk", + "filename": "translations_sk.txt", + "bytes": 771 + }, + { + "field_id": 623, + "target_id": 4, + "target_name": "translations", + "name": "sl", + "filename": "translations_sl.txt", + "bytes": 497 + }, + { + "field_id": 624, + "target_id": 4, + "target_name": "translations", + "name": "sq", + "filename": "translations_sq.txt", + "bytes": 294 + }, + { + "field_id": 625, + "target_id": 4, + "target_name": "translations", + "name": "sr", + "filename": "translations_sr.txt", + "bytes": 318 + }, + { + "field_id": 626, + "target_id": 4, + "target_name": "translations", + "name": "sv", + "filename": "translations_sv.txt", + "bytes": 482 + }, + { + "field_id": 627, + "target_id": 4, + "target_name": "translations", + "name": "sw", + "filename": "translations_sw.txt", + "bytes": 312 + }, + { + "field_id": 628, + "target_id": 4, + "target_name": "translations", + "name": "te", + "filename": "translations_te.txt", + "bytes": 381 + }, + { + "field_id": 629, + "target_id": 4, + "target_name": "translations", + "name": "th", + "filename": "translations_th.txt", + "bytes": 282 + }, + { + "field_id": 630, + "target_id": 4, + "target_name": "translations", + "name": "tr_TR", + "filename": "translations_tr_TR.txt", + "bytes": 655 + }, + { + "field_id": 631, + "target_id": 4, + "target_name": "translations", + "name": "ug", + "filename": "translations_ug.txt", + "bytes": 568 + }, + { + "field_id": 632, + "target_id": 4, + "target_name": "translations", + "name": "uk", + "filename": "translations_uk.txt", + "bytes": 1070 + }, + { + "field_id": 633, + "target_id": 4, + "target_name": "translations", + "name": "ur", + "filename": "translations_ur.txt", + "bytes": 582 + }, + { + "field_id": 634, + "target_id": 4, + "target_name": "translations", + "name": "vi", + "filename": "translations_vi.txt", + "bytes": 608 + }, + { + "field_id": 635, + "target_id": 4, + "target_name": "translations", + "name": "zh_CN", + "filename": "translations_zh_CN.txt", + "bytes": 604 + }, + { + "field_id": 636, + "target_id": 4, + "target_name": "translations", + "name": "zh_TW", + "filename": "translations_zh_TW.txt", + "bytes": 348 + }, + { + "field_id": 638, + "target_id": 5, + "target_name": "extra_scss", + "name": "buttons", + "filename": "extra_scss_buttons.txt", + "bytes": 2538 + }, + { + "field_id": 639, + "target_id": 5, + "target_name": "extra_scss", + "name": "categories-view", + "filename": "extra_scss_categories-view.txt", + "bytes": 7235 + }, + { + "field_id": 640, + "target_id": 5, + "target_name": "extra_scss", + "name": "chat", + "filename": "extra_scss_chat.txt", + "bytes": 2352 + }, + { + "field_id": 641, + "target_id": 5, + "target_name": "extra_scss", + "name": "color-choice", + "filename": "extra_scss_color-choice.txt", + "bytes": 633 + }, + { + "field_id": 694, + "target_id": 5, + "target_name": "extra_scss", + "name": "compatibility", + "filename": "extra_scss_compatibility.txt", + "bytes": 1612 + }, + { + "field_id": 644, + "target_id": 5, + "target_name": "extra_scss", + "name": "composer", + "filename": "extra_scss_composer.txt", + "bytes": 2155 + }, + { + "field_id": 643, + "target_id": 5, + "target_name": "extra_scss", + "name": "composer-peek-mode", + "filename": "extra_scss_composer-peek-mode.txt", + "bytes": 1600 + }, + { + "field_id": 645, + "target_id": 5, + "target_name": "extra_scss", + "name": "desktop-full-width", + "filename": "extra_scss_desktop-full-width.txt", + "bytes": 5378 + }, + { + "field_id": 646, + "target_id": 5, + "target_name": "extra_scss", + "name": "desktop-horizon-fixes", + "filename": "extra_scss_desktop-horizon-fixes.txt", + "bytes": 1388 + }, + { + "field_id": 758, + "target_id": 5, + "target_name": "extra_scss", + "name": "discourse-events", + "filename": "extra_scss_discourse-events.txt", + "bytes": 93 + }, + { + "field_id": 697, + "target_id": 5, + "target_name": "extra_scss", + "name": "experimental-screen", + "filename": "extra_scss_experimental-screen.txt", + "bytes": 3979 + }, + { + "field_id": 647, + "target_id": 5, + "target_name": "extra_scss", + "name": "header", + "filename": "extra_scss_header.html", + "bytes": 1843 + }, + { + "field_id": 648, + "target_id": 5, + "target_name": "extra_scss", + "name": "hiddenstuff", + "filename": "extra_scss_hiddenstuff.txt", + "bytes": 352 + }, + { + "field_id": 699, + "target_id": 5, + "target_name": "extra_scss", + "name": "high-context-cards", + "filename": "extra_scss_high-context-cards.txt", + "bytes": 6945 + }, + { + "field_id": 649, + "target_id": 5, + "target_name": "extra_scss", + "name": "login", + "filename": "extra_scss_login.txt", + "bytes": 278 + }, + { + "field_id": 650, + "target_id": 5, + "target_name": "extra_scss", + "name": "main", + "filename": "extra_scss_main.txt", + "bytes": 2999 + }, + { + "field_id": 651, + "target_id": 5, + "target_name": "extra_scss", + "name": "misc", + "filename": "extra_scss_misc.txt", + "bytes": 3140 + }, + { + "field_id": 652, + "target_id": 5, + "target_name": "extra_scss", + "name": "mobile-stuff", + "filename": "extra_scss_mobile-stuff.txt", + "bytes": 4905 + }, + { + "field_id": 653, + "target_id": 5, + "target_name": "extra_scss", + "name": "nav-pills", + "filename": "extra_scss_nav-pills.txt", + "bytes": 1440 + }, + { + "field_id": 655, + "target_id": 5, + "target_name": "extra_scss", + "name": "sidebar", + "filename": "extra_scss_sidebar.txt", + "bytes": 2175 + }, + { + "field_id": 654, + "target_id": 5, + "target_name": "extra_scss", + "name": "sidebar-new-topic-button", + "filename": "extra_scss_sidebar-new-topic-button.txt", + "bytes": 2552 + }, + { + "field_id": 657, + "target_id": 5, + "target_name": "extra_scss", + "name": "topic", + "filename": "extra_scss_topic.txt", + "bytes": 2673 + }, + { + "field_id": 656, + "target_id": 5, + "target_name": "extra_scss", + "name": "topic-cards", + "filename": "extra_scss_topic-cards.txt", + "bytes": 13815 + }, + { + "field_id": 703, + "target_id": 5, + "target_name": "extra_scss", + "name": "topic-voting", + "filename": "extra_scss_topic-voting.txt", + "bytes": 691 + }, + { + "field_id": 658, + "target_id": 5, + "target_name": "extra_scss", + "name": "variables", + "filename": "extra_scss_variables.txt", + "bytes": 126 + }, + { + "field_id": 659, + "target_id": 5, + "target_name": "extra_scss", + "name": "welcome-banner", + "filename": "extra_scss_welcome-banner.txt", + "bytes": 2666 + }, + { + "field_id": 570, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/api-initializers/composer-peek-toggle-connector.js", + "filename": "javascript_discourse_api-initializers_composer-peek-toggle-connector.js", + "bytes": 249 + }, + { + "field_id": 571, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/api-initializers/full-width-logo-behavior.js", + "filename": "javascript_discourse_api-initializers_full-width-logo-behavior.js", + "bytes": 433 + }, + { + "field_id": 572, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/api-initializers/hamburger-click-outside-transformer.js", + "filename": "javascript_discourse_api-initializers_hamburger-click-outside-transformer.js", + "bytes": 268 + }, + { + "field_id": 573, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/api-initializers/horizon.gjs", + "filename": "javascript_discourse_api-initializers_horizon.gjs", + "bytes": 388 + }, + { + "field_id": 574, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/api-initializers/reposition-bulk-select.js", + "filename": "javascript_discourse_api-initializers_reposition-bulk-select.js", + "bytes": 191 + }, + { + "field_id": 575, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/api-initializers/sidebar-new-topic-button-connector.js", + "filename": "javascript_discourse_api-initializers_sidebar-new-topic-button-connector.js", + "bytes": 246 + }, + { + "field_id": 698, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/components/card/high-context-topic-card.gjs", + "filename": "javascript_discourse_components_card_high-context-topic-card.gjs", + "bytes": 10326 + }, + { + "field_id": 576, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/components/card/topic-activity-column.gjs", + "filename": "javascript_discourse_components_card_topic-activity-column.gjs", + "bytes": 1261 + }, + { + "field_id": 577, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/components/card/topic-category-column.gjs", + "filename": "javascript_discourse_components_card_topic-category-column.gjs", + "bytes": 206 + }, + { + "field_id": 578, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/components/card/topic-creator-column.gjs", + "filename": "javascript_discourse_components_card_topic-creator-column.gjs", + "bytes": 422 + }, + { + "field_id": 579, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/components/card/topic-likes-column.gjs", + "filename": "javascript_discourse_components_card_topic-likes-column.gjs", + "bytes": 423 + }, + { + "field_id": 580, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/components/card/topic-replies-column.gjs", + "filename": "javascript_discourse_components_card_topic-replies-column.gjs", + "bytes": 495 + }, + { + "field_id": 581, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/components/card/topic-status-column.gjs", + "filename": "javascript_discourse_components_card_topic-status-column.gjs", + "bytes": 576 + }, + { + "field_id": 582, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/components/composer-peek-mode-toggle.gjs", + "filename": "javascript_discourse_components_composer-peek-mode-toggle.gjs", + "bytes": 1133 + }, + { + "field_id": 583, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/components/experimental-screen.gjs", + "filename": "javascript_discourse_components_experimental-screen.gjs", + "bytes": 1789 + }, + { + "field_id": 584, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/components/sidebar-new-topic-button.gjs", + "filename": "javascript_discourse_components_sidebar-new-topic-button.gjs", + "bytes": 4012 + }, + { + "field_id": 585, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/components/user-color-palette-menu-item.gjs", + "filename": "javascript_discourse_components_user-color-palette-menu-item.gjs", + "bytes": 1072 + }, + { + "field_id": 586, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/components/user-color-palette-selector.gjs", + "filename": "javascript_discourse_components_user-color-palette-selector.gjs", + "bytes": 6203 + }, + { + "field_id": 587, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/initializers/topic-list-columns.gjs", + "filename": "javascript_discourse_initializers_topic-list-columns.gjs", + "bytes": 6184 + }, + { + "field_id": 753, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/lib/topic-activity.js", + "filename": "javascript_discourse_lib_topic-activity.js", + "bytes": 429 + }, + { + "field_id": 702, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/lib/topic-status-badge.js", + "filename": "javascript_discourse_lib_topic-status-badge.js", + "bytes": 364 + }, + { + "field_id": 754, + "target_id": 7, + "target_name": "target_7", + "name": "acceptance/high-context-topic-card-test.gjs", + "filename": "target_7_acceptance_high-context-topic-card-test.gjs", + "bytes": 2297 + }, + { + "field_id": 755, + "target_id": 7, + "target_name": "target_7", + "name": "acceptance/nested-suggested-navigation-test.gjs", + "filename": "target_7_acceptance_nested-suggested-navigation-test.gjs", + "bytes": 5037 + }, + { + "field_id": 757, + "target_id": 7, + "target_name": "target_7", + "name": "acceptance/sidebar-new-topic-button-test.gjs", + "filename": "target_7_acceptance_sidebar-new-topic-button-test.gjs", + "bytes": 2051 + }, + { + "field_id": 695, + "target_id": 7, + "target_name": "target_7", + "name": "acceptance/topic-activity-column-test.gjs", + "filename": "target_7_acceptance_topic-activity-column-test.gjs", + "bytes": 2329 + }, + { + "field_id": 696, + "target_id": 7, + "target_name": "target_7", + "name": "integration/helpers/action-test.js", + "filename": "target_7_integration_helpers_action-test.js", + "bytes": 1870 + }, + { + "field_id": 701, + "target_id": 8, + "target_name": "target_8", + "name": "0001-convert-topic-card-context-to-boolean", + "filename": "target_8_0001-convert-topic-card-context-to-boolean.txt", + "bytes": 224 + }, + { + "field_id": 565, + "target_id": 9, + "target_name": "about", + "name": "about", + "filename": "about_about.yml", + "bytes": 3927 + } + ] +} \ No newline at end of file diff --git a/themes/-2_horizon/translations_ar.txt b/themes/-2_horizon/translations_ar.txt new file mode 100644 index 0000000..562ff58 --- /dev/null +++ b/themes/-2_horizon/translations_ar.txt @@ -0,0 +1,38 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +ar: + solved: "تم الحل" + unsolved: "لم يُحل بعد" + posted: "تم النشر" + by_username: "من قِبل @%{username}" + replied: "تم الرد" + vote_count: + zero: "%{count} من الأصوات" + one: "صوت واحد %{count}" + two: "صوتان %{count}" + few: "%{count} أصوات" + many: "%{count} صوتًا" + other: "%{count} صوت" + like_count: + zero: "%{count} من الإعجابات" + one: "إعجاب واحد (%{count})" + two: "إعجابان (%{count})" + few: "%{count} إعجابات" + many: "%{count} إعجابًا" + other: "%{count} إعجاب" + reply_count: + zero: "%{count} من الردود" + one: "رد واحد (%{count})" + two: "ردَّان (%{count})" + few: "%{count} ردود" + many: "%{count} ردًا" + other: "%{count} رد" + theme_metadata: + description: "سمة سهلة وجذابة تسهم في تحسين تجربة التشغيل الافتراضية لمواقع Discourse." + settings: + topic_card_high_context: + description: "عند تفعيله، يعرض السياق الإضافي على بطاقات الموضوعات، بما في ذلك الوسوم والمقتطفات وحالة الحل والمستخدمين المعيَّنين وأعداد الأصوات" diff --git a/themes/-2_horizon/translations_be.txt b/themes/-2_horizon/translations_be.txt new file mode 100644 index 0000000..c57dfc9 --- /dev/null +++ b/themes/-2_horizon/translations_be.txt @@ -0,0 +1,8 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +be: + posted: "адправіў" diff --git a/themes/-2_horizon/translations_bg.txt b/themes/-2_horizon/translations_bg.txt new file mode 100644 index 0000000..0c0bdf0 --- /dev/null +++ b/themes/-2_horizon/translations_bg.txt @@ -0,0 +1,14 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +bg: + posted: "публикувано" + vote_count: + one: "%{count} глас" + other: "%{count} гласа" + reply_count: + one: "%{count} отговор" + other: "%{count} отговора" diff --git a/themes/-2_horizon/translations_bs_BA.txt b/themes/-2_horizon/translations_bs_BA.txt new file mode 100644 index 0000000..67a45b2 --- /dev/null +++ b/themes/-2_horizon/translations_bs_BA.txt @@ -0,0 +1,17 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +bs_BA: + solved: "Riješeno" + posted: "zadnja objava" + vote_count: + one: "%{count} glas" + few: "%{count} glasova" + other: "%{count} glasova" + reply_count: + one: "%{count} odgovor" + few: "%{count} odgovora" + other: "%{count} odgovora" diff --git a/themes/-2_horizon/translations_ca.txt b/themes/-2_horizon/translations_ca.txt new file mode 100644 index 0000000..f6648c0 --- /dev/null +++ b/themes/-2_horizon/translations_ca.txt @@ -0,0 +1,18 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +ca: + solved: "Solucionat" + posted: "publicat" + vote_count: + one: " %{count} vot" + other: "%{count} vots" + like_count: + one: "%{count} 'm'agrada'" + other: "%{count} 'm'agrada'" + reply_count: + one: "%{count} resposta" + other: "%{count} respostes" diff --git a/themes/-2_horizon/translations_cs.txt b/themes/-2_horizon/translations_cs.txt new file mode 100644 index 0000000..6d1310d --- /dev/null +++ b/themes/-2_horizon/translations_cs.txt @@ -0,0 +1,29 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +cs: + solved: "Vyřešeno" + unsolved: "Nevyřešeno" + posted: "poslední příspěvek" + by_username: "@%{username}" + replied: "odpověděl/a" + vote_count: + one: "%{count} hlas" + few: "%{count} hlasy" + many: "%{count} hlasy" + other: "%{count} hlasy" + like_count: + one: "%{count} líbí se" + few: "%{count} líbí se" + many: "%{count} líbí se" + other: "%{count} líbí se" + reply_count: + one: "%{count} odpověď" + few: "%{count} odpovědí" + many: "%{count} odpovědí" + other: "%{count} odpovědí" + theme_metadata: + description: "Jednoduché a krásné téma, které vylepšuje zážitek z prostředí Discourse ihned po instalaci." diff --git a/themes/-2_horizon/translations_da.txt b/themes/-2_horizon/translations_da.txt new file mode 100644 index 0000000..386777d --- /dev/null +++ b/themes/-2_horizon/translations_da.txt @@ -0,0 +1,18 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +da: + solved: "Løst" + posted: "sidste indlæg" + vote_count: + one: "%{count} stemme" + other: "%{count} stemmer" + like_count: + one: "%{count} Synes om" + other: "%{count} Synes om" + reply_count: + one: "%{count} svar" + other: "%{count} svar" diff --git a/themes/-2_horizon/translations_de.yml b/themes/-2_horizon/translations_de.yml new file mode 100644 index 0000000..93a9620 --- /dev/null +++ b/themes/-2_horizon/translations_de.yml @@ -0,0 +1,26 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +de: + solved: "Gelöst" + unsolved: "Ungelöst" + posted: "hat geschrieben" + by_username: "von @%{username}" + replied: "antwortete" + vote_count: + one: "%{count} Stimme" + other: "%{count} Stimmen" + like_count: + one: "%{count} „Gefällt mir“" + other: "%{count} „Gefällt mir“" + reply_count: + one: "%{count} Antwort" + other: "%{count} Antworten" + theme_metadata: + description: "Ein einfaches, schönes Theme, das die standardmäßige Benutzererfahrung für Discourse-Seiten verbessert." + settings: + topic_card_high_context: + description: "Wenn diese Option aktiviert ist, werden zusätzliche Kontextinformationen in den Themenkarten angezeigt; darunter Schlagwörter, Auszüge, Lösungsstatus, zugeordnete Benutzer und die Anzahl der Stimmen." diff --git a/themes/-2_horizon/translations_el.txt b/themes/-2_horizon/translations_el.txt new file mode 100644 index 0000000..15751f6 --- /dev/null +++ b/themes/-2_horizon/translations_el.txt @@ -0,0 +1,23 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +el: + solved: "Λυμένο" + unsolved: "Άλυτο" + posted: "ανάρτησε" + vote_count: + one: "%{count} ψήφος" + other: "%{count} ψήφοι" + like_count: + one: "%{count} «μου αρέσει»" + other: "%{count} «μου αρέσει»" + reply_count: + one: "%{count} απάντηση" + other: "%{count} απαντήσεις" + theme_metadata: + settings: + topic_card_high_context: + description: "Όταν είναι ενεργοποιημένη, εμφανίζει πρόσθετο περιεχόμενο στις κάρτες θεμάτων, συμπεριλαμβανομένων ετικετών, αποσπασμάτων, κατάστασης επίλυσης, χρηστών με ανάθεση και αριθμού ψήφων." diff --git a/themes/-2_horizon/translations_en.yml b/themes/-2_horizon/translations_en.yml new file mode 100644 index 0000000..c2b81ae --- /dev/null +++ b/themes/-2_horizon/translations_en.yml @@ -0,0 +1,20 @@ +en: + solved: "Solved" + unsolved: "Unsolved" + posted: "posted" + by_username: "by @%{username}" + replied: "replied" + vote_count: + one: "%{count} vote" + other: "%{count} votes" + like_count: + one: "%{count} like" + other: "%{count} likes" + reply_count: + one: "%{count} reply" + other: "%{count} replies" + theme_metadata: + description: "A simple, beautiful theme that improves the out of the box experience for Discourse sites." + settings: + topic_card_high_context: + description: "When enabled, displays additional context on topic cards including tags, excerpts, solved status, assigned users, and vote counts" diff --git a/themes/-2_horizon/translations_en_GB.txt b/themes/-2_horizon/translations_en_GB.txt new file mode 100644 index 0000000..2d4fa18 --- /dev/null +++ b/themes/-2_horizon/translations_en_GB.txt @@ -0,0 +1,7 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +en_GB: diff --git a/themes/-2_horizon/translations_es.txt b/themes/-2_horizon/translations_es.txt new file mode 100644 index 0000000..6de72ad --- /dev/null +++ b/themes/-2_horizon/translations_es.txt @@ -0,0 +1,23 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +es: + solved: "Solucionado" + unsolved: "Sin solucionar" + posted: "publicó" + by_username: "por @%{username}" + replied: "respondió" + vote_count: + one: "%{count} voto" + other: "%{count} votos" + like_count: + one: "%{count} me gusta" + other: "%{count} me gusta" + reply_count: + one: "%{count} respuesta" + other: "%{count} respuestas" + theme_metadata: + description: "Un tema sencillo y bonito que mejora la experiencia inigualable de los sitios de Discourse." diff --git a/themes/-2_horizon/translations_et.txt b/themes/-2_horizon/translations_et.txt new file mode 100644 index 0000000..41fceb3 --- /dev/null +++ b/themes/-2_horizon/translations_et.txt @@ -0,0 +1,12 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +et: + solved: "Lahendatud" + posted: "postitatud" + reply_count: + one: "%{count} vastus" + other: "%{count} vastust" diff --git a/themes/-2_horizon/translations_fa_IR.txt b/themes/-2_horizon/translations_fa_IR.txt new file mode 100644 index 0000000..9091970 --- /dev/null +++ b/themes/-2_horizon/translations_fa_IR.txt @@ -0,0 +1,18 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +fa_IR: + solved: "حل شده" + posted: "ارسال شده" + vote_count: + one: "%{count} رای" + other: "%{count} رای" + like_count: + one: "%{count} پسندیده" + other: "%{count} پسندیده" + reply_count: + one: "%{count} پاسخ" + other: "%{count} پاسخ" diff --git a/themes/-2_horizon/translations_fi.txt b/themes/-2_horizon/translations_fi.txt new file mode 100644 index 0000000..57c55f0 --- /dev/null +++ b/themes/-2_horizon/translations_fi.txt @@ -0,0 +1,21 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +fi: + solved: "Ratkaistu" + posted: "lähetti viestin" + by_username: "käyttäjältä @%{username}" + vote_count: + one: "%{count} ääni" + other: "%{count} ääntä" + like_count: + one: "%{count} tykkäys" + other: "%{count} tykkäystä" + reply_count: + one: "%{count} vastaus" + other: "%{count} vastausta" + theme_metadata: + description: "Yksinkertainen ja upea teema, joka parantaa Discourse-sivustojen alustavaa käyttökokemusta." diff --git a/themes/-2_horizon/translations_fr.txt b/themes/-2_horizon/translations_fr.txt new file mode 100644 index 0000000..372de5f --- /dev/null +++ b/themes/-2_horizon/translations_fr.txt @@ -0,0 +1,26 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +fr: + solved: "Résolu" + unsolved: "Non résolu" + posted: "publié" + by_username: "par @%{username}" + replied: "a répondu" + vote_count: + one: "%{count} vote" + other: "%{count} votes" + like_count: + one: "%{count} « J'aime »" + other: "%{count} « J'aime »" + reply_count: + one: "%{count} réponse" + other: "%{count} réponses" + theme_metadata: + description: "Un thème simple et élégant qui améliore l'expérience prête à l'emploi pour les sites Discourse." + settings: + topic_card_high_context: + description: "Lorsque ce paramètre est activé, des informations contextuelles supplémentaires sont affichées sur les cartes de sujet, notamment les étiquettes, les extraits, le statut de résolution, les utilisateurs assignés et le nombre de votes." diff --git a/themes/-2_horizon/translations_gl.txt b/themes/-2_horizon/translations_gl.txt new file mode 100644 index 0000000..f9af69d --- /dev/null +++ b/themes/-2_horizon/translations_gl.txt @@ -0,0 +1,15 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +gl: + posted: "publicado" + by_username: "de %{username}" + like_count: + one: "%{count} gústame" + other: "%{count} gústame" + reply_count: + one: "%{count} resposta" + other: "%{count} repostas" diff --git a/themes/-2_horizon/translations_he.txt b/themes/-2_horizon/translations_he.txt new file mode 100644 index 0000000..fddbc59 --- /dev/null +++ b/themes/-2_horizon/translations_he.txt @@ -0,0 +1,27 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +he: + solved: "נפתר" + posted: "פורסם" + by_username: "מאת ‎@%{username}" + vote_count: + one: "הצבעה" + two: "שתי הצבעות" + many: "%{count} הצבעות" + other: "%{count} הצבעות" + like_count: + one: "לייק %{count}" + two: "%{count} לייקים" + many: "%{count} לייקים" + other: "%{count} לייקים" + reply_count: + one: "תגובה" + two: "שתי תגובות" + many: "%{count} תגובות" + other: "%{count} תגובות" + theme_metadata: + description: "ערכת נושא פשוטה ויפה שמשפרת את חוויית השימוש באתרי Discourse." diff --git a/themes/-2_horizon/translations_hr.txt b/themes/-2_horizon/translations_hr.txt new file mode 100644 index 0000000..3f7d96d --- /dev/null +++ b/themes/-2_horizon/translations_hr.txt @@ -0,0 +1,21 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +hr: + solved: "Riješeno" + posted: "objavljeno" + vote_count: + one: "%{count} glas" + few: "%{count} glasa" + other: "%{count} glasa" + like_count: + one: "%{count} lajk" + few: "%{count} lajka" + other: "%{count} lajkova" + reply_count: + one: "%{count} odgovor" + few: "%{count} odgovora" + other: "%{count} odgovora" diff --git a/themes/-2_horizon/translations_hu.txt b/themes/-2_horizon/translations_hu.txt new file mode 100644 index 0000000..bf27154 --- /dev/null +++ b/themes/-2_horizon/translations_hu.txt @@ -0,0 +1,23 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +hu: + solved: "Megoldva" + unsolved: "Megoldatlan" + posted: "közzétett" + by_username: "szerző: @%{username}" + replied: "válaszolt" + vote_count: + one: "%{count} szavazat" + other: "%{count} szavazat" + like_count: + one: "%{count} kedvelés" + other: "%{count} kedvelés" + reply_count: + one: "%{count} válasz" + other: "%{count} válasz" + theme_metadata: + description: "Egy egyszerű, gyönyörű téma, amely javítja a Discourse webhelyek élményét." diff --git a/themes/-2_horizon/translations_hy.txt b/themes/-2_horizon/translations_hy.txt new file mode 100644 index 0000000..3e02299 --- /dev/null +++ b/themes/-2_horizon/translations_hy.txt @@ -0,0 +1,12 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +hy: + solved: "Լուծված է" + posted: "հրապարակված" + reply_count: + one: "%{count} պատասխան" + other: "%{count} պատասխան" diff --git a/themes/-2_horizon/translations_id.txt b/themes/-2_horizon/translations_id.txt new file mode 100644 index 0000000..5bd6632 --- /dev/null +++ b/themes/-2_horizon/translations_id.txt @@ -0,0 +1,13 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +id: + vote_count: + other: "%{count} suara" + like_count: + other: "%{count} suka" + reply_count: + other: "%{count} balasan" diff --git a/themes/-2_horizon/translations_it.txt b/themes/-2_horizon/translations_it.txt new file mode 100644 index 0000000..982b047 --- /dev/null +++ b/themes/-2_horizon/translations_it.txt @@ -0,0 +1,21 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +it: + solved: "Risolti" + posted: "pubblicato" + by_username: "da @%{username}" + vote_count: + one: "%{count} voto" + other: "%{count} voti" + like_count: + one: "%{count} \"Mi piace\"" + other: "%{count} \"Mi piace\"" + reply_count: + one: "%{count} risposta" + other: "%{count} risposte" + theme_metadata: + description: "Un tema semplice e accattivante che migliora l'esperienza immediata dei siti Discourse." diff --git a/themes/-2_horizon/translations_ja.txt b/themes/-2_horizon/translations_ja.txt new file mode 100644 index 0000000..f012b2d --- /dev/null +++ b/themes/-2_horizon/translations_ja.txt @@ -0,0 +1,20 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +ja: + solved: "解決済み" + unsolved: "未解決" + posted: "投稿しました" + by_username: "作成者: @%{username}" + replied: "返信済み" + vote_count: + other: "%{count} 票" + like_count: + other: "「いいね!」 %{count}" + reply_count: + other: "返信: %{count} 件" + theme_metadata: + description: "Discourse サイトのすぐに使用できるエクスペリエンスを向上させる、シンプルで美しいテーマ" diff --git a/themes/-2_horizon/translations_ko.txt b/themes/-2_horizon/translations_ko.txt new file mode 100644 index 0000000..d364654 --- /dev/null +++ b/themes/-2_horizon/translations_ko.txt @@ -0,0 +1,15 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +ko: + solved: "해결됨" + posted: "게시" + vote_count: + other: "%{count} 투표" + like_count: + other: "좋아요 %{count}" + reply_count: + other: "%{count} 댓글" diff --git a/themes/-2_horizon/translations_lt.txt b/themes/-2_horizon/translations_lt.txt new file mode 100644 index 0000000..796c897 --- /dev/null +++ b/themes/-2_horizon/translations_lt.txt @@ -0,0 +1,19 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +lt: + solved: "Išspresta" + posted: "paskelbta" + like_count: + one: "%{count} patinka" + few: "%{count} patinka" + many: "%{count} patinka" + other: "%{count} patinka" + reply_count: + one: "%{count} atsakymas" + few: "%{count} atsakymai" + many: "%{count} atsakymai" + other: "%{count} atsakymai" diff --git a/themes/-2_horizon/translations_lv.txt b/themes/-2_horizon/translations_lv.txt new file mode 100644 index 0000000..ce2e287 --- /dev/null +++ b/themes/-2_horizon/translations_lv.txt @@ -0,0 +1,12 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +lv: + posted: "ierakstīts" + reply_count: + zero: "%{count} atbildes" + one: "%{count} atbilde" + other: "%{count} atbildes" diff --git a/themes/-2_horizon/translations_nb_NO.txt b/themes/-2_horizon/translations_nb_NO.txt new file mode 100644 index 0000000..f11ce81 --- /dev/null +++ b/themes/-2_horizon/translations_nb_NO.txt @@ -0,0 +1,12 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +nb_NO: + solved: "Løst" + posted: "skrevet" + reply_count: + one: "%{count} svar" + other: "%{count} svar" diff --git a/themes/-2_horizon/translations_nl.txt b/themes/-2_horizon/translations_nl.txt new file mode 100644 index 0000000..8deee38 --- /dev/null +++ b/themes/-2_horizon/translations_nl.txt @@ -0,0 +1,23 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +nl: + solved: "Opgelost" + unsolved: "Onopgelost" + posted: "geplaatst" + by_username: "van @%{username}" + replied: "beantwoord" + vote_count: + one: "%{count} stem" + other: "%{count} stemmen" + like_count: + one: "%{count} like" + other: "%{count} likes" + reply_count: + one: "%{count} antwoord" + other: "%{count} antwoorden" + theme_metadata: + description: "Een eenvoudig, mooi thema dat de out-of-the-box ervaring voor Discourse-sites verbetert." diff --git a/themes/-2_horizon/translations_pl_PL.txt b/themes/-2_horizon/translations_pl_PL.txt new file mode 100644 index 0000000..d99abc4 --- /dev/null +++ b/themes/-2_horizon/translations_pl_PL.txt @@ -0,0 +1,32 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +pl_PL: + solved: "Rozwiązany" + unsolved: "Nierozwiązano" + posted: "wysłano" + by_username: "przez @%{username}" + replied: "odpowiedziano" + vote_count: + one: "%{count} głos" + few: "%{count} głosy" + many: "%{count} głosy" + other: "%{count} głosy" + like_count: + one: "%{count} polubienie" + few: "%{count} polubienia" + many: "%{count} polubień" + other: "%{count} polubień" + reply_count: + one: "%{count} odpowiedź" + few: "%{count} odpowiedzi" + many: "%{count} odpowiedzi" + other: "%{count} odpowiedzi" + theme_metadata: + description: "Prosty, piękny motyw, który od razu po zainstalowaniu poprawia komfort korzystania ze stron Discourse." + settings: + topic_card_high_context: + description: "Po włączeniu wyświetla dodatkowy kontekst na kartach tematów, w tym tagi, fragmenty, status rozwiązania, przypisanych użytkowników i liczbę głosów" diff --git a/themes/-2_horizon/translations_pt.txt b/themes/-2_horizon/translations_pt.txt new file mode 100644 index 0000000..713faf0 --- /dev/null +++ b/themes/-2_horizon/translations_pt.txt @@ -0,0 +1,18 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +pt: + solved: "Resolvido" + posted: "publicou" + vote_count: + one: "%{count} voto" + other: "%{count} votos" + like_count: + one: "%{count} curtiu" + other: "%{count} curtiram" + reply_count: + one: "%{count} resposta" + other: "%{count} respostas" diff --git a/themes/-2_horizon/translations_pt_BR.txt b/themes/-2_horizon/translations_pt_BR.txt new file mode 100644 index 0000000..3ced0c8 --- /dev/null +++ b/themes/-2_horizon/translations_pt_BR.txt @@ -0,0 +1,23 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +pt_BR: + solved: "Resolvido" + unsolved: "Não resolvido" + posted: "postou" + by_username: "por @%{username}" + replied: "respondeu" + vote_count: + one: "%{count} voto" + other: "%{count} votos" + like_count: + one: "%{count} curtida" + other: "%{count} curtidas" + reply_count: + one: "%{count} resposta" + other: "%{count} respostas" + theme_metadata: + description: "Um tema simples e elegante que melhora a experiência pronta para uso dos sites do Discourse." diff --git a/themes/-2_horizon/translations_ro.txt b/themes/-2_horizon/translations_ro.txt new file mode 100644 index 0000000..30206c3 --- /dev/null +++ b/themes/-2_horizon/translations_ro.txt @@ -0,0 +1,20 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +ro: + solved: "Rezolvat" + posted: "postat" + by_username: "de @%{username}" + vote_count: + one: "%{count} vot" + few: "%{count} voturi" + other: "%{count} voturi" + reply_count: + one: "%{count} răspuns" + few: "%{count} răspunsuri" + other: "%{count} de răspunsuri" + theme_metadata: + description: "O temă simplă și frumoasă care îmbunătățește experiența de utilizare pentru site-urile Discourse." diff --git a/themes/-2_horizon/translations_ru.txt b/themes/-2_horizon/translations_ru.txt new file mode 100644 index 0000000..2da031a --- /dev/null +++ b/themes/-2_horizon/translations_ru.txt @@ -0,0 +1,32 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +ru: + solved: "Решённые" + unsolved: "Нерешенные" + posted: "отправлено" + by_username: "от @%{username}" + replied: "ответил" + vote_count: + one: "%{count} голос" + few: "%{count} голоса" + many: "%{count} голосов" + other: "%{count} голосов" + like_count: + one: "%{count} лайк" + few: "%{count} лайка" + many: "%{count} лайков" + other: "%{count} лайков" + reply_count: + one: "%{count} ответ" + few: "%{count} ответа" + many: "%{count} ответов" + other: "%{count} ответа" + theme_metadata: + description: "Простая и красивая тема, которая улучшает работу сайтов с Discourse сразу после установки." + settings: + topic_card_high_context: + description: "Показывать на карточках тем дополнительную информацию: теги, выдержки из сообщений, статус решения, назначенных пользователей и число голосов" diff --git a/themes/-2_horizon/translations_sk.txt b/themes/-2_horizon/translations_sk.txt new file mode 100644 index 0000000..c713286 --- /dev/null +++ b/themes/-2_horizon/translations_sk.txt @@ -0,0 +1,27 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +sk: + solved: "Vyriešené" + posted: "zverejnené" + by_username: "od @%{username}" + vote_count: + one: "%{count} hlas" + few: "%{count} hlasy" + many: "%{count} hlasy" + other: "%{count} hlasy" + like_count: + one: "%{count} lajk" + few: "%{count} lajkov" + many: "%{count} lajky" + other: "%{count} lajky" + reply_count: + one: "%{count} odpoveď" + few: "%{count} odpovede" + many: "%{count} odpovedí" + other: "%{count} odpovedí" + theme_metadata: + description: "Jednoduchá a krásna téma, ktorá zlepšuje používateľské prostredie stránok Discourse." diff --git a/themes/-2_horizon/translations_sl.txt b/themes/-2_horizon/translations_sl.txt new file mode 100644 index 0000000..97b81fa --- /dev/null +++ b/themes/-2_horizon/translations_sl.txt @@ -0,0 +1,19 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +sl: + solved: "Rešeno" + posted: "objavljeno" + like_count: + one: "%{count} všeček" + two: "%{count} všečka" + few: "%{count} všečke" + other: "%{count} všečkov" + reply_count: + one: "%{count} odgovor" + two: "%{count} odgovora" + few: "%{count} odgovori" + other: "%{count} odgovorov" diff --git a/themes/-2_horizon/translations_sq.txt b/themes/-2_horizon/translations_sq.txt new file mode 100644 index 0000000..9ce2728 --- /dev/null +++ b/themes/-2_horizon/translations_sq.txt @@ -0,0 +1,11 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +sq: + posted: "postuar" + reply_count: + one: "%{count} përgjigje" + other: "%{count} përgjigje" diff --git a/themes/-2_horizon/translations_sr.txt b/themes/-2_horizon/translations_sr.txt new file mode 100644 index 0000000..b88b2f8 --- /dev/null +++ b/themes/-2_horizon/translations_sr.txt @@ -0,0 +1,12 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +sr: + posted: "pisao" + reply_count: + one: "%{count} odgovor" + few: "%{count} odgovora" + other: "%{count} odgovora" diff --git a/themes/-2_horizon/translations_sv.txt b/themes/-2_horizon/translations_sv.txt new file mode 100644 index 0000000..1631ea6 --- /dev/null +++ b/themes/-2_horizon/translations_sv.txt @@ -0,0 +1,19 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +sv: + solved: "Löst" + posted: "publicerade" + by_username: "av @%{username}" + vote_count: + one: "%{count} röst" + other: "%{count} röster" + like_count: + one: "%{count} gillning" + other: "%{count} gillningar" + reply_count: + one: "%{count} svar" + other: "%{count} svar" diff --git a/themes/-2_horizon/translations_sw.txt b/themes/-2_horizon/translations_sw.txt new file mode 100644 index 0000000..f4dbe8f --- /dev/null +++ b/themes/-2_horizon/translations_sw.txt @@ -0,0 +1,12 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +sw: + solved: "Imetatuliwa" + posted: "ameandika" + reply_count: + one: "%{count} jibu" + other: "%{count} majibu" diff --git a/themes/-2_horizon/translations_te.txt b/themes/-2_horizon/translations_te.txt new file mode 100644 index 0000000..165c8f3 --- /dev/null +++ b/themes/-2_horizon/translations_te.txt @@ -0,0 +1,14 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +te: + posted: "పోస్ట్ చేయబడింది" + like_count: + one: "%{count} ఇష్టం" + other: "%{count} ఇష్టాలు" + reply_count: + one: "%{count} ప్రత్యుత్తరం" + other: "%{count} ప్రత్యుత్తరాలు" diff --git a/themes/-2_horizon/translations_th.txt b/themes/-2_horizon/translations_th.txt new file mode 100644 index 0000000..7bef51d --- /dev/null +++ b/themes/-2_horizon/translations_th.txt @@ -0,0 +1,11 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +th: + solved: "แก้ไขแล้ว" + posted: "โพสต์แล้ว" + reply_count: + other: "%{count} ตอบ" diff --git a/themes/-2_horizon/translations_tr_TR.txt b/themes/-2_horizon/translations_tr_TR.txt new file mode 100644 index 0000000..9285dc4 --- /dev/null +++ b/themes/-2_horizon/translations_tr_TR.txt @@ -0,0 +1,23 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +tr_TR: + solved: "Çözüldü" + unsolved: "Çözülmemiş" + posted: "gönderildi" + by_username: "@%{username} tarafından" + replied: "yanıtladı" + vote_count: + one: "%{count} oy" + other: "%{count} oy" + like_count: + one: "%{count} beğeni" + other: "%{count} beğeni" + reply_count: + one: "%{count} yanıt" + other: "%{count} yanıt" + theme_metadata: + description: "Discourse siteleri için kullanıma hazır deneyimi geliştiren basit ve güzel bir tema." diff --git a/themes/-2_horizon/translations_ug.txt b/themes/-2_horizon/translations_ug.txt new file mode 100644 index 0000000..562817e --- /dev/null +++ b/themes/-2_horizon/translations_ug.txt @@ -0,0 +1,19 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +ug: + posted: "يوللانغان ۋاقىت" + vote_count: + one: "%{count} بېلەت" + other: "%{count} بېلەت" + like_count: + one: "%{count} ياقتۇرۇش" + other: "%{count} ياقتۇرۇش" + reply_count: + one: "%{count} جاۋاب" + other: "%{count} جاۋاب" + theme_metadata: + description: "ئاددىي، چىرايلىق ئۆرنەك، Discourse تور بېكىتىنىڭ قولغا ئېلىپلا ئىشلىتىش تەسىراتىنى ياخشىلايدۇ." diff --git a/themes/-2_horizon/translations_uk.txt b/themes/-2_horizon/translations_uk.txt new file mode 100644 index 0000000..ae7a78c --- /dev/null +++ b/themes/-2_horizon/translations_uk.txt @@ -0,0 +1,32 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +uk: + solved: "Вирішено" + unsolved: "Невирішено" + posted: "розміщено" + by_username: "від @%{username}" + replied: "відповів" + vote_count: + one: "%{count} голос" + few: "%{count} голосів" + many: "%{count} голосів" + other: "%{count} голосів" + like_count: + one: "%{count} вподобання" + few: "%{count} вподобання" + many: "%{count} вподобань" + other: "%{count} вподобань" + reply_count: + one: "%{count} відповідь" + few: "%{count} відповідей" + many: "%{count} відповідей" + other: "%{count} відповідей" + theme_metadata: + description: "Проста прекрасна тема, яка покращує роботу з коробки для веб-сайтів Discourse." + settings: + topic_card_high_context: + description: "Якщо ввімкнено, відображається додатковий контекст на картках тем, включаючи теги, уривки, статус розв’язання, призначених користувачів та кількість голосів." diff --git a/themes/-2_horizon/translations_ur.txt b/themes/-2_horizon/translations_ur.txt new file mode 100644 index 0000000..26f099b --- /dev/null +++ b/themes/-2_horizon/translations_ur.txt @@ -0,0 +1,21 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +ur: + solved: "حل شدہ" + posted: "پوسٹ کیا" + replied: "جواب دیا" + vote_count: + one: "%{count} ووٹ" + other: "%{count} ووٹ" + like_count: + one: "%{count} پسند" + other: "%{count} پسندیدگیاں" + reply_count: + one: "%{count} جواب" + other: "%{count} جوابات" + theme_metadata: + description: "ایک سادہ، خوبصورت تھیم جو ڈسکورس سائٹس کے آؤٹ آف دی باکس تجربے کو بہتر بناتی ہے۔" diff --git a/themes/-2_horizon/translations_vi.txt b/themes/-2_horizon/translations_vi.txt new file mode 100644 index 0000000..3011847 --- /dev/null +++ b/themes/-2_horizon/translations_vi.txt @@ -0,0 +1,20 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +vi: + solved: "Giải pháp" + unsolved: "Chưa có giải pháp" + posted: "ngày đăng" + by_username: "bởi @%{username}" + replied: "đã trả lời" + vote_count: + other: "%{count} lượt bình chọn" + like_count: + other: "%{count} lượt thích" + reply_count: + other: "%{count} trả lời" + theme_metadata: + description: "Một giao diện đơn giản, đẹp mắt giúp cải thiện trải nghiệm mặc định cho các trang web Discourse." diff --git a/themes/-2_horizon/translations_zh_CN.txt b/themes/-2_horizon/translations_zh_CN.txt new file mode 100644 index 0000000..0d7021e --- /dev/null +++ b/themes/-2_horizon/translations_zh_CN.txt @@ -0,0 +1,23 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +zh_CN: + solved: "已解决" + unsolved: "未解决" + posted: "已发布" + by_username: "作者:@%{username}" + replied: "回复" + vote_count: + other: "%{count} 票" + like_count: + other: "%{count} 个赞" + reply_count: + other: "%{count} 条回复" + theme_metadata: + description: "一个简单、美观的主题,可以改善 Discourse 站点的开箱即用体验。" + settings: + topic_card_high_context: + description: "启用后,会在话题卡片上显示更多上下文信息,包括标签、摘要、已解决状态、指定的用户和投票数" diff --git a/themes/-2_horizon/translations_zh_TW.txt b/themes/-2_horizon/translations_zh_TW.txt new file mode 100644 index 0000000..cce3020 --- /dev/null +++ b/themes/-2_horizon/translations_zh_TW.txt @@ -0,0 +1,15 @@ +# WARNING: Never edit this file. +# It will be overwritten when translations are pulled from Crowdin. +# +# To work with us on translations, join this project: +# https://translate.discourse.org/ + +zh_TW: + solved: "已解決" + posted: "發表於" + vote_count: + other: "%{count} 票" + like_count: + other: "%{count}個讚" + reply_count: + other: "%{count}個回覆" diff --git a/themes/1_default/theme.json b/themes/1_default/theme.json new file mode 100644 index 0000000..b8f2d4b --- /dev/null +++ b/themes/1_default/theme.json @@ -0,0 +1,28 @@ +{ + "id": 1, + "name": "Default", + "user_selectable": true, + "color_scheme": { + "id": 3, + "name": "WCAG Dark", + "theme_id": null, + "colors": { + "primary-medium": "999999", + "primary-low-mid": "888888", + "secondary": "0c0c0c", + "tertiary": "759AFF", + "quaternary": "759AFF", + "header_background": "000000", + "header_primary": "ffffff", + "highlight": "3369FF", + "selected": "0d2569", + "hover": "002382", + "danger": "FF697A", + "success": "70B880", + "love": "9D256B", + "primary": "b2c0cd" + } + }, + "fields_count": 0, + "files": [] +} \ No newline at end of file diff --git a/themes/23_material_design_theme/about_about.yml b/themes/23_material_design_theme/about_about.yml new file mode 100644 index 0000000..f3e07af --- /dev/null +++ b/themes/23_material_design_theme/about_about.yml @@ -0,0 +1,79 @@ +{ + "name": "Material Design Theme", + "about_url": "https://meta.discourse.org/t/material-design-stock-theme/47142", + "license_url": "https://github.com/discourse/material-design-stock-theme/blob/master/LICENSE.txt", + "color_schemes": { + "Material Teal/Amber": { + "primary": "212121", + "secondary": "fafafa", + "tertiary": "ffa000", + "quaternary": "00796b", + "header_background": "00796b", + "header_primary": "ffffff", + "highlight": "ffff8d", + "danger": "ff5722", + "success": "4caf50", + "love": "fa6c8d", + "selected": "fff1d9" + }, + "Material Red/Blue": { + "primary": "212121", + "secondary": "fafafa", + "tertiary": "448aff", + "quaternary": "d32f2f", + "header_background": "d32f2f", + "header_primary": "ffffff", + "highlight": "ffff8d", + "danger": "ff6d00", + "success": "4caf50", + "love": "fa6c8d", + "selected": "e3edff" + }, + "Material Blue/Red": { + "primary": "212121", + "secondary": "fafafa", + "tertiary": "ff5252", + "quaternary": "2196f3", + "header_background": "1976f2", + "header_primary": "ffffff", + "highlight": "ffff8d", + "danger": "ff6d00", + "success": "4caf50", + "love": "fa6c8d", + "selected": "ffe5e5" + }, + "Material Indigo/Orange": { + "primary": "212121", + "secondary": "fafafa", + "tertiary": "ff5722", + "quaternary": "3f51b5", + "header_background": "303f9f", + "header_primary": "ffffff", + "highlight": "ffeb3b", + "danger": "f44336", + "success": "4caf50", + "love": "fa6c8d", + "selected": "ffe6de" + }, + "Material Dark": { + "primary": "fafafa", + "secondary": "212121", + "tertiary": "00bcd4", + "quaternary": "00bcd4", + "header_background": "000000", + "header_primary": "ffffff", + "highlight": "fafafa", + "danger": "e45735", + "success": "009900", + "love": "fa6c8d", + "selected": "00424a", + "hover": "2d2d2d" + } + }, + "assets": { + "roboto": "assets/Roboto-Regular.ttf", + "roboto-bold": "assets/Roboto-Bold.ttf", + "roboto-italic": "assets/Roboto-Italic.ttf" + }, + "screenshots": ["screenshots/light.png", "screenshots/dark.png"] +} diff --git a/themes/23_material_design_theme/common_color_definitions.txt b/themes/23_material_design_theme/common_color_definitions.txt new file mode 100644 index 0000000..29094a2 --- /dev/null +++ b/themes/23_material_design_theme/common_color_definitions.txt @@ -0,0 +1,5 @@ +@use "sass:color"; + +:root { + --material-lighter-secondary: color.adjust($secondary, $lightness: 10%); +} diff --git a/themes/23_material_design_theme/common_head_tag.html b/themes/23_material_design_theme/common_head_tag.html new file mode 100644 index 0000000..7cfa3b7 --- /dev/null +++ b/themes/23_material_design_theme/common_head_tag.html @@ -0,0 +1 @@ + diff --git a/themes/23_material_design_theme/common_roboto-bold.txt b/themes/23_material_design_theme/common_roboto-bold.txt new file mode 100644 index 0000000..e69de29 diff --git a/themes/23_material_design_theme/common_roboto-italic.txt b/themes/23_material_design_theme/common_roboto-italic.txt new file mode 100644 index 0000000..e69de29 diff --git a/themes/23_material_design_theme/common_roboto.txt b/themes/23_material_design_theme/common_roboto.txt new file mode 100644 index 0000000..e69de29 diff --git a/themes/23_material_design_theme/common_screenshot_dark.txt b/themes/23_material_design_theme/common_screenshot_dark.txt new file mode 100644 index 0000000..e69de29 diff --git a/themes/23_material_design_theme/common_screenshot_light.txt b/themes/23_material_design_theme/common_screenshot_light.txt new file mode 100644 index 0000000..e69de29 diff --git a/themes/23_material_design_theme/common_scss.scss b/themes/23_material_design_theme/common_scss.scss new file mode 100644 index 0000000..0b22072 --- /dev/null +++ b/themes/23_material_design_theme/common_scss.scss @@ -0,0 +1,200 @@ +:root { + --d-header-icon-background--hover: var(--header_primary-low); +} + +@font-face { + font-family: Roboto; + src: url($roboto); +} + +@font-face { + font-family: Roboto; + src: url($roboto-bold); + font-weight: bold; +} + +@font-face { + font-family: Roboto; + src: url($roboto-italic); + font-style: italic; +} + +html { + font-family: Roboto, sans-serif; + font-weight: 400; +} + +body input, +body button, +body select, +body textarea { + font-family: Roboto, Helvetica, Arial, sans-serif; +} + +@mixin boxShadow { + // Matched from https://material.io/components/cards/ + box-shadow: + 0 2px 1px -1px rgb(0, 0, 0, 0.2), + 0 1px 1px 0 rgb(0, 0, 0, 0.14), + 0 1px 3px 0 rgb(0, 0, 0, 0.12); +} + +@mixin buttonShadow { + // Matched from https://material.io/components/buttons/ + box-shadow: + 0 3px 1px -2px rgb(0, 0, 0, 0.2), + 0 2px 2px 0 rgb(0, 0, 0, 0.14), + 0 1px 5px 0 rgb(0, 0, 0, 0.12); +} + +@import "sidebar"; + +// raise and round buttons +.btn-default, +.btn-primary, +.d-combo-button { + border-radius: 4px; + + @include boxShadow; + + &.btn-flat.close { + box-shadow: none; + } +} + +// remove shadow from a few buttons +.d-editor-button-bar .btn.btn-icon, +.bulk-select-all, +.bulk-clear-all, +.period-chooser-header, +.topic-map .btn.no-text, +.badge-section .btn, +#revision .btn, +#new-account-link, +#login-link, +.dropdown-menu li .btn { + border-radius: 0; + box-shadow: none; +} + +// Topic adjustments +.small-action { + border-top: none; + box-sizing: border-box; + margin-block: 1em 0.5em; + border: none; + border-radius: 4px; + box-shadow: + 0 2px 5px 0 rgb(0, 0, 0, 0.16), + 0 0 0 0 rgb(0, 0, 0, 0.12); + max-width: 754px; + padding-left: 20px; + + .desktop-view & { + margin-left: calc(var(--topic-avatar-width) + 10px); + } + + button { + margin-left: 1em; + background-color: var(--material-lighter-secondary); + } + + .topic-avatar { + display: none; + } + + .small-action-desc { + border: none; + } +} + +.read-state { + right: 1em; +} + +.gap { + margin-top: 1em; + padding-bottom: 0; +} + +.post-notice { + border: none; + background: transparent; + + .desktop-view & { + margin-left: 50px; + margin-top: 0.75em; + } +} + +.popup-menu .btn { + box-shadow: none; +} + +// Personal messages +.archetype-private_message { + .topic-body { + box-shadow: none; + + .cooked { + @include boxShadow; + } + } +} + +// Admin +.admin-controls .nav-pills > li a.active { + background: transparent; +} + +// Chat +body.has-sidebar-page.has-full-page-chat #main-outlet-wrapper { + gap: 0 2em; +} + +.has-full-page-chat:not(.discourse-sidebar) .full-page-chat { + border: none; +} + +.chat-channel-card { + background: var(--primary-very-low); + border: 1px solid; + border-left: 5px solid; + border-top-color: var(--primary-low) !important; + border-bottom-color: var(--primary-low) !important; + border-right-color: var(--primary-low) !important; +} + +#main-outlet .topic-map { + padding: 10px; + margin-top: 0.75em; + border: none; + border-radius: 4px; + box-shadow: + 0 2px 5px 0 rgb(0, 0, 0, 0.16), + 0 0 0 0 rgb(0, 0, 0, 0.12); + + .desktop-view & { + padding: 15px 30px; + max-width: 752px; + margin-left: calc(var(--topic-avatar-width) + 10px); + } +} + +.topic-timer-info { + border: none; +} + +.extra-info-wrapper { + .badge-category__wrapper .d-icon, + .title-wrapper .topic-statuses .d-icon, + .assigned-to .d-icon { + color: var(--secondary); + } +} + +.topic-voting-menu-trigger { + // overrides some very specific button styles + border-bottom-left-radius: 0 !important; + border-bottom-right-radius: 0 !important; +} diff --git a/themes/23_material_design_theme/desktop_scss.scss b/themes/23_material_design_theme/desktop_scss.scss new file mode 100644 index 0000000..a74601e --- /dev/null +++ b/themes/23_material_design_theme/desktop_scss.scss @@ -0,0 +1,334 @@ +@use "sass:color"; +@import "common/foundation/variables"; + +@mixin boxShadow { + box-shadow: + 0 2px 5px 0 rgb(0, 0, 0, 0.16), + 0 0 0 0 rgb(0, 0, 0, 0.12); +} + +@mixin buttonShadow { + box-shadow: + 0 0 4px rgb(0, 0, 0, 0.14), + 0 4px 8px rgb(0, 0, 0, 0.28); +} + +@mixin buttonTransition { + transition: + right 0.5s, + bottom 0.5s, + border-radius 0.5s, + text-indent 0.2s, + visibility 1s, + width 0.2s ease, + height 0.5s ease 0.4s, + color 0.5s, + background-color 2s, + transform 0.5s; +} + +// make header icons semi-translucent +.d-header-icons { + .d-icon { + color: var(--tertiary); + } +} + +// add shadow behind the list of topics on right in Category and Latest View +// add shadow behind list of categories on left in Category and Latest View +// add shadow behind topics in Latest view +.category-list, +.topic-list, +.latest-topic-list { + @include boxShadow; + background-color: var(--material-lighter-secondary); +} + +.column { + align-self: start; +} + +// fix color of user profile navigation icons +.user-main .nav-pills { + a.active i { + color: var(--primary); + } + + a:hover:not(.active) i { + color: var(--quaternary); + } +} + +// create conversation cards +.topic-body { + @include boxShadow; + background-color: var(--material-lighter-secondary); + margin-top: 10px; + border-radius: 4px; + padding: 15px 20px 0 20px; +} + +// more space for avatars +.topic-avatar { + border-top: 0; + padding-right: 10px; + + .avatar-flair { + right: 4px; + } +} + +// remove stray border from bottom of last post +.topic-status-info { + border-top: 0; +} + +// improve format of embedded posts +.embedded-posts { + border: none; + + .topic-avatar { + padding-left: 0; + } + + &.top { + padding-left: 2em; + + .row .topic-avatar, + .row .topic-body { + border: none; + } + + .collapse-down { + transform: translate(-120%, 62%); + } + } +} + +.embedded-posts.top.topic-body { + box-shadow: none; + background-color: var(--secondary); +} + +// darken color, remove shadow and border when pressed +.btn:active { + background-color: rgb(0, 0, 0, 0.4); + box-shadow: none; +} + +// New Topic Fab +.d-combo-button:has(#create-topic) { + display: flex; + align-items: center; + justify-content: center; + + @include buttonShadow; + @include buttonTransition; + margin: 0; + height: 63px; + width: 190px; + border-radius: 40px; + position: fixed; + bottom: 30px; + right: 50px; + z-index: z("composer", "content") - 1; + background-color: var(--tertiary); + color: var(--secondary); + white-space: nowrap; + overflow: hidden; + + .d-button-label { + color: var(--secondary); + } + + button { + background: transparent; + box-shadow: none; + height: 100%; + } + + .topic-drafts-menu-trigger { + border-left: 1px solid var(--secondary); + padding-left: 1em; + } + + .chat-drawer-active & { + z-index: z("chat-drawer") - 1; + bottom: 60px; + } + + @media screen and (width <= 1520px) { + body:has(#reply-control.draft.show-preview) & { + bottom: 60px; + } + } + + .d-icon { + margin: 0; + color: var(--secondary); + } + + .d-button-label { + display: inline-block; + transition: all 0.3s; + margin: 0 0.25em; + } +} + +#create-topic.btn-default .fa-plus { + color: var(--secondary); +} + +.timeline-container .topic-timeline .timeline-handle { + background-color: var(--tertiary-medium); +} + +// Reply Fab +.timeline-footer-controls { + position: relative; +} + +.widget-button.btn.create { + border-radius: 50%; + position: absolute; + top: 55px; + left: -10px; + background-color: var(--tertiary); + overflow: hidden; + width: 60px; + height: 60px; + + @include buttonShadow; + @include buttonTransition; + + .d-icon { + color: var(--secondary); + } +} + +// Increase size of reply icon +.widget-button.btn.create .fa-reply { + color: var(--secondary); + font-size: 20px; +} + +// Proper spacing for iPad portrait +@media only screen and (width >= 768px) and (width <= 1250px) { + .timeline-container { + margin-left: 820px; + } + + .topic-admin-popup-menu { + left: -40% !important; + } +} + +// Properly space notifications button +.widget-button.btn.notifications-dropdown { + right: 4px; + position: relative; + border-radius: 40px; + width: 30px; + padding: 6px; +} + +// cards for search results +.fps-result { + @include boxShadow; + background-color: var(--material-lighter-secondary); + margin-top: 10px; + padding: 20px; + border-radius: 4px; +} + +@keyframes background-fade-highlight { + 0% { + background-color: color.adjust($tertiary, $lightness: 20%); + } + + 100% { + background-color: var(--material-lighter-secondary); + } +} + +// clipped user page button shadows +.user-main .about .controls { + padding-right: 10px; +} + +// RTL Overrides +.rtl { + .topic-avatar { + padding-right: initial; + padding-left: 10px; + + .avatar-flair { + right: initial; + left: 4px; + } + } + + .embedded-posts .topic-avatar { + padding-left: initial; + padding-right: 0; + } + + #create-topic.btn-default { + right: initial; + left: 50px; + } + + .widget-button.btn.create { + left: initial; + right: -10px; + } + + .widget-button.btn.notifications-dropdown { + right: initial; + left: 4px; + } + + .user-main .about .controls { + padding-right: initial; + padding-left: 10px; + } +} + +// RTL Overrides +@media only screen and (width >= 768px) and (width <= 1250px) { + .rtl { + .timeline-container { + margin-left: initial; + margin-right: 820px; + } + + .topic-admin-popup-menu { + left: initial !important; + right: -40% !important; + } + } +} + +// Personal messages +.archetype-private_message { + .topic-body { + margin-left: -2em; + } + + .small-action { + max-width: 758px; + } +} + +// Chat +.chat-channel { + height: calc(100dvh - (var(--header-offset) + 6em)); +} + +#main-chat-outlet { + margin-top: 1.5em; + box-shadow: + 0 2px 1px -1px rgb(0, 0, 0, 0.2), + 0 1px 1px 0 rgb(0, 0, 0, 0.14), + 0 1px 3px 0 rgb(0, 0, 0, 0.12); +} diff --git a/themes/23_material_design_theme/extra_scss_sidebar.txt b/themes/23_material_design_theme/extra_scss_sidebar.txt new file mode 100644 index 0000000..6243ea2 --- /dev/null +++ b/themes/23_material_design_theme/extra_scss_sidebar.txt @@ -0,0 +1,28 @@ +.has-sidebar-page .sidebar-wrapper { + margin-top: 1.5em; + top: calc((var(--header-offset, 0) + 1.5em)); + height: calc(100vh - (var(--header-offset, 0) + 3em)); +} + +// Sidebar toggle styling +.header-sidebar-toggle { + button { + .d-icon { + color: var(--tertiary); + box-shadow: none; + } + + &:hover { + .d-icon { + color: var(--primary-med-or-secondary-med); + } + } + } +} + +// Sidebar Style Overrides +.sidebar-wrapper { + @include boxShadow; + margin-top: 2.4em; + background-color: var(--material-lighter-secondary); +} diff --git a/themes/23_material_design_theme/mobile_scss.scss b/themes/23_material_design_theme/mobile_scss.scss new file mode 100644 index 0000000..6068833 --- /dev/null +++ b/themes/23_material_design_theme/mobile_scss.scss @@ -0,0 +1,81 @@ +@mixin boxShadow { + box-shadow: + 0 2px 5px 0 rgb(0, 0, 0, 0.16), + 0 0 0 0 rgb(0, 0, 0, 0.12); +} + +.list-controls .container { + #create-topic { + border-radius: 4px 0 0 4px; + } + + .topic-drafts-menu-trigger { + border-radius: 0 4px 4px 0; + margin-left: -7px; + } +} + +// create conversation cards +.topic-body { + @include boxShadow; + background-color: var(--material-lighter-secondary); + margin-top: 10px; + padding: 20px; + border-radius: 4px; +} + +// more space for avatars +.topic-avatar { + border-top: 0; + padding-top: 20px; + padding-left: 10px; + + .avatar-flair { + right: 4px; + } +} + +// increase space between post meta and post content +.boxed .contents { + padding: 20px 0 0 0; +} + +// remove stray border from bottom of last post +.topic-status-info { + border-top: 0; +} + +.small-action { + border: none; +} + +#topic-closing-info { + border: none; +} + +.list-controls .nav-pills .list-control-toggle-link-trigger { + box-shadow: none; +} + +// remove lines between cards +.topic-post article { + border: none; +} + +// put shadow on quotes as well +aside.quote { + @include boxShadow; +} + +// RTL Overrides +.rtl { + .topic-avatar { + padding-left: initial; + padding-right: 10px; + + .avatar-flair { + right: initial; + left: 4px; + } + } +} diff --git a/themes/23_material_design_theme/theme.json b/themes/23_material_design_theme/theme.json new file mode 100644 index 0000000..cdc6741 --- /dev/null +++ b/themes/23_material_design_theme/theme.json @@ -0,0 +1,113 @@ +{ + "id": 23, + "name": "Material Design Theme", + "user_selectable": true, + "color_scheme": null, + "fields_count": 13, + "files": [ + { + "field_id": 504, + "target_id": 0, + "target_name": "common", + "name": "color_definitions", + "filename": "common_color_definitions.txt", + "bytes": 105 + }, + { + "field_id": 506, + "target_id": 0, + "target_name": "common", + "name": "head_tag", + "filename": "common_head_tag.html", + "bytes": 90 + }, + { + "field_id": 501, + "target_id": 0, + "target_name": "common", + "name": "roboto", + "filename": "common_roboto.txt", + "bytes": 0 + }, + { + "field_id": 502, + "target_id": 0, + "target_name": "common", + "name": "roboto-bold", + "filename": "common_roboto-bold.txt", + "bytes": 0 + }, + { + "field_id": 503, + "target_id": 0, + "target_name": "common", + "name": "roboto-italic", + "filename": "common_roboto-italic.txt", + "bytes": 0 + }, + { + "field_id": 692, + "target_id": 0, + "target_name": "common", + "name": "screenshot_dark", + "filename": "common_screenshot_dark.txt", + "bytes": 0 + }, + { + "field_id": 691, + "target_id": 0, + "target_name": "common", + "name": "screenshot_light", + "filename": "common_screenshot_light.txt", + "bytes": 0 + }, + { + "field_id": 505, + "target_id": 0, + "target_name": "common", + "name": "scss", + "filename": "common_scss.scss", + "bytes": 3516 + }, + { + "field_id": 507, + "target_id": 1, + "target_name": "desktop", + "name": "scss", + "filename": "desktop_scss.scss", + "bytes": 5890 + }, + { + "field_id": 509, + "target_id": 2, + "target_name": "mobile", + "name": "scss", + "filename": "mobile_scss.scss", + "bytes": 1262 + }, + { + "field_id": 508, + "target_id": 4, + "target_name": "translations", + "name": "en", + "filename": "translations_en.yml", + "bytes": 115 + }, + { + "field_id": 510, + "target_id": 5, + "target_name": "extra_scss", + "name": "sidebar", + "filename": "extra_scss_sidebar.txt", + "bytes": 552 + }, + { + "field_id": 693, + "target_id": 9, + "target_name": "about", + "name": "about", + "filename": "about_about.yml", + "bytes": 2256 + } + ] +} \ No newline at end of file diff --git a/themes/23_material_design_theme/translations_en.yml b/themes/23_material_design_theme/translations_en.yml new file mode 100644 index 0000000..e140e42 --- /dev/null +++ b/themes/23_material_design_theme/translations_en.yml @@ -0,0 +1,3 @@ +en: + theme_metadata: + description: "Inspired by Material Design, this theme comes with several color palettes" diff --git a/themes/24_mint_theme/about_about.yml b/themes/24_mint_theme/about_about.yml new file mode 100644 index 0000000..80bd1f6 --- /dev/null +++ b/themes/24_mint_theme/about_about.yml @@ -0,0 +1,28 @@ +{ + "name": "Mint Theme", + "authors": "Discourse", + "about_url": "https://meta.discourse.org/t/mint-a-modern-theme-for-discourse/202822", + "license_url": "https://github.com/discourse/discourse-mint-theme/blob/main/LICENSE", + "color_schemes": { + "mint-light": { + "primary": "454545", + "secondary": "F6FBFC", + "tertiary": "4F8A7C", + "header_background": "ffffff", + "header_primary": "111111", + "selected": "e3efec", + "hover": "e3efec" + }, + "mint-dark": { + "primary": "e0e0e0", + "secondary": "2d2d2d", + "tertiary": "4F8A7C", + "header_background": "202020", + "header_primary": "e0e0e0", + "highlight": "b2b235", + "selected": "1c302b", + "hover": "1c302b" + } + }, + "screenshots": ["screenshots/light.webp", "screenshots/dark.webp"] +} diff --git a/themes/24_mint_theme/common_color_definitions.txt b/themes/24_mint_theme/common_color_definitions.txt new file mode 100644 index 0000000..1b08c8f --- /dev/null +++ b/themes/24_mint_theme/common_color_definitions.txt @@ -0,0 +1,5 @@ +$color-circle-gradient: dark-light-choose(#e5f8ff, #2c2c2c); + +:root { + --color-circle-gradient: #{$color-circle-gradient}; +} diff --git a/themes/24_mint_theme/common_screenshot_dark.txt b/themes/24_mint_theme/common_screenshot_dark.txt new file mode 100644 index 0000000..e69de29 diff --git a/themes/24_mint_theme/common_screenshot_light.txt b/themes/24_mint_theme/common_screenshot_light.txt new file mode 100644 index 0000000..e69de29 diff --git a/themes/24_mint_theme/common_scss.scss b/themes/24_mint_theme/common_scss.scss new file mode 100644 index 0000000..5ba839d --- /dev/null +++ b/themes/24_mint_theme/common_scss.scss @@ -0,0 +1,357 @@ +@import "variables"; +@import "sidebar"; +@import "chat"; + +.d-editor-textarea-wrapper, +.select-kit-header { + border-radius: var(--mint-border-radius); +} + +:root { + --d-input-border-radius: var(--mint-border-radius); + --d-nav-underline-height: 0; +} + +.d-header { + height: 5em; + box-shadow: none; +} + +.d-header-mode .bootstrap-mode { + color: var(--secondary); +} + +.alert.alert-info { + border-radius: 10px; +} + +.navigation-categories .search-banner { + border-radius: var(--mint-border-radius); + height: 350px; + box-sizing: border-box; + padding: 2.5em 0 3em; + margin: 1em auto; + max-width: 1110px; +} + +.category-box-inner { + @include mint-card-bg; +} + +.navigation-topics { + .container.list-container { + border-radius: var(--mint-border-radius); + box-shadow: + 0 8px 60px 0 rgb(103, 151, 255, 0.1), + 0 12px 90px 0 rgb(133, 255, 103, 0.1); + padding: 2em; + border-top: 8px solid var(--tertiary); + margin-top: 0.8em; + + @include mint-card-bg; + } +} + +.search-widget .search-context { + padding: 10px; + background-color: var(--tertiary-medium); + border-radius: var(--mint-border-radius); +} + +.search-menu .search-context .show-help { + color: var(--primary-very-low); +} + +.search-menu .search-input { + border: 0; +} + +.menu-panel .d-label { + color: var(--primary); +} + +a { + color: var(--tertiary-hover); +} + +.category-boxes { + gap: 2em; + border-radius: var(--mint-border-radius); + + .category-box { + width: 100%; + margin: 0; + overflow: hidden; + border: none; + border-top: 8px solid; + background: var(--secondary); + border-radius: var(--mint-border-radius); + box-shadow: 0 2px 3px 0 rgb(2, 47, 57, 0.14); + + .category-box-inner { + border: none; + padding: 0; + + .category-details { + padding: 2em; + } + } + + &:hover { + box-shadow: 0 40px 30px 0 rgb(2, 47, 57, 0.1); + transform: translateY(-2px); + } + } +} + +@media (width <= 960px) { + .category-boxes.with-logos.with-subcategories { + grid-template-columns: 1fr; + } +} + +.category-list-item.category { + border-radius: var(--mint-border-radius); + border-right: 1px solid var(--primary-low) !important; + box-shadow: 0 0 4px 0 rgb(0, 0, 0, 0.1); + margin: 0 0.59em 2em 0.59em; + background: var(--primary-very-low); +} + +#create-topic { + color: var(--secondary); + background: var(--tertiary); + transition: all 0.3s linear; + border-radius: var(--mint-border-radius); + text-transform: uppercase; + border: 2px solid var(--tertiary); + + .fa { + color: var(--secondary); + } + + &:hover { + background: var(--tertiary); + color: var(--secondary); + box-shadow: var(--mint-hover-shadow); + transition: all 0.3s linear; + border-radius: var(--mint-border-radius); + + .fa { + color: var(--secondary); + } + } +} + +.open .grippie { + background: var(--tertiary); +} + +.options.toolbar-popup-menu-options { + button.single-select-header.dropdown-select-box-header { + background: transparent; + border-radius: none; + border: none; + + &:hover { + background: var(--tertiary); + border-radius: 0; + } + } +} + +.list-controls { + margin-top: 1em; +} + +.list-controls .combo-box .combo-box-header { + border: none; + border-radius: var(--mint-border-radius); + + @include mint-card-bg; +} + +.menu-panel .panel-body-bottom .btn { + svg { + color: var(--secondary); + } + + &:hover { + background: var(--tertiary); + color: var(--secondary); + } +} + +.nav-pills li a { + border: 1px solid transparent; + border-radius: var(--mint-border-radius); + + &:hover { + border-radius: var(--mint-border-radius); + transition: all 0.3s linear; + background-color: transparent; + color: var(--tertiary); + border: 1px dashed var(--tertiary); + } + + &.active { + border-radius: var(--mint-border-radius); + transition: all 0.3s linear; + background: var(--mint-color-mint); + color: var(--secondary); + border: 1px solid var(--mint-color-mint); + } +} + +.select-kit.dropdown-select-box .dropdown-select-box-header { + background: var(--tertiary); + border-radius: var(--mint-border-radius); + border: 1px solid var(--tertiary); + color: var(--secondary); + + svg { + color: var(--secondary); + + &:hover { + color: var(--secondary); + } + } +} + +.d-editor-button-bar + .select-kit.dropdown-select-box + .dropdown-select-box-header { + background: transparent; + color: var(--primary-medium); + border: 1px solid transparent; + border-radius: 0; + + svg { + color: currentcolor; + } + + &:hover { + color: var(--secondary); + background: var(--tertiary-hover); + border: 1px solid var(--tertiary-hover); + border-radius: 5px; + } +} + +.discourse-no-touch .btn:hover .d-icon, +.discourse-no-touch .btn.btn-hover .d-icon { + color: var(--tertiary-hover); +} + +.discourse-no-touch .btn:not(.btn-flat):hover, +.discourse-no-touch .btn:not(.btn-flat).btn-hover { + color: var(--secondary); + background: var(--tertiary-hover); + border-radius: 5px; + + .fa { + color: var(--secondary); + } +} + +.menu-panel .widget-link:hover, +.menu-panel .widget-link:focus, +.menu-panel .categories-link:hover, +.menu-panel .categories-link:focus { + background-color: var(--tertiary-low); +} + +.btn-default { + color: var(--secondary); + background: var(--tertiary); + transition: all 0.3s linear; + border-radius: var(--mint-border-radius); + text-transform: uppercase; + border: 1px solid var(--tertiary); + + .fa { + color: var(--secondary); + } +} + +.btn-primary { + border-radius: var(--mint-border-radius); +} + +.discourse-no-touch .btn-danger:hover { + background: var(--danger-hover); +} + +.create { + border-radius: var(--mint-border-radius); +} + +.select-kit .select-kit-row.is-selected { + background-color: var(--secondary-very-high); +} + +.modal-inner-container, +.edit-category-footer { + .btn-primary { + border-radius: var(--mint-border-radius); + } +} + +.user-menu .quick-access-panel li:hover { + background-color: var(--tertiary-low); +} + +a:hover { + color: var(--tertiary-hover); +} + +.image-upload-controls .btn-default { + border: 1px solid var(--secondary); + + .fa { + color: var(--secondary); + } +} + +.admin-controls, +.email-template, +.admin-container { + .nav-pills > li a.active { + background: var(--tertiary); + color: var(--secondary); + } + + .btn-primary { + border-radius: var(--mint-border-radius); + } +} + +.custom-search-banner-wrap { + border-radius: var(--mint-border-radius); + background: linear-gradient( + 270deg, + var(--tertiary-medium) 0%, + var(--tertiary) 100% + ); +} + +.custom-search-banner-wrap .custom-search-banner-headline, +.custom-search-banner-wrap h1, +.custom-search-banner-wrap p { + color: var(--primary-very-low); +} + +summary.select-kit-header.single-select-header.dropdown-select-box-header { + padding: 0.5em; +} + +.search-container .search-advanced-sidebar { + .search-advanced-title { + background: var(--tertiary); + color: var(--secondary); + } + + .search-advanced-filters { + border: 1px dashed var(--tertiary); + } +} diff --git a/themes/24_mint_theme/desktop_scss.scss b/themes/24_mint_theme/desktop_scss.scss new file mode 100644 index 0000000..088ff2e --- /dev/null +++ b/themes/24_mint_theme/desktop_scss.scss @@ -0,0 +1,48 @@ +@import "variables"; + +body:not(.navigation-categories, .navigation-topics) #main-outlet { + border-radius: var(--mint-border-radius); + box-shadow: + 0 8px 60px 0 rgb(103, 151, 255, 0.1), + 0 12px 90px 0 rgb(133, 255, 103, 0.1); + padding: 2em; + border-top: 8px solid $tertiary; + margin-top: 1em; + + @include mint-card-bg; +} + +.boxed { + &.white { + @include mint-card-bg; + } +} + +#main-outlet::after { + content: ""; + display: block; + position: fixed; + z-index: -1; + width: 500px; + height: 500px; + border-radius: 2000px; + background: var(--color-circle-gradient); + right: 1px; + top: -57px; +} + +#main-outlet::before { + content: ""; + display: block; + position: fixed; + z-index: -1; + width: 300px; + height: 300px; + border-radius: 30px; + background: $color-square-webkit-gradient; + background: $color-square-gradient; + left: 70px; + top: 350px; + transform: rotate(74deg); + transform-origin: 0 100%; +} diff --git a/themes/24_mint_theme/extra_scss_chat.txt b/themes/24_mint_theme/extra_scss_chat.txt new file mode 100644 index 0000000..b1b4cc6 --- /dev/null +++ b/themes/24_mint_theme/extra_scss_chat.txt @@ -0,0 +1,35 @@ +html body.has-sidebar-page.has-full-page-chat { + #main-outlet-wrapper { + gap: 2em; + } + + #main-outlet { + padding: 0 !important; + } +} + +.chat-composer__wrapper { + background: transparent; +} + +.full-page-chat .chat-full-page-header { + background: var(--primary-very-low); +} + +.desktop-view .has-full-page-chat { + .chat-channel { + height: calc(100vh - (var(--header-offset) + 3em)); + } +} + +.chat-message-container, +.chat-transcript { + background: transparent; +} + +.chat-drawer .chat-drawer-container { + border-radius: var(--mint-border-radius) var(--mint-border-radius) 0 0; + box-shadow: + 0 8px 60px 0 rgb(103, 151, 255, 0.1), + 0 12px 90px 0 rgb(133, 255, 103, 0.1); +} diff --git a/themes/24_mint_theme/extra_scss_sidebar.txt b/themes/24_mint_theme/extra_scss_sidebar.txt new file mode 100644 index 0000000..c0132fe --- /dev/null +++ b/themes/24_mint_theme/extra_scss_sidebar.txt @@ -0,0 +1,29 @@ +:root { + --d-sidebar-highlight-background: var(--tertiary-low); + --d-sidebar-highlight-hover-background: var(--tertiary); + --d-sidebar-header-icon-color: var(--tertiary); +} + +#main-outlet-wrapper { + .sidebar-wrapper { + background-color: var(--primary-very-low); + box-shadow: + 0 8px 60px 0 rgb(103, 151, 255, 0.1), + 0 12px 90px 0 rgb(133, 255, 103, 0.1); + margin-top: 1em; + border-top: 8px solid var(--tertiary); + border-radius: var(--mint-border-radius); + height: calc( + var(--composer-vh, var(--1dvh)) * 100 - var(--header-offset, 0px) - 3em + ); + top: calc(var(--header-offset) + 1em); + + .sidebar-container { + border: none; + } + } +} + +.sidebar-footer-wrapper { + background: var(--primary-very-low); +} diff --git a/themes/24_mint_theme/extra_scss_variables.txt b/themes/24_mint_theme/extra_scss_variables.txt new file mode 100644 index 0000000..ed9d2b9 --- /dev/null +++ b/themes/24_mint_theme/extra_scss_variables.txt @@ -0,0 +1,27 @@ +@mixin mint-card-bg { + background: var(--primary-very-low); + + @media (prefers-color-scheme: light) { + // incorrect rule, see: https://github.com/stylelint-scss/stylelint-config-recommended-scss/issues/369 + /* stylelint-disable-next-line no-invalid-position-declaration */ + background: var(--header_background); + } +} + +:root { + --mint-border-radius: 10px; + --mint-hover-shadow: 4px 4px var(--tertiary-high); + --mint-color-mint: #75bdad; + --mint-color-blue: #e5f8ff; +} + +$color-square-gradient: linear-gradient( + 4deg, + rgb(143, 236, 202, 0.29) 55%, + rgb(74, 247, 255, 0.08) 100% +); +$color-square-webkit-gradient: -webkit-linear-gradient( + 4deg, + rgb(143, 236, 202, 0.29) 55%, + rgb(74, 247, 255, 0.08) 100% +); diff --git a/themes/24_mint_theme/javascript_discourse_connectors_above-main-container_mint-component-extensions.gjs b/themes/24_mint_theme/javascript_discourse_connectors_above-main-container_mint-component-extensions.gjs new file mode 100644 index 0000000..56242d8 --- /dev/null +++ b/themes/24_mint_theme/javascript_discourse_connectors_above-main-container_mint-component-extensions.gjs @@ -0,0 +1,19 @@ +/* eslint-disable ember/no-classic-components, ember/require-tagless-components */ +import Component from "@ember/component"; +import { classNames } from "@ember-decorators/component"; +import { optionalRequire } from "discourse/lib/utilities"; + +const SearchBanner = optionalRequire( + "discourse/plugins/discourse-search-banner/discourse/components/search-banner" +); + +@classNames("above-main-container-outlet", "mint-component-extensions") +export default class MintComponentExtensions extends Component { + +} diff --git a/themes/24_mint_theme/mobile_scss.scss b/themes/24_mint_theme/mobile_scss.scss new file mode 100644 index 0000000..ccdc203 --- /dev/null +++ b/themes/24_mint_theme/mobile_scss.scss @@ -0,0 +1,5 @@ +.navigation-categories { + .search-banner { + display: none; + } +} diff --git a/themes/24_mint_theme/theme.json b/themes/24_mint_theme/theme.json new file mode 100644 index 0000000..9d786dc --- /dev/null +++ b/themes/24_mint_theme/theme.json @@ -0,0 +1,123 @@ +{ + "id": 24, + "name": "Mint Theme", + "user_selectable": true, + "color_scheme": { + "id": 39, + "name": "mint-light", + "theme_id": 24, + "colors": { + "secondary": "f6fbfc", + "tertiary": "4f8a7c", + "quaternary": "e45735", + "header_background": "ffffff", + "header_primary": "111111", + "highlight": "ffff4d", + "selected": "e3efec", + "hover": "e3efec", + "danger": "c80001", + "success": "090", + "love": "fa6c8d", + "primary": "454545" + } + }, + "fields_count": 12, + "files": [ + { + "field_id": 682, + "target_id": 0, + "target_name": "common", + "name": "color_definitions", + "filename": "common_color_definitions.txt", + "bytes": 126 + }, + { + "field_id": 680, + "target_id": 0, + "target_name": "common", + "name": "screenshot_dark", + "filename": "common_screenshot_dark.txt", + "bytes": 0 + }, + { + "field_id": 679, + "target_id": 0, + "target_name": "common", + "name": "screenshot_light", + "filename": "common_screenshot_light.txt", + "bytes": 0 + }, + { + "field_id": 683, + "target_id": 0, + "target_name": "common", + "name": "scss", + "filename": "common_scss.scss", + "bytes": 6927 + }, + { + "field_id": 684, + "target_id": 1, + "target_name": "desktop", + "name": "scss", + "filename": "desktop_scss.scss", + "bytes": 924 + }, + { + "field_id": 687, + "target_id": 2, + "target_name": "mobile", + "name": "scss", + "filename": "mobile_scss.scss", + "bytes": 69 + }, + { + "field_id": 686, + "target_id": 4, + "target_name": "translations", + "name": "en", + "filename": "translations_en.yml", + "bytes": 118 + }, + { + "field_id": 688, + "target_id": 5, + "target_name": "extra_scss", + "name": "chat", + "filename": "extra_scss_chat.txt", + "bytes": 686 + }, + { + "field_id": 689, + "target_id": 5, + "target_name": "extra_scss", + "name": "sidebar", + "filename": "extra_scss_sidebar.txt", + "bytes": 755 + }, + { + "field_id": 690, + "target_id": 5, + "target_name": "extra_scss", + "name": "variables", + "filename": "extra_scss_variables.txt", + "bytes": 728 + }, + { + "field_id": 685, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/connectors/above-main-container/mint-component-extensions.gjs", + "filename": "javascript_discourse_connectors_above-main-container_mint-component-extensions.gjs", + "bytes": 641 + }, + { + "field_id": 681, + "target_id": 9, + "target_name": "about", + "name": "about", + "filename": "about_about.yml", + "bytes": 820 + } + ] +} \ No newline at end of file diff --git a/themes/24_mint_theme/translations_en.yml b/themes/24_mint_theme/translations_en.yml new file mode 100644 index 0000000..5258c1f --- /dev/null +++ b/themes/24_mint_theme/translations_en.yml @@ -0,0 +1,3 @@ +en: + theme_metadata: + description: "A minty colored theme with featured homepage categories and a search banner." diff --git a/themes/35_dracula_pro_ultra/common_scss.scss b/themes/35_dracula_pro_ultra/common_scss.scss new file mode 100644 index 0000000..8453d58 --- /dev/null +++ b/themes/35_dracula_pro_ultra/common_scss.scss @@ -0,0 +1,546 @@ +/* ═══════════════════════════════════════════════════════════════ + DRACULA PRO ULTRA — info-board.win + The definitive dark theme. Built for focus, built for coders. + ═══════════════════════════════════════════════════════════════ */ + +/* ── CUSTOM PROPERTIES ── */ +.d-header, +#main-outlet, +html body { + --dp-bg: #282a36; + --dp-bg-deep: #1e1f29; + --dp-surface: #21222c; + --dp-surface2: #2d2f3f; + --dp-border: #44475a; + --dp-border2: #363849; + --dp-fg: #f8f8f2; + --dp-comment: #6272a4; + --dp-purple: #bd93f9; + --dp-purple-dim: rgba(189,147,249,0.12); + --dp-pink: #ff79c6; + --dp-pink-dim: rgba(255,121,198,0.1); + --dp-cyan: #8be9fd; + --dp-green: #50fa7b; + --dp-yellow: #f1fa8c; + --dp-orange: #ffb86c; + --dp-red: #ff5555; + --dp-radius: 8px; + --dp-radius-lg: 12px; + --dp-transition: 0.15s ease; +} + +/* ── LAYOUT ── */ +#main-outlet .wrap, +.d-header .wrap { + max-width: 1420px; + padding: 0 36px; +} + +body { + font-family: -apple-system, "Inter", "Segoe UI", system-ui, sans-serif; + font-size: 15px; + line-height: 1.6; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* ── HEADER ── */ +.d-header { + background: var(--dp-bg-deep) !important; + border-bottom: 1px solid var(--dp-border) !important; + box-shadow: 0 1px 0 rgba(189,147,249,0.12), 0 4px 24px rgba(0,0,0,0.4) !important; + height: 62px; +} + +.d-header .wrap { display: flex; align-items: center; } + +.d-header-icons .btn.icon, +.d-header .icons .btn.icon { + color: var(--dp-comment) !important; + border-radius: var(--dp-radius); + padding: 7px; + transition: color var(--dp-transition), background var(--dp-transition); +} + +.d-header-icons .btn.icon:hover, +.d-header .icons .btn.icon:hover { + color: var(--dp-purple) !important; + background: var(--dp-purple-dim) !important; +} + +/* ── NAVIGATION PILLS ── */ +.nav-pills .nav-item a { + color: var(--dp-comment) !important; + border-radius: var(--dp-radius); + font-weight: 500; + font-size: 0.875rem; + padding: 6px 14px; + transition: color var(--dp-transition), background var(--dp-transition); +} + +.nav-pills .nav-item.active a, +.nav-pills .nav-item a:hover { + color: var(--dp-purple) !important; + background: var(--dp-purple-dim) !important; +} + +/* ── SIDEBAR ── */ +.sidebar-wrapper { + background: var(--dp-bg) !important; + border-right: 1px solid var(--dp-border2) !important; +} + +.sidebar-sections .sidebar-section-header-wrapper button { + color: var(--dp-comment) !important; + font-size: 0.67rem; + font-weight: 700; + letter-spacing: 0.1em; + text-transform: uppercase; +} + +.sidebar-sections .sidebar-section-link-wrapper a { + color: var(--dp-comment) !important; + border-radius: var(--dp-radius); + font-size: 0.875rem; + font-weight: 500; + padding: 6px 10px; + border-left: 2px solid transparent; + transition: all var(--dp-transition); +} + +.sidebar-sections .sidebar-section-link-wrapper a:hover { + color: var(--dp-fg) !important; + background: var(--dp-surface2) !important; +} + +.sidebar-sections .sidebar-section-link-wrapper a.active { + color: var(--dp-purple) !important; + background: var(--dp-purple-dim) !important; + border-left-color: var(--dp-purple); + font-weight: 600; +} + +/* ── TOPIC LIST ── */ +.topic-list thead th { + font-size: 0.7rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.09em; + color: var(--dp-comment) !important; + border-bottom: 1px solid var(--dp-border) !important; + background: transparent !important; + padding: 10px 12px; +} + +.topic-list tbody .topic-list-item { + border-bottom: 1px solid var(--dp-border2) !important; + transition: background var(--dp-transition); +} + +.topic-list tbody .topic-list-item:hover { + background: var(--dp-surface) !important; +} + +.topic-list .main-link a.title, +.topic-list .link-top-line a.title { + color: var(--dp-fg) !important; + font-weight: 600; + font-size: 0.925rem; + line-height: 1.4; + transition: color var(--dp-transition); +} + +.topic-list .main-link a.title:hover, +.topic-list .link-top-line a.title:hover { + color: var(--dp-purple) !important; +} + +.topic-list .link-bottom-line { margin-top: 5px; } + +.topic-list .topic-excerpt { + color: var(--dp-comment) !important; + font-size: 0.8rem; + line-height: 1.5; + margin-top: 4px; +} + +.topic-list .num a, +.topic-list .num { + color: var(--dp-comment) !important; + font-size: 0.82rem; +} + +.topic-list .posters .avatar { border-radius: 50%; } + +/* ── CATEGORY LIST ── */ +.category-list thead th { + font-size: 0.7rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.09em; + color: var(--dp-comment) !important; + border-bottom: 1px solid var(--dp-border) !important; + background: transparent !important; + padding: 10px 12px; +} + +.category-list tbody tr { + border-bottom: 1px solid var(--dp-border2) !important; + transition: background var(--dp-transition); +} + +.category-list tbody tr:hover { + background: var(--dp-surface) !important; +} + +.category-list td.category .category-name a { + color: var(--dp-fg) !important; + font-weight: 700; + font-size: 0.975rem; + transition: color var(--dp-transition); +} + +.category-list td.category .category-name a:hover { + color: var(--dp-purple) !important; +} + +.category-list td.category .category-description, +.category-list td.category p { + color: var(--dp-comment) !important; + font-size: 0.82rem; + margin-top: 4px; + line-height: 1.5; +} + +.subcategories .subcategory-list .category-name a { + color: var(--dp-comment) !important; + font-size: 0.82rem; + transition: color var(--dp-transition); +} + +.subcategories .subcategory-list .category-name a:hover { + color: var(--dp-purple) !important; +} + +/* ── POST CONTENT ── */ +.cooked { + font-size: 0.95rem; + line-height: 1.82; + color: var(--dp-fg) !important; +} + +.cooked p { margin: 0 0 1em; } + +.cooked a { + color: var(--dp-cyan) !important; + text-decoration: none; + border-bottom: 1px solid rgba(139,233,253,0.3); + transition: border-color var(--dp-transition), color var(--dp-transition); +} + +.cooked a:hover { + color: var(--dp-cyan) !important; + border-bottom-color: var(--dp-cyan); +} + +.cooked h1, .cooked h2, .cooked h3, +.cooked h4, .cooked h5, .cooked h6 { + font-weight: 700; + line-height: 1.3; + margin: 1.75em 0 0.65em; + padding-bottom: 8px; + border-bottom: 1px solid var(--dp-border); +} + +.cooked h1 { font-size: 1.7rem; color: var(--dp-pink) !important; font-weight: 800; } +.cooked h2 { font-size: 1.35rem; color: var(--dp-purple) !important; } +.cooked h3 { font-size: 1.1rem; color: var(--dp-cyan) !important; } +.cooked h4 { font-size: 0.975rem; color: var(--dp-yellow) !important; border-bottom: none; } +.cooked h5, .cooked h6 { font-size: 0.9rem; color: var(--dp-orange) !important; border-bottom: none; } + +.cooked code:not(pre code) { + background: var(--dp-surface) !important; + color: var(--dp-pink) !important; + border: 1px solid var(--dp-border) !important; + border-radius: 5px; + font-family: "JetBrains Mono", "Fira Code", "Cascadia Code", "Consolas", monospace; + font-size: 0.84em; + padding: 2px 7px; + font-variant-ligatures: contextual; +} + +.cooked pre { + background: var(--dp-bg-deep) !important; + border: 1px solid var(--dp-border) !important; + border-left: 4px solid var(--dp-purple) !important; + border-radius: 0 var(--dp-radius) var(--dp-radius) 0; + padding: 20px 22px; + margin: 18px 0; + overflow-x: auto; + position: relative; +} + +.cooked pre code { + background: transparent !important; + border: none !important; + padding: 0 !important; + color: var(--dp-green) !important; + font-family: "JetBrains Mono", "Fira Code", "Cascadia Code", "Consolas", monospace; + font-size: 0.875rem; + line-height: 1.7; + font-variant-ligatures: contextual; +} + +.cooked blockquote { + border-left: 4px solid var(--dp-purple) !important; + background: var(--dp-purple-dim) !important; + border-radius: 0 var(--dp-radius) var(--dp-radius) 0; + padding: 14px 20px; + margin: 18px 0; + color: var(--dp-fg) !important; + font-style: italic; +} + +.cooked blockquote p { margin: 0; } + +.cooked ul, .cooked ol { + padding-left: 1.5em; + margin: 0.75em 0; +} + +.cooked li { margin: 0.35em 0; } + +.cooked table { + border-collapse: collapse; + width: 100%; + margin: 18px 0; + border-radius: var(--dp-radius); + overflow: hidden; + border: 1px solid var(--dp-border); +} + +.cooked table th { + background: var(--dp-surface) !important; + color: var(--dp-purple) !important; + font-size: 0.78rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.06em; + padding: 11px 16px; + border-bottom: 2px solid var(--dp-border) !important; + text-align: left; +} + +.cooked table td { + padding: 10px 16px; + border-bottom: 1px solid var(--dp-border2) !important; + vertical-align: top; +} + +.cooked table tr:last-child td { border-bottom: none !important; } + +.cooked table tr:nth-child(even) td { + background: rgba(68,71,90,0.25) !important; +} + +.cooked hr { + border: none; + border-top: 1px solid var(--dp-border); + margin: 24px 0; +} + +/* ── TOPIC TITLE ── */ +.fancy-title, +#topic-title h1, +.title-wrapper h1 { + font-size: 1.55rem; + font-weight: 800; + line-height: 1.28; + letter-spacing: -0.02em; + color: var(--dp-fg) !important; +} + +/* ── BUTTONS ── */ +.btn { + border-radius: var(--dp-radius) !important; + font-weight: 600; + font-size: 0.875rem; + transition: all var(--dp-transition); +} + +.btn-primary { + background: var(--dp-purple) !important; + color: var(--dp-bg) !important; + border: none !important; + box-shadow: 0 2px 12px rgba(189,147,249,0.35); +} + +.btn-primary:hover { + background: #c9a8fc !important; + box-shadow: 0 4px 20px rgba(189,147,249,0.5) !important; +} + +.btn-default { + background: var(--dp-surface) !important; + border: 1px solid var(--dp-border) !important; + color: var(--dp-fg) !important; +} + +.btn-default:hover { + background: var(--dp-surface2) !important; + border-color: var(--dp-purple) !important; + color: var(--dp-purple) !important; +} + +.btn-danger { + background: var(--dp-red) !important; + border: none !important; + color: var(--dp-fg) !important; +} + +/* ── POST ACTIONS ── */ +.post-controls .actions .btn { + color: var(--dp-comment) !important; + background: transparent !important; + border-radius: var(--dp-radius) !important; + padding: 5px 10px; + font-size: 0.82rem; + transition: all var(--dp-transition); +} + +.post-controls .actions .btn:hover { + color: var(--dp-purple) !important; + background: var(--dp-purple-dim) !important; +} + +.post-controls .actions .btn.like-button.has-like .d-icon { + color: var(--dp-pink) !important; +} + +.post-controls .actions .btn.like-button.has-like:hover { + background: var(--dp-pink-dim) !important; +} + +/* ── TAGS ── */ +.discourse-tag { + background: var(--dp-purple-dim) !important; + color: var(--dp-purple) !important; + border: 1px solid rgba(189,147,249,0.3) !important; + border-radius: 20px !important; + font-size: 0.72rem; + font-weight: 600; + padding: 3px 10px !important; + transition: all var(--dp-transition); +} + +.discourse-tag:hover { + background: rgba(189,147,249,0.22) !important; + border-color: var(--dp-purple) !important; +} + +/* ── BADGE ── */ +.badge-notification { + background: var(--dp-purple) !important; + color: var(--dp-bg) !important; + border-radius: 10px; + font-size: 0.68rem; + font-weight: 700; + padding: 2px 7px; + min-width: 18px; +} + +.badge-notification.new-posts, +.badge-notification.unread-posts { + background: var(--dp-pink) !important; +} + +/* ── COMPOSER ── */ +.d-editor-textarea-wrapper { + border-radius: var(--dp-radius) !important; + border-color: var(--dp-border) !important; + background: var(--dp-surface) !important; + overflow: hidden; +} + +.d-editor-input { + font-family: "JetBrains Mono", "Fira Code", "Consolas", monospace !important; + font-size: 0.9rem !important; + line-height: 1.65 !important; + color: var(--dp-fg) !important; + background: var(--dp-surface) !important; +} + +.d-editor-preview { + background: var(--dp-bg-deep) !important; + border-left: 1px solid var(--dp-border) !important; +} + +/* ── FORM INPUTS ── */ +input[type="text"], input[type="email"], +input[type="password"], input[type="search"], +textarea, select { + border-radius: var(--dp-radius) !important; + padding: 8px 12px !important; + border-color: var(--dp-border) !important; + transition: border-color var(--dp-transition), box-shadow var(--dp-transition); +} + +input:focus, textarea:focus, select:focus { + border-color: var(--dp-purple) !important; + box-shadow: 0 0 0 3px rgba(189,147,249,0.15) !important; + outline: none !important; +} + +/* ── NOTIFICATIONS ── */ +.notification-item.unread, +.notification.unread { + background: rgba(189,147,249,0.06) !important; + border-left: 2px solid var(--dp-purple) !important; +} + +/* ── STATUS ── */ +.topic-status .d-icon-thumbtack { color: var(--dp-yellow) !important; } +.topic-status .d-icon-lock { color: var(--dp-comment) !important; } +.topic-status .d-icon-far-eye { color: var(--dp-cyan) !important; } + +/* ── USER CARD ── */ +.user-card, .group-card { + border-radius: var(--dp-radius-lg) !important; + box-shadow: 0 12px 40px rgba(0,0,0,0.55) !important; + border: 1px solid var(--dp-border) !important; + overflow: hidden; +} + +/* ── SEARCH ── */ +.search-menu-container input[type="text"] { + border-radius: var(--dp-radius) !important; + padding: 9px 14px !important; + font-size: 0.9rem; +} + +/* ── TOPIC POST ── */ +.topic-post article.boxed, +.post-stream .topic-post { + border-bottom: 1px solid var(--dp-border2) !important; + padding: 20px 0; +} + +/* ── SCROLLBAR ── */ +::-webkit-scrollbar { width: 6px; height: 6px; } +::-webkit-scrollbar-track { background: var(--dp-bg-deep); } +::-webkit-scrollbar-thumb { background: var(--dp-border); border-radius: 3px; } +::-webkit-scrollbar-thumb:hover { background: var(--dp-comment); } + +/* ── RESPONSIVE ── */ +@media (max-width: 1100px) { + #main-outlet .wrap, + .d-header .wrap { padding: 0 20px; } +} + +@media (max-width: 768px) { + body { font-size: 14px; } + .fancy-title, #topic-title h1 { font-size: 1.2rem; } + .cooked { font-size: 0.9rem; } + #main-outlet .wrap, + .d-header .wrap { padding: 0 14px; } +} diff --git a/themes/35_dracula_pro_ultra/theme.json b/themes/35_dracula_pro_ultra/theme.json new file mode 100644 index 0000000..1bbd7d1 --- /dev/null +++ b/themes/35_dracula_pro_ultra/theme.json @@ -0,0 +1,36 @@ +{ + "id": 35, + "name": "Dracula Pro Ultra", + "user_selectable": true, + "color_scheme": { + "id": 45, + "name": "Dracula Pro Ultra", + "theme_id": null, + "colors": { + "header_background": "1e1f29", + "header_primary": "f8f8f2", + "highlight": "f1fa8c", + "danger": "ff5555", + "success": "50fa7b", + "love": "ff79c6", + "secondary": "282a36", + "quaternary": "ff79c6", + "highlight_text": "282a36", + "selected": "44475a", + "primary": "f8f8f2", + "tertiary": "bd93f9", + "hover": "21222c" + } + }, + "fields_count": 1, + "files": [ + { + "field_id": 714, + "target_id": 0, + "target_name": "common", + "name": "scss", + "filename": "common_scss.scss", + "bytes": 14040 + } + ] +} \ No newline at end of file diff --git a/themes/36_tokyo_night_storm/common_scss.scss b/themes/36_tokyo_night_storm/common_scss.scss new file mode 100644 index 0000000..ce3186d --- /dev/null +++ b/themes/36_tokyo_night_storm/common_scss.scss @@ -0,0 +1,443 @@ +/* ═══════════════════════════════════════════════════════════════ + TOKYO NIGHT STORM — info-board.win + Deep navy. Electric blue. Built for night owls and coders. + ═══════════════════════════════════════════════════════════════ */ + +.d-header, +#main-outlet, +html body { + --tn-bg: #1a1b2e; + --tn-bg-deep: #13141f; + --tn-surface: #1f2033; + --tn-surface2: #252640; + --tn-border: #2a2d3e; + --tn-border2: #222336; + --tn-fg: #c0caf5; + --tn-fg-dim: #787c99; + --tn-fg-muted: #565f89; + --tn-blue: #7aa2f7; + --tn-blue-dim: rgba(122,162,247,0.12); + --tn-violet: #bb9af7; + --tn-violet-dim: rgba(187,154,247,0.1); + --tn-cyan: #7dcfff; + --tn-green: #9ece6a; + --tn-gold: #e0af68; + --tn-rose: #f7768e; + --tn-orange: #ff9e64; + --tn-radius: 8px; + --tn-radius-lg: 13px; + --tn-t: 0.15s ease; +} + +/* ── LAYOUT ── */ +#main-outlet .wrap, +.d-header .wrap { + max-width: 1420px; + padding: 0 36px; +} + +body { + font-family: -apple-system, "Inter", "Segoe UI", system-ui, sans-serif; + font-size: 15px; + line-height: 1.6; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* ── HEADER ── */ +.d-header { + background: var(--tn-bg-deep) !important; + border-bottom: 1px solid var(--tn-border) !important; + box-shadow: 0 1px 0 rgba(122,162,247,0.1), 0 4px 20px rgba(0,0,0,0.5) !important; + height: 62px; +} + +.d-header-icons .btn.icon, +.d-header .icons .btn.icon { + color: var(--tn-fg-muted) !important; + border-radius: var(--tn-radius); + transition: color var(--tn-t), background var(--tn-t); +} + +.d-header-icons .btn.icon:hover, +.d-header .icons .btn.icon:hover { + color: var(--tn-blue) !important; + background: var(--tn-blue-dim) !important; +} + +/* ── NAV ── */ +.nav-pills .nav-item a { + color: var(--tn-fg-muted) !important; + border-radius: var(--tn-radius); + font-weight: 500; + font-size: 0.875rem; + padding: 6px 14px; + transition: all var(--tn-t); +} + +.nav-pills .nav-item.active a, +.nav-pills .nav-item a:hover { + color: var(--tn-blue) !important; + background: var(--tn-blue-dim) !important; +} + +/* ── SIDEBAR ── */ +.sidebar-wrapper { + background: var(--tn-bg) !important; + border-right: 1px solid var(--tn-border2) !important; +} + +.sidebar-sections .sidebar-section-header-wrapper button { + color: var(--tn-fg-muted) !important; + font-size: 0.67rem; + font-weight: 700; + letter-spacing: 0.1em; + text-transform: uppercase; +} + +.sidebar-sections .sidebar-section-link-wrapper a { + color: var(--tn-fg-dim) !important; + border-radius: var(--tn-radius); + font-size: 0.875rem; + font-weight: 500; + padding: 6px 10px; + border-left: 2px solid transparent; + transition: all var(--tn-t); +} + +.sidebar-sections .sidebar-section-link-wrapper a:hover { + color: var(--tn-fg) !important; + background: var(--tn-surface2) !important; +} + +.sidebar-sections .sidebar-section-link-wrapper a.active { + color: var(--tn-blue) !important; + background: var(--tn-blue-dim) !important; + border-left-color: var(--tn-blue); + font-weight: 600; +} + +/* ── TOPIC LIST ── */ +.topic-list thead th { + font-size: 0.7rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.09em; + color: var(--tn-fg-muted) !important; + border-bottom: 1px solid var(--tn-border) !important; + background: transparent !important; + padding: 10px 12px; +} + +.topic-list tbody .topic-list-item { + border-bottom: 1px solid var(--tn-border2) !important; + transition: background var(--tn-t); +} + +.topic-list tbody .topic-list-item:hover { + background: var(--tn-surface) !important; +} + +.topic-list .main-link a.title, +.topic-list .link-top-line a.title { + color: var(--tn-fg) !important; + font-weight: 600; + font-size: 0.925rem; + line-height: 1.4; + transition: color var(--tn-t); +} + +.topic-list .main-link a.title:hover, +.topic-list .link-top-line a.title:hover { + color: var(--tn-blue) !important; +} + +.topic-list .link-bottom-line { margin-top: 5px; } + +.topic-list .topic-excerpt { + color: var(--tn-fg-muted) !important; + font-size: 0.8rem; + line-height: 1.5; + margin-top: 4px; +} + +.topic-list .num a, +.topic-list .num { color: var(--tn-fg-muted) !important; font-size: 0.82rem; } + +/* ── CATEGORY LIST ── */ +.category-list thead th { + font-size: 0.7rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.09em; + color: var(--tn-fg-muted) !important; + border-bottom: 1px solid var(--tn-border) !important; + background: transparent !important; + padding: 10px 12px; +} + +.category-list tbody tr { + border-bottom: 1px solid var(--tn-border2) !important; + transition: background var(--tn-t); +} + +.category-list tbody tr:hover { background: var(--tn-surface) !important; } + +.category-list td.category .category-name a { + color: var(--tn-fg) !important; + font-weight: 700; + font-size: 0.975rem; + transition: color var(--tn-t); +} + +.category-list td.category .category-name a:hover { color: var(--tn-blue) !important; } + +.category-list td.category .category-description, +.category-list td.category p { + color: var(--tn-fg-muted) !important; + font-size: 0.82rem; + margin-top: 4px; + line-height: 1.5; +} + +/* ── POST CONTENT ── */ +.cooked { + font-size: 0.95rem; + line-height: 1.82; + color: var(--tn-fg) !important; +} + +.cooked p { margin: 0 0 1em; } + +.cooked a { + color: var(--tn-blue) !important; + text-decoration: none; + border-bottom: 1px solid rgba(122,162,247,0.3); + transition: border-color var(--tn-t); +} + +.cooked a:hover { border-bottom-color: var(--tn-blue); } + +.cooked h1, .cooked h2, .cooked h3, +.cooked h4, .cooked h5, .cooked h6 { + font-weight: 700; + line-height: 1.3; + margin: 1.75em 0 0.65em; + padding-bottom: 8px; + border-bottom: 1px solid var(--tn-border); +} + +.cooked h1 { font-size: 1.7rem; color: var(--tn-violet) !important; font-weight: 800; } +.cooked h2 { font-size: 1.35rem; color: var(--tn-blue) !important; } +.cooked h3 { font-size: 1.1rem; color: var(--tn-cyan) !important; } +.cooked h4 { font-size: 0.975rem; color: var(--tn-gold) !important; border-bottom: none; } +.cooked h5, .cooked h6 { font-size: 0.9rem; color: var(--tn-orange) !important; border-bottom: none; } + +.cooked code:not(pre code) { + background: var(--tn-surface) !important; + color: var(--tn-violet) !important; + border: 1px solid var(--tn-border) !important; + border-radius: 5px; + font-family: "JetBrains Mono", "Fira Code", "Cascadia Code", "Consolas", monospace; + font-size: 0.84em; + padding: 2px 7px; +} + +.cooked pre { + background: var(--tn-bg-deep) !important; + border: 1px solid var(--tn-border) !important; + border-left: 4px solid var(--tn-blue) !important; + border-radius: 0 var(--tn-radius) var(--tn-radius) 0; + padding: 20px 22px; + margin: 18px 0; + overflow-x: auto; +} + +.cooked pre code { + background: transparent !important; + border: none !important; + padding: 0 !important; + color: var(--tn-green) !important; + font-family: "JetBrains Mono", "Fira Code", "Cascadia Code", "Consolas", monospace; + font-size: 0.875rem; + line-height: 1.7; +} + +.cooked blockquote { + border-left: 4px solid var(--tn-violet) !important; + background: var(--tn-violet-dim) !important; + border-radius: 0 var(--tn-radius) var(--tn-radius) 0; + padding: 14px 20px; + margin: 18px 0; + color: var(--tn-fg) !important; + font-style: italic; +} + +.cooked blockquote p { margin: 0; } + +.cooked ul, .cooked ol { padding-left: 1.5em; margin: 0.75em 0; } +.cooked li { margin: 0.35em 0; } + +.cooked table { + border-collapse: collapse; + width: 100%; + margin: 18px 0; + border: 1px solid var(--tn-border); + border-radius: var(--tn-radius); + overflow: hidden; +} + +.cooked table th { + background: var(--tn-surface) !important; + color: var(--tn-blue) !important; + font-size: 0.78rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.06em; + padding: 11px 16px; + border-bottom: 2px solid var(--tn-border) !important; + text-align: left; +} + +.cooked table td { + padding: 10px 16px; + border-bottom: 1px solid var(--tn-border2) !important; +} + +.cooked table tr:last-child td { border-bottom: none !important; } +.cooked table tr:nth-child(even) td { background: rgba(31,32,51,0.5) !important; } + +.cooked hr { border: none; border-top: 1px solid var(--tn-border); margin: 24px 0; } + +/* ── TOPIC TITLE ── */ +.fancy-title, #topic-title h1, .title-wrapper h1 { + font-size: 1.55rem; + font-weight: 800; + line-height: 1.28; + letter-spacing: -0.02em; + color: var(--tn-fg) !important; +} + +/* ── BUTTONS ── */ +.btn { border-radius: var(--tn-radius) !important; font-weight: 600; font-size: 0.875rem; transition: all var(--tn-t); } + +.btn-primary { + background: var(--tn-blue) !important; + color: var(--tn-bg-deep) !important; + border: none !important; + box-shadow: 0 2px 12px rgba(122,162,247,0.35); +} + +.btn-primary:hover { + background: #8fb3ff !important; + box-shadow: 0 4px 20px rgba(122,162,247,0.5) !important; +} + +.btn-default { + background: var(--tn-surface) !important; + border: 1px solid var(--tn-border) !important; + color: var(--tn-fg) !important; +} + +.btn-default:hover { + background: var(--tn-surface2) !important; + border-color: var(--tn-blue) !important; + color: var(--tn-blue) !important; +} + +/* ── POST ACTIONS ── */ +.post-controls .actions .btn { + color: var(--tn-fg-muted) !important; + background: transparent !important; + border-radius: var(--tn-radius) !important; + padding: 5px 10px; + font-size: 0.82rem; + transition: all var(--tn-t); +} + +.post-controls .actions .btn:hover { + color: var(--tn-blue) !important; + background: var(--tn-blue-dim) !important; +} + +.post-controls .actions .btn.like-button.has-like .d-icon { color: var(--tn-rose) !important; } + +/* ── TAGS ── */ +.discourse-tag { + background: var(--tn-blue-dim) !important; + color: var(--tn-blue) !important; + border: 1px solid rgba(122,162,247,0.3) !important; + border-radius: 20px !important; + font-size: 0.72rem; + font-weight: 600; + padding: 3px 10px !important; + transition: all var(--tn-t); +} + +.discourse-tag:hover { background: rgba(122,162,247,0.2) !important; } + +/* ── BADGE ── */ +.badge-notification { + background: var(--tn-blue) !important; + color: var(--tn-bg-deep) !important; + border-radius: 10px; + font-size: 0.68rem; + font-weight: 700; + padding: 2px 7px; +} + +/* ── COMPOSER ── */ +.d-editor-textarea-wrapper { + border-radius: var(--tn-radius) !important; + border-color: var(--tn-border) !important; + background: var(--tn-surface) !important; + overflow: hidden; +} + +.d-editor-input { + font-family: "JetBrains Mono", "Fira Code", "Consolas", monospace !important; + font-size: 0.9rem !important; + line-height: 1.65 !important; +} + +.d-editor-preview { background: var(--tn-bg-deep) !important; border-left: 1px solid var(--tn-border) !important; } + +/* ── INPUTS ── */ +input[type="text"], input[type="email"], +input[type="password"], textarea, select { + border-radius: var(--tn-radius) !important; + padding: 8px 12px !important; + border-color: var(--tn-border) !important; + transition: border-color var(--tn-t), box-shadow var(--tn-t); +} + +input:focus, textarea:focus, select:focus { + border-color: var(--tn-blue) !important; + box-shadow: 0 0 0 3px rgba(122,162,247,0.15) !important; + outline: none !important; +} + +/* ── USER CARD ── */ +.user-card, .group-card { + border-radius: var(--tn-radius-lg) !important; + box-shadow: 0 12px 40px rgba(0,0,0,0.6) !important; + border: 1px solid var(--tn-border) !important; +} + +/* ── NOTIFICATIONS ── */ +.notification.unread { background: rgba(122,162,247,0.06) !important; border-left: 2px solid var(--tn-blue) !important; } + +/* ── SCROLLBAR ── */ +::-webkit-scrollbar { width: 6px; height: 6px; } +::-webkit-scrollbar-track { background: var(--tn-bg-deep); } +::-webkit-scrollbar-thumb { background: var(--tn-border); border-radius: 3px; } +::-webkit-scrollbar-thumb:hover { background: var(--tn-fg-muted); } + +/* ── RESPONSIVE ── */ +@media (max-width: 1100px) { #main-outlet .wrap, .d-header .wrap { padding: 0 20px; } } +@media (max-width: 768px) { + body { font-size: 14px; } + .fancy-title, #topic-title h1 { font-size: 1.2rem; } + .cooked { font-size: 0.9rem; } + #main-outlet .wrap, .d-header .wrap { padding: 0 14px; } +} diff --git a/themes/36_tokyo_night_storm/theme.json b/themes/36_tokyo_night_storm/theme.json new file mode 100644 index 0000000..3526f41 --- /dev/null +++ b/themes/36_tokyo_night_storm/theme.json @@ -0,0 +1,36 @@ +{ + "id": 36, + "name": "Tokyo Night Storm", + "user_selectable": true, + "color_scheme": { + "id": 41, + "name": "Tokyo Night Storm", + "theme_id": null, + "colors": { + "highlight": "e0af68", + "danger": "f7768e", + "success": "9ece6a", + "love": "f7768e", + "primary": "c0caf5", + "tertiary": "7aa2f7", + "header_primary": "c0caf5", + "secondary": "1a1b2e", + "header_background": "13141f", + "highlight_text": "1a1b2e", + "selected": "2a2d3e", + "hover": "1f2033", + "quaternary": "bb9af7" + } + }, + "fields_count": 1, + "files": [ + { + "field_id": 715, + "target_id": 0, + "target_name": "common", + "name": "scss", + "filename": "common_scss.scss", + "bytes": 12133 + } + ] +} \ No newline at end of file diff --git a/themes/37_onyx/common_scss.scss b/themes/37_onyx/common_scss.scss new file mode 100644 index 0000000..de48a5a --- /dev/null +++ b/themes/37_onyx/common_scss.scss @@ -0,0 +1,470 @@ +/* ═══════════════════════════════════════════════════════════════ + ONYX — info-board.win + Ultra-premium. Near-black. Violet + Cyan. Inspired by Linear. + For the professional who demands perfection. + ═══════════════════════════════════════════════════════════════ */ + +.d-header, +#main-outlet, +html body { + --ox-bg: #09090b; + --ox-bg2: #0d0d10; + --ox-surface: #18181b; + --ox-surface2: #1f1f23; + --ox-border: #27272a; + --ox-border2: #1e1e21; + --ox-fg: #fafafa; + --ox-fg-dim: #a1a1aa; + --ox-fg-muted: #71717a; + --ox-violet: #8b5cf6; + --ox-violet-dim: rgba(139,92,246,0.12); + --ox-cyan: #06b6d4; + --ox-cyan-dim: rgba(6,182,212,0.1); + --ox-emerald: #10b981; + --ox-amber: #f59e0b; + --ox-rose: #f43f5e; + --ox-pink: #f472b6; + --ox-radius: 7px; + --ox-radius-lg: 12px; + --ox-t: 0.13s ease; +} + +/* ── LAYOUT ── */ +#main-outlet .wrap, +.d-header .wrap { + max-width: 1420px; + padding: 0 40px; +} + +body { + font-family: -apple-system, "Inter", "SF Pro Text", "Segoe UI", system-ui, sans-serif; + font-size: 15px; + line-height: 1.6; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + letter-spacing: -0.005em; +} + +/* ── HEADER ── */ +.d-header { + background: rgba(9,9,11,0.96) !important; + border-bottom: 1px solid var(--ox-border) !important; + box-shadow: 0 1px 0 rgba(255,255,255,0.04) !important; + height: 60px; + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); +} + +.d-header-icons .btn.icon, +.d-header .icons .btn.icon { + color: var(--ox-fg-muted) !important; + border-radius: var(--ox-radius); + transition: color var(--ox-t), background var(--ox-t); +} + +.d-header-icons .btn.icon:hover, +.d-header .icons .btn.icon:hover { + color: var(--ox-violet) !important; + background: var(--ox-violet-dim) !important; +} + +/* ── NAV ── */ +.nav-pills .nav-item a { + color: var(--ox-fg-muted) !important; + border-radius: var(--ox-radius); + font-weight: 500; + font-size: 0.875rem; + padding: 6px 14px; + letter-spacing: -0.01em; + transition: all var(--ox-t); +} + +.nav-pills .nav-item.active a, +.nav-pills .nav-item a:hover { + color: var(--ox-fg) !important; + background: var(--ox-surface) !important; +} + +/* ── SIDEBAR ── */ +.sidebar-wrapper { + background: var(--ox-bg) !important; + border-right: 1px solid var(--ox-border) !important; +} + +.sidebar-sections .sidebar-section-header-wrapper button { + color: var(--ox-fg-muted) !important; + font-size: 0.65rem; + font-weight: 700; + letter-spacing: 0.1em; + text-transform: uppercase; +} + +.sidebar-sections .sidebar-section-link-wrapper a { + color: var(--ox-fg-dim) !important; + border-radius: var(--ox-radius); + font-size: 0.875rem; + font-weight: 450; + padding: 6px 10px; + letter-spacing: -0.01em; + transition: all var(--ox-t); +} + +.sidebar-sections .sidebar-section-link-wrapper a:hover { + color: var(--ox-fg) !important; + background: var(--ox-surface) !important; +} + +.sidebar-sections .sidebar-section-link-wrapper a.active { + color: var(--ox-violet) !important; + background: var(--ox-violet-dim) !important; + font-weight: 600; +} + +/* ── TOPIC LIST ── */ +.topic-list thead th { + font-size: 0.68rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.08em; + color: var(--ox-fg-muted) !important; + border-bottom: 1px solid var(--ox-border) !important; + background: transparent !important; + padding: 10px 12px; +} + +.topic-list tbody .topic-list-item { + border-bottom: 1px solid var(--ox-border2) !important; + transition: background var(--ox-t); +} + +.topic-list tbody .topic-list-item:hover { + background: var(--ox-surface) !important; +} + +.topic-list .main-link a.title, +.topic-list .link-top-line a.title { + color: var(--ox-fg) !important; + font-weight: 560; + font-size: 0.9rem; + line-height: 1.45; + letter-spacing: -0.015em; + transition: color var(--ox-t); +} + +.topic-list .main-link a.title:hover, +.topic-list .link-top-line a.title:hover { + color: var(--ox-violet) !important; +} + +.topic-list .link-bottom-line { margin-top: 5px; } + +.topic-list .topic-excerpt { + color: var(--ox-fg-muted) !important; + font-size: 0.8rem; + line-height: 1.5; + margin-top: 4px; +} + +.topic-list .num a, +.topic-list .num { color: var(--ox-fg-muted) !important; font-size: 0.82rem; } + +/* ── CATEGORY LIST ── */ +.category-list thead th { + font-size: 0.68rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.08em; + color: var(--ox-fg-muted) !important; + border-bottom: 1px solid var(--ox-border) !important; + background: transparent !important; + padding: 10px 12px; +} + +.category-list tbody tr { + border-bottom: 1px solid var(--ox-border2) !important; + transition: background var(--ox-t); +} + +.category-list tbody tr:hover { background: var(--ox-surface) !important; } + +.category-list td.category .category-name a { + color: var(--ox-fg) !important; + font-weight: 650; + font-size: 0.95rem; + letter-spacing: -0.01em; + transition: color var(--ox-t); +} + +.category-list td.category .category-name a:hover { color: var(--ox-violet) !important; } + +.category-list td.category .category-description, +.category-list td.category p { + color: var(--ox-fg-muted) !important; + font-size: 0.81rem; + margin-top: 4px; + line-height: 1.5; +} + +/* ── POST CONTENT ── */ +.cooked { + font-size: 0.95rem; + line-height: 1.85; + color: var(--ox-fg) !important; + letter-spacing: -0.005em; +} + +.cooked p { margin: 0 0 1.1em; } + +.cooked a { + color: var(--ox-violet) !important; + text-decoration: none; + border-bottom: 1px solid rgba(139,92,246,0.3); + transition: border-color var(--ox-t); +} + +.cooked a:hover { border-bottom-color: var(--ox-violet); } + +.cooked h1, .cooked h2, .cooked h3, +.cooked h4, .cooked h5, .cooked h6 { + font-weight: 700; + line-height: 1.28; + margin: 1.8em 0 0.65em; + padding-bottom: 9px; + border-bottom: 1px solid var(--ox-border); + letter-spacing: -0.025em; +} + +.cooked h1 { font-size: 1.65rem; color: var(--ox-fg) !important; font-weight: 800; } +.cooked h2 { font-size: 1.3rem; color: var(--ox-fg) !important; } +.cooked h3 { font-size: 1.08rem; color: var(--ox-violet) !important; } +.cooked h4 { font-size: 0.95rem; color: var(--ox-cyan) !important; border-bottom: none; } +.cooked h5, .cooked h6 { font-size: 0.875rem; color: var(--ox-fg-dim) !important; border-bottom: none; } + +.cooked code:not(pre code) { + background: var(--ox-surface2) !important; + color: var(--ox-cyan) !important; + border: 1px solid var(--ox-border) !important; + border-radius: 5px; + font-family: "JetBrains Mono", "Fira Code", "Cascadia Code", "Consolas", monospace; + font-size: 0.83em; + padding: 2px 7px; + letter-spacing: 0; +} + +.cooked pre { + background: var(--ox-bg2) !important; + border: 1px solid var(--ox-border) !important; + border-left: 4px solid var(--ox-violet) !important; + border-radius: 0 var(--ox-radius) var(--ox-radius) 0; + padding: 20px 22px; + margin: 18px 0; + overflow-x: auto; +} + +.cooked pre code { + background: transparent !important; + border: none !important; + padding: 0 !important; + color: var(--ox-emerald) !important; + font-family: "JetBrains Mono", "Fira Code", "Cascadia Code", "Consolas", monospace; + font-size: 0.875rem; + line-height: 1.72; + letter-spacing: 0; +} + +.cooked blockquote { + border-left: 4px solid var(--ox-violet) !important; + background: var(--ox-violet-dim) !important; + border-radius: 0 var(--ox-radius) var(--ox-radius) 0; + padding: 14px 20px; + margin: 18px 0; + color: var(--ox-fg-dim) !important; + font-style: italic; +} + +.cooked blockquote p { margin: 0; } + +.cooked ul, .cooked ol { padding-left: 1.5em; margin: 0.8em 0; } +.cooked li { margin: 0.4em 0; } + +.cooked table { + border-collapse: collapse; + width: 100%; + margin: 18px 0; + border: 1px solid var(--ox-border); + border-radius: var(--ox-radius); + overflow: hidden; +} + +.cooked table th { + background: var(--ox-surface) !important; + color: var(--ox-fg-dim) !important; + font-size: 0.74rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.07em; + padding: 11px 16px; + border-bottom: 1px solid var(--ox-border) !important; + text-align: left; +} + +.cooked table td { + padding: 10px 16px; + border-bottom: 1px solid var(--ox-border2) !important; + color: var(--ox-fg-dim) !important; +} + +.cooked table tr:last-child td { border-bottom: none !important; } +.cooked table tr:nth-child(even) td { background: rgba(24,24,27,0.6) !important; } + +.cooked hr { border: none; border-top: 1px solid var(--ox-border); margin: 24px 0; } + +/* ── TOPIC TITLE ── */ +.fancy-title, #topic-title h1, .title-wrapper h1 { + font-size: 1.5rem; + font-weight: 800; + line-height: 1.28; + letter-spacing: -0.03em; + color: var(--ox-fg) !important; +} + +/* ── BUTTONS ── */ +.btn { + border-radius: var(--ox-radius) !important; + font-weight: 600; + font-size: 0.875rem; + letter-spacing: -0.01em; + transition: all var(--ox-t); +} + +.btn-primary { + background: var(--ox-violet) !important; + color: #fff !important; + border: none !important; + box-shadow: 0 2px 8px rgba(139,92,246,0.3); +} + +.btn-primary:hover { + background: #9d6ef8 !important; + box-shadow: 0 4px 18px rgba(139,92,246,0.45) !important; +} + +.btn-default { + background: var(--ox-surface) !important; + border: 1px solid var(--ox-border) !important; + color: var(--ox-fg-dim) !important; +} + +.btn-default:hover { + background: var(--ox-surface2) !important; + border-color: var(--ox-fg-muted) !important; + color: var(--ox-fg) !important; +} + +/* ── POST ACTIONS ── */ +.post-controls .actions .btn { + color: var(--ox-fg-muted) !important; + background: transparent !important; + border-radius: var(--ox-radius) !important; + padding: 5px 10px; + font-size: 0.82rem; + transition: all var(--ox-t); +} + +.post-controls .actions .btn:hover { + color: var(--ox-fg-dim) !important; + background: var(--ox-surface) !important; +} + +.post-controls .actions .btn.like-button.has-like .d-icon { color: var(--ox-rose) !important; } + +/* ── TAGS ── */ +.discourse-tag { + background: var(--ox-surface2) !important; + color: var(--ox-fg-dim) !important; + border: 1px solid var(--ox-border) !important; + border-radius: 5px !important; + font-size: 0.71rem; + font-weight: 600; + padding: 3px 9px !important; + letter-spacing: 0.01em; + transition: all var(--ox-t); +} + +.discourse-tag:hover { + background: var(--ox-violet-dim) !important; + color: var(--ox-violet) !important; + border-color: rgba(139,92,246,0.3) !important; +} + +/* ── BADGE ── */ +.badge-notification { + background: var(--ox-violet) !important; + color: #fff !important; + border-radius: 8px; + font-size: 0.68rem; + font-weight: 700; + padding: 2px 7px; +} + +/* ── COMPOSER ── */ +.d-editor-textarea-wrapper { + border-radius: var(--ox-radius) !important; + border-color: var(--ox-border) !important; + background: var(--ox-surface) !important; + overflow: hidden; +} + +.d-editor-input { + font-family: "JetBrains Mono", "Fira Code", "Consolas", monospace !important; + font-size: 0.9rem !important; + line-height: 1.65 !important; + letter-spacing: 0 !important; +} + +.d-editor-preview { background: var(--ox-bg2) !important; border-left: 1px solid var(--ox-border) !important; } + +/* ── INPUTS ── */ +input[type="text"], input[type="email"], +input[type="password"], textarea, select { + border-radius: var(--ox-radius) !important; + padding: 8px 12px !important; + border-color: var(--ox-border) !important; + background: var(--ox-surface) !important; + color: var(--ox-fg) !important; + transition: border-color var(--ox-t), box-shadow var(--ox-t); +} + +input:focus, textarea:focus, select:focus { + border-color: var(--ox-violet) !important; + box-shadow: 0 0 0 3px rgba(139,92,246,0.12) !important; + outline: none !important; +} + +/* ── USER CARD ── */ +.user-card, .group-card { + border-radius: var(--ox-radius-lg) !important; + box-shadow: 0 12px 40px rgba(0,0,0,0.7), 0 0 0 1px var(--ox-border) !important; +} + +/* ── NOTIFICATIONS ── */ +.notification.unread { background: rgba(139,92,246,0.06) !important; border-left: 2px solid var(--ox-violet) !important; } + +/* ── STATUS ICONS ── */ +.topic-status .d-icon-thumbtack { color: var(--ox-amber) !important; } +.topic-status .d-icon-lock { color: var(--ox-fg-muted) !important; } + +/* ── SCROLLBAR ── */ +::-webkit-scrollbar { width: 5px; height: 5px; } +::-webkit-scrollbar-track { background: var(--ox-bg); } +::-webkit-scrollbar-thumb { background: var(--ox-border); border-radius: 3px; } +::-webkit-scrollbar-thumb:hover { background: var(--ox-fg-muted); } + +/* ── RESPONSIVE ── */ +@media (max-width: 1100px) { #main-outlet .wrap, .d-header .wrap { padding: 0 20px; } } +@media (max-width: 768px) { + body { font-size: 14px; letter-spacing: 0; } + .fancy-title, #topic-title h1 { font-size: 1.2rem; } + .cooked { font-size: 0.9rem; } + #main-outlet .wrap, .d-header .wrap { padding: 0 14px; } +} diff --git a/themes/37_onyx/theme.json b/themes/37_onyx/theme.json new file mode 100644 index 0000000..860d507 --- /dev/null +++ b/themes/37_onyx/theme.json @@ -0,0 +1,36 @@ +{ + "id": 37, + "name": "Onyx", + "user_selectable": true, + "color_scheme": { + "id": 42, + "name": "Onyx", + "theme_id": null, + "colors": { + "primary": "fafafa", + "secondary": "09090b", + "tertiary": "8b5cf6", + "quaternary": "06b6d4", + "header_background": "09090b", + "header_primary": "fafafa", + "highlight": "f59e0b", + "highlight_text": "09090b", + "hover": "18181b", + "selected": "27272a", + "danger": "f43f5e", + "success": "10b981", + "love": "f472b6" + } + }, + "fields_count": 1, + "files": [ + { + "field_id": 716, + "target_id": 0, + "target_name": "common", + "name": "scss", + "filename": "common_scss.scss", + "bytes": 12801 + } + ] +} \ No newline at end of file diff --git a/themes/38_catppuccin_mocha_ultra/common_head_tag.html b/themes/38_catppuccin_mocha_ultra/common_head_tag.html new file mode 100644 index 0000000..60caa75 --- /dev/null +++ b/themes/38_catppuccin_mocha_ultra/common_head_tag.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/38_catppuccin_mocha_ultra/common_scss.scss b/themes/38_catppuccin_mocha_ultra/common_scss.scss new file mode 100644 index 0000000..e112221 --- /dev/null +++ b/themes/38_catppuccin_mocha_ultra/common_scss.scss @@ -0,0 +1,455 @@ +/* ═══════════════════════════════════════════════════════════════ + CATPPUCCIN MOCHA ULTRA — info-board.win + Warm charcoal. Pastel accents. Inviting and beautiful. + The theme for those who want personality with professionalism. + ═══════════════════════════════════════════════════════════════ */ + +.d-header, +#main-outlet, +html body { + --ct-base: #1e1e2e; + --ct-mantle: #181825; + --ct-crust: #11111b; + --ct-s0: #313244; + --ct-s1: #45475a; + --ct-s2: #585b70; + --ct-ov0: #6c7086; + --ct-ov1: #7f849c; + --ct-sub: #bac2de; + --ct-text: #cdd6f4; + --ct-lav: #b4befe; + --ct-blue: #89b4fa; + --ct-blue-dim: rgba(137,180,250,0.1); + --ct-sap: #74c7ec; + --ct-teal: #94e2d5; + --ct-green: #a6e3a1; + --ct-yellow: #f9e2af; + --ct-peach: #fab387; + --ct-maroon: #eba0ac; + --ct-red: #f38ba8; + --ct-mauve: #cba6f7; + --ct-mauve-dim: rgba(203,166,247,0.12); + --ct-pink: #f5c2e7; + --ct-rose: #f2cdcd; + --ct-radius: 8px; + --ct-radius-lg: 13px; + --ct-t: 0.15s ease; +} + +/* ── LAYOUT ── */ +#main-outlet .wrap, +.d-header .wrap { + max-width: 1420px; + padding: 0 36px; +} + +body { + font-family: -apple-system, "Inter", "Segoe UI", system-ui, sans-serif; + font-size: 15px; + line-height: 1.65; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* ── HEADER ── */ +.d-header { + background: var(--ct-mantle) !important; + border-bottom: 1px solid var(--ct-s0) !important; + box-shadow: 0 1px 0 rgba(203,166,247,0.08), 0 4px 20px rgba(0,0,0,0.35) !important; + height: 62px; +} + +.d-header-icons .btn.icon, +.d-header .icons .btn.icon { + color: var(--ct-ov1) !important; + border-radius: var(--ct-radius); + transition: color var(--ct-t), background var(--ct-t); +} + +.d-header-icons .btn.icon:hover, +.d-header .icons .btn.icon:hover { + color: var(--ct-mauve) !important; + background: var(--ct-mauve-dim) !important; +} + +/* ── NAV ── */ +.nav-pills .nav-item a { + color: var(--ct-ov1) !important; + border-radius: var(--ct-radius); + font-weight: 500; + font-size: 0.875rem; + padding: 6px 14px; + transition: all var(--ct-t); +} + +.nav-pills .nav-item.active a, +.nav-pills .nav-item a:hover { + color: var(--ct-mauve) !important; + background: var(--ct-mauve-dim) !important; +} + +/* ── SIDEBAR ── */ +.sidebar-wrapper { + background: var(--ct-mantle) !important; + border-right: 1px solid var(--ct-s0) !important; +} + +.sidebar-sections .sidebar-section-header-wrapper button { + color: var(--ct-ov0) !important; + font-size: 0.67rem; + font-weight: 700; + letter-spacing: 0.1em; + text-transform: uppercase; +} + +.sidebar-sections .sidebar-section-link-wrapper a { + color: var(--ct-ov1) !important; + border-radius: var(--ct-radius); + font-size: 0.875rem; + font-weight: 500; + padding: 6px 10px; + border-left: 2px solid transparent; + transition: all var(--ct-t); +} + +.sidebar-sections .sidebar-section-link-wrapper a:hover { + color: var(--ct-text) !important; + background: var(--ct-s0) !important; +} + +.sidebar-sections .sidebar-section-link-wrapper a.active { + color: var(--ct-mauve) !important; + background: var(--ct-mauve-dim) !important; + border-left-color: var(--ct-mauve); + font-weight: 600; +} + +/* ── TOPIC LIST ── */ +.topic-list thead th { + font-size: 0.7rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.09em; + color: var(--ct-ov0) !important; + border-bottom: 1px solid var(--ct-s0) !important; + background: transparent !important; + padding: 10px 12px; +} + +.topic-list tbody .topic-list-item { + border-bottom: 1px solid rgba(49,50,68,0.6) !important; + transition: background var(--ct-t); +} + +.topic-list tbody .topic-list-item:hover { + background: rgba(49,50,68,0.45) !important; +} + +.topic-list .main-link a.title, +.topic-list .link-top-line a.title { + color: var(--ct-text) !important; + font-weight: 600; + font-size: 0.925rem; + line-height: 1.4; + transition: color var(--ct-t); +} + +.topic-list .main-link a.title:hover, +.topic-list .link-top-line a.title:hover { + color: var(--ct-mauve) !important; +} + +.topic-list .link-bottom-line { margin-top: 5px; } + +.topic-list .topic-excerpt { + color: var(--ct-ov0) !important; + font-size: 0.8rem; + line-height: 1.5; + margin-top: 4px; +} + +.topic-list .num a, +.topic-list .num { color: var(--ct-ov1) !important; font-size: 0.82rem; } + +/* ── CATEGORY LIST ── */ +.category-list thead th { + font-size: 0.7rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.09em; + color: var(--ct-ov0) !important; + border-bottom: 1px solid var(--ct-s0) !important; + background: transparent !important; + padding: 10px 12px; +} + +.category-list tbody tr { + border-bottom: 1px solid rgba(49,50,68,0.5) !important; + transition: background var(--ct-t); +} + +.category-list tbody tr:hover { background: rgba(49,50,68,0.4) !important; } + +.category-list td.category .category-name a { + color: var(--ct-text) !important; + font-weight: 700; + font-size: 0.975rem; + transition: color var(--ct-t); +} + +.category-list td.category .category-name a:hover { color: var(--ct-mauve) !important; } + +.category-list td.category .category-description, +.category-list td.category p { + color: var(--ct-ov0) !important; + font-size: 0.82rem; + margin-top: 4px; + line-height: 1.5; +} + +/* ── POST CONTENT ── */ +.cooked { + font-size: 0.95rem; + line-height: 1.82; + color: var(--ct-text) !important; +} + +.cooked p { margin: 0 0 1em; } + +.cooked a { + color: var(--ct-blue) !important; + text-decoration: none; + border-bottom: 1px solid rgba(137,180,250,0.3); + transition: border-color var(--ct-t); +} + +.cooked a:hover { border-bottom-color: var(--ct-blue); } + +.cooked h1, .cooked h2, .cooked h3, +.cooked h4, .cooked h5, .cooked h6 { + font-weight: 700; + line-height: 1.3; + margin: 1.75em 0 0.65em; + padding-bottom: 8px; + border-bottom: 1px solid var(--ct-s0); +} + +.cooked h1 { font-size: 1.7rem; color: var(--ct-mauve) !important; font-weight: 800; } +.cooked h2 { font-size: 1.35rem; color: var(--ct-lav) !important; } +.cooked h3 { font-size: 1.1rem; color: var(--ct-blue) !important; } +.cooked h4 { font-size: 0.975rem; color: var(--ct-sap) !important; border-bottom: none; } +.cooked h5, .cooked h6 { font-size: 0.9rem; color: var(--ct-teal) !important; border-bottom: none; } + +.cooked code:not(pre code) { + background: var(--ct-s0) !important; + color: var(--ct-peach) !important; + border: 1px solid var(--ct-s1) !important; + border-radius: 5px; + font-family: "JetBrains Mono", "Fira Code", "Cascadia Code", "Consolas", monospace; + font-size: 0.84em; + padding: 2px 7px; +} + +.cooked pre { + background: var(--ct-crust) !important; + border: 1px solid var(--ct-s0) !important; + border-left: 4px solid var(--ct-mauve) !important; + border-radius: 0 var(--ct-radius) var(--ct-radius) 0; + padding: 20px 22px; + margin: 18px 0; + overflow-x: auto; +} + +.cooked pre code { + background: transparent !important; + border: none !important; + padding: 0 !important; + color: var(--ct-green) !important; + font-family: "JetBrains Mono", "Fira Code", "Cascadia Code", "Consolas", monospace; + font-size: 0.875rem; + line-height: 1.72; +} + +.cooked blockquote { + border-left: 4px solid var(--ct-pink) !important; + background: rgba(245,194,231,0.06) !important; + border-radius: 0 var(--ct-radius) var(--ct-radius) 0; + padding: 14px 20px; + margin: 18px 0; + color: var(--ct-sub) !important; + font-style: italic; +} + +.cooked blockquote p { margin: 0; } + +.cooked ul, .cooked ol { padding-left: 1.5em; margin: 0.75em 0; } +.cooked li { margin: 0.35em 0; } + +.cooked table { + border-collapse: collapse; + width: 100%; + margin: 18px 0; + border: 1px solid var(--ct-s0); + border-radius: var(--ct-radius); + overflow: hidden; +} + +.cooked table th { + background: var(--ct-s0) !important; + color: var(--ct-mauve) !important; + font-size: 0.78rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.06em; + padding: 11px 16px; + border-bottom: 2px solid var(--ct-s1) !important; + text-align: left; +} + +.cooked table td { + padding: 10px 16px; + border-bottom: 1px solid rgba(49,50,68,0.6) !important; +} + +.cooked table tr:last-child td { border-bottom: none !important; } +.cooked table tr:nth-child(even) td { background: rgba(49,50,68,0.35) !important; } + +.cooked hr { border: none; border-top: 1px solid var(--ct-s0); margin: 24px 0; } + +/* ── TOPIC TITLE ── */ +.fancy-title, #topic-title h1, .title-wrapper h1 { + font-size: 1.55rem; + font-weight: 800; + line-height: 1.28; + letter-spacing: -0.02em; + color: var(--ct-text) !important; +} + +/* ── BUTTONS ── */ +.btn { border-radius: var(--ct-radius) !important; font-weight: 600; font-size: 0.875rem; transition: all var(--ct-t); } + +.btn-primary { + background: var(--ct-mauve) !important; + color: var(--ct-crust) !important; + border: none !important; + box-shadow: 0 2px 12px rgba(203,166,247,0.35); +} + +.btn-primary:hover { + background: #d9b8fc !important; + box-shadow: 0 4px 20px rgba(203,166,247,0.5) !important; +} + +.btn-default { + background: var(--ct-s0) !important; + border: 1px solid var(--ct-s1) !important; + color: var(--ct-text) !important; +} + +.btn-default:hover { + background: var(--ct-s1) !important; + border-color: var(--ct-mauve) !important; + color: var(--ct-mauve) !important; +} + +/* ── POST ACTIONS ── */ +.post-controls .actions .btn { + color: var(--ct-ov0) !important; + background: transparent !important; + border-radius: var(--ct-radius) !important; + padding: 5px 10px; + font-size: 0.82rem; + transition: all var(--ct-t); +} + +.post-controls .actions .btn:hover { + color: var(--ct-mauve) !important; + background: var(--ct-mauve-dim) !important; +} + +.post-controls .actions .btn.like-button.has-like .d-icon { color: var(--ct-pink) !important; } + +/* ── TAGS ── */ +.discourse-tag { + background: var(--ct-mauve-dim) !important; + color: var(--ct-mauve) !important; + border: 1px solid rgba(203,166,247,0.25) !important; + border-radius: 20px !important; + font-size: 0.72rem; + font-weight: 600; + padding: 3px 10px !important; + transition: all var(--ct-t); +} + +.discourse-tag:hover { background: rgba(203,166,247,0.2) !important; } + +/* ── BADGE ── */ +.badge-notification { + background: var(--ct-mauve) !important; + color: var(--ct-crust) !important; + border-radius: 10px; + font-size: 0.68rem; + font-weight: 700; + padding: 2px 7px; +} + +/* ── COMPOSER ── */ +.d-editor-textarea-wrapper { + border-radius: var(--ct-radius) !important; + border-color: var(--ct-s0) !important; + background: var(--ct-s0) !important; + overflow: hidden; +} + +.d-editor-input { + font-family: "JetBrains Mono", "Fira Code", "Consolas", monospace !important; + font-size: 0.9rem !important; + line-height: 1.65 !important; +} + +.d-editor-preview { background: var(--ct-crust) !important; border-left: 1px solid var(--ct-s0) !important; } + +/* ── INPUTS ── */ +input[type="text"], input[type="email"], +input[type="password"], textarea, select { + border-radius: var(--ct-radius) !important; + padding: 8px 12px !important; + border-color: var(--ct-s1) !important; + background: var(--ct-s0) !important; + transition: border-color var(--ct-t), box-shadow var(--ct-t); +} + +input:focus, textarea:focus, select:focus { + border-color: var(--ct-mauve) !important; + box-shadow: 0 0 0 3px rgba(203,166,247,0.15) !important; + outline: none !important; +} + +/* ── USER CARD ── */ +.user-card, .group-card { + border-radius: var(--ct-radius-lg) !important; + box-shadow: 0 12px 40px rgba(0,0,0,0.5) !important; + border: 1px solid var(--ct-s1) !important; +} + +/* ── NOTIFICATIONS ── */ +.notification.unread { background: rgba(203,166,247,0.06) !important; border-left: 2px solid var(--ct-mauve) !important; } + +/* ── STATUS ICONS ── */ +.topic-status .d-icon-thumbtack { color: var(--ct-yellow) !important; } +.topic-status .d-icon-lock { color: var(--ct-ov0) !important; } + +/* ── SCROLLBAR ── */ +::-webkit-scrollbar { width: 6px; height: 6px; } +::-webkit-scrollbar-track { background: var(--ct-mantle); } +::-webkit-scrollbar-thumb { background: var(--ct-s1); border-radius: 3px; } +::-webkit-scrollbar-thumb:hover { background: var(--ct-ov0); } + +/* ── RESPONSIVE ── */ +@media (max-width: 1100px) { #main-outlet .wrap, .d-header .wrap { padding: 0 20px; } } +@media (max-width: 768px) { + body { font-size: 14px; } + .fancy-title, #topic-title h1 { font-size: 1.2rem; } + .cooked { font-size: 0.9rem; } + #main-outlet .wrap, .d-header .wrap { padding: 0 14px; } +} diff --git a/themes/38_catppuccin_mocha_ultra/theme.json b/themes/38_catppuccin_mocha_ultra/theme.json new file mode 100644 index 0000000..fc22592 --- /dev/null +++ b/themes/38_catppuccin_mocha_ultra/theme.json @@ -0,0 +1,44 @@ +{ + "id": 38, + "name": "Catppuccin Mocha Ultra", + "user_selectable": true, + "color_scheme": { + "id": 43, + "name": "Catppuccin Mocha Ultra", + "theme_id": null, + "colors": { + "header_background": "181825", + "header_primary": "cdd6f4", + "highlight": "f9e2af", + "danger": "f38ba8", + "success": "a6e3a1", + "love": "f5c2e7", + "primary": "cdd6f4", + "tertiary": "cba6f7", + "quaternary": "89b4fa", + "secondary": "1e1e2e", + "highlight_text": "1e1e2e", + "hover": "313244", + "selected": "45475a" + } + }, + "fields_count": 2, + "files": [ + { + "field_id": 719, + "target_id": 0, + "target_name": "common", + "name": "head_tag", + "filename": "common_head_tag.html", + "bytes": 699 + }, + { + "field_id": 717, + "target_id": 0, + "target_name": "common", + "name": "scss", + "filename": "common_scss.scss", + "bytes": 12426 + } + ] +} \ No newline at end of file diff --git a/themes/39_w-make_theme/common_scss.scss b/themes/39_w-make_theme/common_scss.scss new file mode 100644 index 0000000..5022fe6 --- /dev/null +++ b/themes/39_w-make_theme/common_scss.scss @@ -0,0 +1,191 @@ +/* FREE-WAREZ — Premium Theme v2 + Technical · Minimal · Sharp */ + +:root { + --fw-cyan: #00d4ff; + --fw-purple: #8b5cf6; + --fw-indigo: #6366f1; + --fw-dark: #0d0d1a; + --fw-surface:#141428; + --fw-border: rgba(0, 212, 255, 0.14); + --fw-text: #e8e8ff; + --fw-muted: #94a3b8; +} + +/* ─── HEADER ─── */ +.d-header { + background-color: rgba(13, 13, 26, 0.95) !important; + background-image: none !important; + backdrop-filter: blur(16px) saturate(1.5) !important; + -webkit-backdrop-filter: blur(16px) saturate(1.5) !important; + border-bottom: 1px solid var(--fw-border) !important; + box-shadow: 0 4px 32px rgba(0, 0, 0, 0.5) !important; + position: relative !important; + z-index: 1000 !important; +} + +/* Gradient accent line — bottom of header */ +.d-header::after { + content: '' !important; + position: absolute !important; + bottom: -1px !important; + left: 0 !important; + right: 0 !important; + height: 2px !important; + background: linear-gradient( + 90deg, + transparent 0%, + var(--fw-cyan) 15%, + var(--fw-indigo) 50%, + var(--fw-purple) 85%, + transparent 100% + ) !important; + pointer-events: none !important; + z-index: 1001 !important; +} + +.d-header .wrap { + padding: 10px 24px !important; + max-width: 100% !important; +} + +/* ─── LOGO ─── */ +.title .logo-big img, +.title img.logo-big { + height: 40px !important; + width: auto !important; + max-width: 280px !important; + image-rendering: -webkit-optimize-contrast !important; + transition: opacity 0.25s ease !important; +} + +.title .logo-big img:hover { + opacity: 0.85 !important; +} + +.title .logo-small img, +.title img.logo-small { + height: 30px !important; + width: auto !important; +} + +/* ─── ICONS & BUTTONS ─── */ +.d-header .btn, +.d-header button, +.d-header .icon { + color: var(--fw-muted) !important; + background: transparent !important; + border-radius: 6px !important; + transition: color 0.15s ease, background 0.15s ease !important; +} + +.d-header .btn:hover, +.d-header button:hover, +.d-header .icon:hover { + color: var(--fw-cyan) !important; + background: rgba(0, 212, 255, 0.1) !important; +} + +/* ─── SEARCH ─── */ +.search-input, +#search-term { + background: rgba(20, 20, 40, 0.85) !important; + border: 1px solid var(--fw-border) !important; + color: var(--fw-text) !important; + border-radius: 6px !important; + font-size: 14px !important; + transition: border-color 0.15s, box-shadow 0.15s !important; +} + +.search-input:focus, +#search-term:focus { + border-color: var(--fw-cyan) !important; + box-shadow: 0 0 0 3px rgba(0, 212, 255, 0.1) !important; + outline: none !important; +} + +/* ─── NAV TABS ─── */ +.nav-pills > li > a { + font-size: 11px !important; + font-weight: 600 !important; + letter-spacing: 1.5px !important; + text-transform: uppercase !important; + color: var(--fw-muted) !important; + border: 1px solid transparent !important; + border-radius: 5px !important; + padding: 5px 12px !important; + transition: color 0.15s, border-color 0.15s, background 0.15s !important; +} + +.nav-pills > li.active > a, +.nav-pills > li > a:hover { + color: var(--fw-cyan) !important; + border-color: var(--fw-border) !important; + background: rgba(0, 212, 255, 0.07) !important; +} + +/* ─── TOPIC TITLES ─── */ +.topic-list-item .title a:hover, +.fancy-title:hover { + color: var(--fw-cyan) !important; +} + +/* ─── BUTTONS ─── */ +.btn-primary, +.btn-primary:visited { + background: linear-gradient(135deg, var(--fw-cyan) 0%, var(--fw-purple) 100%) !important; + border: none !important; + font-size: 12px !important; + font-weight: 700 !important; + letter-spacing: 0.5px !important; + border-radius: 6px !important; + box-shadow: 0 2px 14px rgba(0, 212, 255, 0.22) !important; + transition: box-shadow 0.2s ease, transform 0.1s ease !important; +} + +.btn-primary:hover { + box-shadow: 0 4px 24px rgba(0, 212, 255, 0.38) !important; + transform: translateY(-1px) !important; +} + +.btn-primary:active { + transform: translateY(0) !important; +} + +/* ─── CUSTOM SCROLLBAR ─── */ +::-webkit-scrollbar { + width: 5px; + height: 5px; +} +::-webkit-scrollbar-track { + background: var(--fw-dark); +} +::-webkit-scrollbar-thumb { + background: linear-gradient(180deg, var(--fw-cyan), var(--fw-purple)); + border-radius: 3px; +} +::-webkit-scrollbar-thumb:hover { + background: linear-gradient(180deg, #33dcff, #a78bfa); +} + +/* ─── BADGES ─── */ +.badge-notification { + background: var(--fw-purple) !important; + font-size: 10px !important; + font-weight: 700 !important; +} + +/* ─── CATEGORY BADGES ─── */ +.badge-category { + font-size: 10px !important; + font-weight: 600 !important; + letter-spacing: 0.5px !important; +} + +/* ─── AVATAR ring on hover ─── */ +.avatar { + transition: box-shadow 0.15s ease !important; +} +.avatar:hover { + box-shadow: 0 0 0 2px var(--fw-cyan) !important; +} diff --git a/themes/39_w-make_theme/theme.json b/themes/39_w-make_theme/theme.json new file mode 100644 index 0000000..3097eaf --- /dev/null +++ b/themes/39_w-make_theme/theme.json @@ -0,0 +1,17 @@ +{ + "id": 39, + "name": "W-MAKE Theme", + "user_selectable": true, + "color_scheme": null, + "fields_count": 1, + "files": [ + { + "field_id": 718, + "target_id": 0, + "target_name": "common", + "name": "scss", + "filename": "common_scss.scss", + "bytes": 4750 + } + ] +} \ No newline at end of file diff --git a/themes/40_discourse_phosphor_icons/about_about.yml b/themes/40_discourse_phosphor_icons/about_about.yml new file mode 100644 index 0000000..f6d8070 --- /dev/null +++ b/themes/40_discourse_phosphor_icons/about_about.yml @@ -0,0 +1,10 @@ +{ + "name": "Discourse Phosphor Icons", + "description": "Replaces Discourse icons with the Phosphor icon set", + "about_url": null, + "license_url": "https://github.com/discourse/discourse-phosphor-icons/blob/main/LICENSE", + "component": true, + "assets": { + "icons-sprite": "/assets/icons-sprite.svg" + } +} diff --git a/themes/40_discourse_phosphor_icons/common_icons-sprite.txt b/themes/40_discourse_phosphor_icons/common_icons-sprite.txt new file mode 100644 index 0000000..e69de29 diff --git a/themes/40_discourse_phosphor_icons/javascript_discourse_api-initializers_phosphor-icons.js b/themes/40_discourse_phosphor_icons/javascript_discourse_api-initializers_phosphor-icons.js new file mode 100644 index 0000000..1571e6e --- /dev/null +++ b/themes/40_discourse_phosphor_icons/javascript_discourse_api-initializers_phosphor-icons.js @@ -0,0 +1,26 @@ +import { apiInitializer } from "discourse/lib/api"; +import { FORCE_FILL, ICON_MAP, WEIGHTS } from "../lib/icon-map"; + +export default apiInitializer((api) => { + const configuredWeight = WEIGHTS.includes(settings.weight) + ? settings.weight + : "regular"; + + const forceFill = new Set(FORCE_FILL); + + const ignored = new Set( + (settings.ignored_icons || "") + .split("|") + .map((name) => name.trim()) + .filter(Boolean) + ); + + Object.entries(ICON_MAP).forEach(([faIcon, phosphorIcon]) => { + if (ignored.has(faIcon)) { + return; + } + + const weight = forceFill.has(faIcon) ? "fill" : configuredWeight; + api.replaceIcon(faIcon, `ph-${weight}-${phosphorIcon}`); + }); +}); diff --git a/themes/40_discourse_phosphor_icons/javascript_discourse_lib_icon-map.js b/themes/40_discourse_phosphor_icons/javascript_discourse_lib_icon-map.js new file mode 100644 index 0000000..38fa107 --- /dev/null +++ b/themes/40_discourse_phosphor_icons/javascript_discourse_lib_icon-map.js @@ -0,0 +1,414 @@ +// Source of truth for FontAwesome -> Phosphor icon name mappings. +// Imported by the api-initializer at runtime and by scripts/generate-sprite.mjs +// at build time. After editing, run `pnpm build` to regenerate the sprite. +// Names are weight-agnostic; the chosen weight is applied at runtime. + +// Weights an admin can choose from (kept in sync with settings.yml). `fill` is +// intentionally excluded — filled is a product state, applied only to the +// FORCE_FILL icons below. +export const WEIGHTS = ["light", "regular", "bold", "duotone"]; + +export const ICON_MAP = { + "address-book": "address-book", + "address-card": "identification-card", + "align-left": "text-align-left", + anchor: "anchor", + "angle-down": "caret-down", + "angle-left": "caret-left", + "angle-right": "caret-right", + "angle-up": "caret-up", + "angles-down": "caret-double-down", + "angles-left": "caret-double-left", + "angles-right": "caret-double-right", + "angles-up": "caret-double-up", + "arrow-circle-o-right": "arrow-circle-right", + "arrow-circle-up": "arrow-circle-up", + "arrow-down": "arrow-down", + "arrow-left": "arrow-left", + "arrow-right": "arrow-right", + "arrow-rotate-left": "arrow-counter-clockwise", + "arrow-rotate-right": "arrow-clockwise", + "arrow-up": "arrow-up", + "arrows-rotate": "arrow-clockwise", + asterisk: "asterisk", + at: "at", + award: "medal", + backward: "rewind", + "backward-fast": "skip-back", + "backward-step": "skip-back", + ban: "prohibit", + "band-aid": "bandaids", + bars: "list", + "bars-staggered": "list-dashes", + bed: "bed", + bell: "bell", + "bell-slash": "bell-slash", + "birthday-cake": "cake", + bold: "text-b", + book: "book", + "book-open-reader": "book-open-text", + bookmark: "bookmark-simple", + "box-archive": "archive", + briefcase: "briefcase", + bullseye: "target", + "cake-candles": "cake", + "calendar-day": "calendar-dot", + "calendar-days": "calendar-blank", + campground: "tent", + "caret-down": "caret-circle-down", + "caret-left": "caret-circle-left", + "caret-right": "caret-circle-right", + "caret-up": "caret-circle-up", + certificate: "certificate", + "chart-bar": "chart-bar", + "chart-line": "chart-line", + "chart-pie": "chart-pie", + check: "check", + "check-square": "check-square", + "check-to-slot": "check-fat", + "chevron-down": "caret-down", + "chevron-left": "caret-left", + "chevron-right": "caret-right", + "chevron-up": "caret-up", + circle: "circle", + "circle-check": "check-circle", + "circle-chevron-down": "caret-circle-down", + "circle-exclamation": "warning-circle", + "circle-half-stroke": "circle-half", + "circle-info": "info", + "circle-minus": "minus-circle", + "circle-plus": "plus-circle", + "circle-question": "question", + "circle-stop": "stop-circle", + "circle-user": "user-circle", + "circle-xmark": "x-circle", + clipboard: "clipboard", + clock: "clock", + "clock-rotate-left": "clock-counter-clockwise", + "cloud-arrow-down": "cloud-arrow-down", + "cloud-arrow-up": "cloud-arrow-up", + code: "code", + "code-branch": "git-branch", + comment: "chat-centered", + "comment-dots": "chat-centered-dots", + "comment-slash": "chat-centered-slash", + comments: "chats", + compress: "arrows-in", + copy: "copy", + crosshairs: "crosshair", + crown: "crown", + cube: "cube", + cubes: "stack", + "d-chat": "chat-circle", + "d-drop-collapsed": "arrow-circle-right", + "d-drop-expanded": "arrow-circle-down", + "d-liked": "heart", + "d-muted": "bell-slash", + "d-post-share": "link-simple", + "d-regular": "bell", + "d-topic-share": "link-simple", + "d-tracking": "bell", + "d-unliked": "heart", + "d-watching": "bell", + "d-watching-first": "bell", + desktop: "desktop", + "diagram-project": "tree-structure", + "discourse-add-translation": "translate", + "discourse-amazon": "amazon-logo", + "discourse-bell-exclamation": "bell-ringing", + "discourse-bell-one": "bell", + "discourse-bell-slash": "bell-slash", + "discourse-chevron-collapse": "arrows-in-line-vertical", + "discourse-chevron-expand": "arrows-out-line-vertical", + "discourse-circle-minus": "minus-circle", + "discourse-circle-plus": "plus-circle", + "discourse-compress": "arrows-in-simple", + "discourse-dnd": "moon", + "discourse-emojis": "smiley", + "discourse-expand": "arrows-out-simple", + "discourse-flask-check": "flask", + "discourse-h1": "text-h-one", + "discourse-h2": "text-h-two", + "discourse-h3": "text-h-three", + "discourse-h4": "text-h-four", + "discourse-h5": "text-h-five", + "discourse-other-tab": "squares-four", + "discourse-sidebar": "sidebar", + "discourse-sparkles": "sparkle", + "discourse-table": "table", + "discourse-text": "text-t", + "discourse-threads": "chats", + download: "download", + "earth-americas": "globe-hemisphere-west", + ellipsis: "dots-three-outline", + "ellipsis-vertical": "dots-three-outline-vertical", + envelope: "envelope", + "exclamation-circle": "warning-circle", + expand: "arrows-out", + eye: "eye", + "eye-dropper": "eyedropper", + "eye-slash": "eye-slash", + "fab-amazon": "amazon-logo", + "fab-android": "android-logo", + "fab-apple": "apple-logo", + "fab-chrome": "google-chrome-logo", + "fab-discord": "discord-logo", + "fab-facebook": "facebook-logo", + "fab-facebook-square": "facebook-logo", + "fab-github": "github-logo", + "fab-google": "google-logo", + "fab-instagram": "instagram-logo", + "fab-linkedin-in": "linkedin-logo", + "fab-linux": "linux-logo", + "fab-markdown": "markdown-logo", + "fab-patreon": "patreon-logo", + "fab-steam": "steam-logo", + "fab-threads": "threads-logo", + "fab-threads-square": "threads-logo", + "fab-twitter": "twitter-logo", + "fab-twitter-square": "twitter-logo", + "fab-windows": "windows-logo", + "fab-x-twitter": "x-logo", + "face-smile": "smiley", + "far-bell": "bell", + "far-bell-slash": "bell-slash", + "far-bookmark": "bookmark-simple", + "far-calendar-alt": "calendar-blank", + "far-calendar-plus": "calendar-plus", + "far-chart-bar": "chart-bar", + "far-check-circle": "check-circle", + "far-circle": "circle", + "far-circle-check": "check-circle", + "far-circle-dot": "radio-button", + "far-clipboard": "clipboard", + "far-clock": "clock", + "far-comment": "chat-centered", + "far-comments": "chats", + "far-copyright": "copyright", + "far-credit-card": "credit-card", + "far-envelope": "envelope-simple", + "far-eye": "eye", + "far-eye-slash": "eye-slash", + "far-face-frown": "smiley-sad", + "far-face-meh": "smiley-meh", + "far-face-smile": "smiley", + "far-file": "file", + "far-file-lines": "file-text", + "far-heart": "heart", + "far-image": "image", + "far-map": "map-trifold", + "far-moon": "moon", + "far-pen-to-square": "pencil-line", + "far-rectangle-list": "list-bullets", + "far-square": "square", + "far-square-check": "check-square", + "far-star": "star", + "far-sun": "sun", + "far-thumbs-down": "thumbs-down", + "far-thumbs-up": "thumbs-up", + "far-trash-can": "trash", + file: "file", + "file-arrow-up": "file-arrow-up", + "file-audio": "file-audio", + "file-csv": "file-csv", + "file-image": "file-image", + "file-lines": "file-text", + "file-signature": "file-text", + "file-video": "file-video", + film: "film-strip", + filter: "funnel", + "filter-circle-xmark": "funnel-x", + fingerprint: "fingerprint", + flag: "flag", + flask: "flask", + "floppy-disk": "floppy-disk", + folder: "folder", + "folder-open": "folder-open", + font: "text-aa", + forward: "fast-forward", + "forward-fast": "skip-forward", + "forward-step": "skip-forward", + gavel: "gavel", + gear: "gear", + gift: "gift", + globe: "globe", + "graduation-cap": "graduation-cap", + "grip-lines": "rows", + "grip-vertical": "dots-six-vertical", + hand: "hand", + "hand-point-right": "hand-pointing", + handshake: "handshake", + "handshake-angle": "handshake", + hashtag: "hash", + headset: "headset", + heart: "heart", + history: "clock-counter-clockwise", + "hourglass-start": "hourglass-high", + house: "house", + "id-card": "identification-card", + image: "image", + images: "images", + inbox: "tray", + info: "info", + italic: "text-italic", + key: "key", + keyboard: "keyboard", + language: "translate", + "laptop-code": "laptop", + "layer-group": "stack", + "left-right": "arrows-horizontal", + link: "link-simple-horizontal", + "link-slash": "link-break", + list: "list", + "list-check": "list-checks", + "list-ol": "list-numbers", + "list-ul": "list", + "location-dot": "map-pin", + "location-pin": "map-pin", + lock: "lock", + "magnifying-glass": "magnifying-glass", + "magnifying-glass-minus": "magnifying-glass-minus", + "magnifying-glass-plus": "magnifying-glass-plus", + medal: "medal", + "microphone-slash": "microphone-slash", + minus: "minus", + "mobile-screen-button": "device-mobile", + moon: "moon", + "nested-thread": "tree-view", + "notification.assigned": "user-plus", + "notification.bookmark_reminder": "clock", + "notification.chat_quoted": "quotes", + "notification.edited": "pencil", + "notification.granted_badge": "seal", + "notification.group_mentioned": "users", + "notification.group_message_summary": "users", + "notification.invited_to_private_message": "envelope", + "notification.invited_to_topic": "arrow-right", + "notification.invitee_accepted": "user", + "notification.liked": "heart", + "notification.liked_2": "heart", + "notification.liked_consolidated": "heart", + "notification.liked_many": "heart", + "notification.linked": "link-simple-horizontal", + "notification.mentioned": "at", + "notification.moved_post": "arrow-square-out", + "notification.post_approved": "check", + "notification.posted": "arrow-arc-left", + "notification.private_message": "envelope", + "notification.quoted": "quotes", + "notification.reaction": "bell", + "notification.replied": "arrow-arc-left", + "notification.topic_reminder": "clock", + "notification.votes_released": "plus-circle", + "notification.watching_first_post": "bell", + paintbrush: "paint-brush", + palette: "palette", + "paper-plane": "paper-plane-tilt", + "patreon-new": "patreon-logo", + pause: "pause", + pen: "pen", + "pen-to-square": "pencil", + pencil: "pencil", + "pencil-alt": "pencil-simple", + play: "play", + plug: "plug", + plus: "plus", + "power-off": "power", + "puzzle-piece": "puzzle-piece", + question: "question", + "quote-left": "quotes", + "quote-right": "quotes", + repeat: "repeat", + reply: "arrow-arc-left", + "right-from-bracket": "sign-out", + "right-left": "arrows-left-right", + "right-to-bracket": "sign-in", + robot: "robot", + rocket: "rocket", + rotate: "arrow-clockwise", + rss: "rss", + save: "floppy-disk", + "screwdriver-wrench": "toolbox", + scroll: "scroll", + share: "share", + "share-nodes": "share-network", + "shield-halved": "shield", + shuffle: "shuffle", + "sign-hanging": "signpost", + signal: "cell-signal-full", + sliders: "sliders-horizontal", + sort: "arrows-down-up", + "sort-alpha-down": "sort-ascending", + "sort-alpha-up": "sort-descending", + "sort-numeric-down": "sort-ascending", + "sort-numeric-up": "sort-descending", + spinner: "spinner", + "square-check": "check-square", + "square-envelope": "envelope-simple", + "square-full": "square", + "square-plus": "plus-square", + "square-root-variable": "math-operations", + stamp: "stamp", + star: "star", + "sticky-note": "note", + sun: "sun", + table: "table", + "table-cells": "grid-four", + "table-columns": "columns", + tag: "tag", + tags: "tag", + "temperature-three-quarters": "thermometer", + "thumbs-down": "thumbs-down", + "thumbs-up": "thumbs-up", + thumbtack: "push-pin-simple", + "ticket-simple": "ticket", + "toggle-off": "toggle-left", + "toggle-on": "toggle-right", + translate: "translate", + "trash-can": "trash", + "triangle-exclamation": "warning", + trophy: "trophy", + "truck-medical": "ambulance", + unlock: "lock-open", + "unlock-keyhole": "lock-key-open", + "up-down": "arrows-vertical", + "up-right-from-square": "arrow-square-out", + upload: "upload", + user: "user", + "user-check": "user-circle-check", + "user-gear": "user-gear", + "user-group": "users", + "user-pen": "user-gear", + "user-plus": "user-plus", + "user-secret": "detective", + "user-shield": "user-circle-check", + "user-xmark": "user-minus", + users: "users", + video: "video-camera", + "volume-high": "speaker-high", + "volume-xmark": "speaker-x", + "vote-up": "arrow-fat-up", + "vote-up-filled": "arrow-fat-up", + "wand-magic": "magic-wand", + "wand-magic-sparkles": "magic-wand", + wrench: "wrench", + xmark: "x", +}; + +// FA icons that must render filled regardless of the configured weight: +// solid shapes (status dots, swatches) and "active state" indicators whose +// outline sibling conveys the inactive state. Pinned to the `fill` weight. +export const FORCE_FILL = [ + "circle", + "square-full", + "bookmark", + "heart", + "star", + "thumbs-up", + "thumbs-down", + "square-check", + "circle-check", + "check-square", + "d-liked", + "vote-up-filled", +]; diff --git a/themes/40_discourse_phosphor_icons/settings_yaml.yml b/themes/40_discourse_phosphor_icons/settings_yaml.yml new file mode 100644 index 0000000..f684bd6 --- /dev/null +++ b/themes/40_discourse_phosphor_icons/settings_yaml.yml @@ -0,0 +1,14 @@ +weight: + default: regular + type: enum + refresh: true + choices: + - light + - regular + - bold + - duotone +ignored_icons: + default: "" + type: list + list_type: compact + refresh: true diff --git a/themes/40_discourse_phosphor_icons/theme.json b/themes/40_discourse_phosphor_icons/theme.json new file mode 100644 index 0000000..1ae3ec6 --- /dev/null +++ b/themes/40_discourse_phosphor_icons/theme.json @@ -0,0 +1,57 @@ +{ + "id": 40, + "name": "Discourse Phosphor Icons", + "user_selectable": false, + "color_scheme": null, + "fields_count": 6, + "files": [ + { + "field_id": 759, + "target_id": 0, + "target_name": "common", + "name": "icons-sprite", + "filename": "common_icons-sprite.txt", + "bytes": 0 + }, + { + "field_id": 764, + "target_id": 3, + "target_name": "settings", + "name": "yaml", + "filename": "settings_yaml.yml", + "bytes": 197 + }, + { + "field_id": 763, + "target_id": 4, + "target_name": "translations", + "name": "en", + "filename": "translations_en.yml", + "bytes": 313 + }, + { + "field_id": 761, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/api-initializers/phosphor-icons.js", + "filename": "javascript_discourse_api-initializers_phosphor-icons.js", + "bytes": 703 + }, + { + "field_id": 762, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/lib/icon-map.js", + "filename": "javascript_discourse_lib_icon-map.js", + "bytes": 12790 + }, + { + "field_id": 760, + "target_id": 9, + "target_name": "about", + "name": "about", + "filename": "about_about.yml", + "bytes": 313 + } + ] +} \ No newline at end of file diff --git a/themes/40_discourse_phosphor_icons/translations_en.yml b/themes/40_discourse_phosphor_icons/translations_en.yml new file mode 100644 index 0000000..bcb7a66 --- /dev/null +++ b/themes/40_discourse_phosphor_icons/translations_en.yml @@ -0,0 +1,6 @@ +en: + theme_metadata: + description: "Phosphor icons for Discourse" + settings: + weight: "Which Phosphor icon weight to use. Changing this swaps every replaced icon to the selected style." + ignored_icons: "The icons in this list will use the default Font Awesome icon instead of the Phosphor icon." diff --git a/themes/41_air_theme/about_about.yml b/themes/41_air_theme/about_about.yml new file mode 100644 index 0000000..ba0ec18 --- /dev/null +++ b/themes/41_air_theme/about_about.yml @@ -0,0 +1,43 @@ +{ + "name": "Air Theme", + "authors": "Discourse", + "about_url": "https://meta.discourse.org/t/discourse-air-theme/197703", + "license_url": "https://github.com/discourse/discourse-air/blob/main/LICENSE", + "components": [ + "https://github.com/discourse/discourse-minimal-category-boxes.git", + "https://github.com/discourse/discourse-clickable-topic.git" + ], + "modifiers": { + "serialize_topic_excerpts": true + }, + "color_schemes": { + "air-light": { + "primary": "1c1c1c", + "secondary": "f9fcff", + "tertiary": "3877e5", + "quaternary": "7e8b93", + "header_background": "f9fcff", + "header_primary": "122b43", + "highlight": "e6cb37", + "danger": "d05454", + "success": "71bd9f", + "love": "c16ad7", + "selected": "e1ebfb" + }, + "air-dark": { + "primary": "e0e0e0", + "secondary": "2d2d2d", + "tertiary": "9a5cfd", + "quaternary": "71bd9f", + "header_background": "202020", + "header_primary": "e0e0e0", + "highlight": "9a5cfd", + "danger": "d05454", + "success": "71bd9f", + "love": "c16ad7", + "selected": "2f0177", + "hover": "535353" + } + }, + "screenshots": ["screenshots/light.webp", "screenshots/dark.webp"] +} diff --git a/themes/41_air_theme/common_header.html b/themes/41_air_theme/common_header.html new file mode 100644 index 0000000..976104f --- /dev/null +++ b/themes/41_air_theme/common_header.html @@ -0,0 +1 @@ +
diff --git a/themes/41_air_theme/common_screenshot_dark.txt b/themes/41_air_theme/common_screenshot_dark.txt new file mode 100644 index 0000000..e69de29 diff --git a/themes/41_air_theme/common_screenshot_light.txt b/themes/41_air_theme/common_screenshot_light.txt new file mode 100644 index 0000000..e69de29 diff --git a/themes/41_air_theme/common_scss.scss b/themes/41_air_theme/common_scss.scss new file mode 100644 index 0000000..6726928 --- /dev/null +++ b/themes/41_air_theme/common_scss.scss @@ -0,0 +1,615 @@ +@use "lib/viewport"; + +// custom search banner customizations +.welcome-banner.--location-above-topic-content .custom-search-banner-wrap { + color: var(--primary); +} + +.custom-search-banner-wrap { + color: var(--secondary); + + .custom-search-banner-headline, + h1 { + line-height: var(--line-height-small); + } + + p { + margin-top: 0.5em; + margin-bottom: 2em; + } + + .btn { + height: 100%; + } + + .search-menu input[type="text"] { + border: 1px solid transparent; + border-radius: 0.25em; + min-height: 40px; + + &:focus { + outline: 3px solid rgb(var(--primary-rgb), 0.35); + } + } + + .widget-link.show-help { + color: rgb(var(--primary-rgb), 0.75); + border-radius: 0.5em; + padding: 0.5em; + background-color: rgb(var(--secondary-rgb), 0.25); + + &:hover { + color: var(--primary); + } + } + + .search-menu .search-input { + border-color: var(--tertiary-hover); + outline: 1px solid var(--tertiary-hover); + } + + .results { + top: 43px; + border-radius: 0.25em; + } + + .search-context { + top: 3.25em; + right: 1em; + } +} + +.search-input { + border-radius: 0.25em; +} + +.display-search-banner { + #main-outlet { + padding-top: 2em; + } +} + +// Ideally the search banner component should be set to use the below-site-header outlet, +// but this ensures the default works too +.above-main-container-outlet.search-banner { + .custom-search-banner-wrap { + padding: 1em 0 2em; + color: var(--tertiary); + + .mobile-view & { + color: var(--secondary); + } + + .custom-search-banner-headline, + h1 { + margin-bottom: 0; + } + + .search-widget { + margin-top: 2em; + } + } +} + +// Main customizations +.alert { + margin: 1em 0; +} + +.topic-list .topic-list-header .topic-list-data, +.topic-list .topic-list-item .topic-list-data { + padding: 15px 5px; +} + +.navigation-topics .topic-list .topic-list-body .topic-list-data, +.navigation-topics .topic-list .topic-list-header .topic-list-data { + flex: unset; +} + +.badge-wrapper.box { + border-radius: 0.25em; + overflow: hidden; +} + +.badge-wrapper.bullet { + .badge-category-bg { + border-radius: 0.125em; + } + + .badge-category-parent-bg { + border-top-left-radius: 0.125em; + border-bottom-left-radius: 0.125em; + + + .badge-category-bg { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-top-right-radius: 0.125em; + border-bottom-right-radius: 0.125em; + } + } +} + +.discourse-tags { + gap: 0.5em; +} + +.discourse-tag { + font-size: $font-down-1; + border-radius: 0.25em; + padding: 0.15em 0.25em 0.15em 0.35em; + background-color: var(--primary-low); + color: var(--primary) !important; + + &:hover { + background-color: var(--primary-low-mid); + color: var(--primary); + } +} + +.discourse-tags .discourse-tag.simple:not(:last-child)::after, +.list-tags .discourse-tag.simple:not(:last-child)::after, +.search-category .discourse-tag.simple:not(:last-child)::after { + content: ""; + margin-left: unset; +} + +.topic-list .link-bottom-line .discourse-tag.simple::after, +.topic-list .link-bottom-line .discourse-tag.box { + margin-right: 0; +} + +#site-text-logo { + color: var(--primary); +} + +.mobile-view { + .cm-header-links { + display: none; + } + + .list-controls .nav-pills .drop li:first-of-type { + display: none; + } +} + +.not-found-container { + background-color: var(--secondary); +} + +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.select-kit.combo-box .select-kit-header, +.d-editor-textarea-wrapper, +div.ac-wrap { + border-radius: 4px; +} + +.d-header { + box-shadow: 0 2px 4px 0 rgb(0, 0, 0, 0.06); +} + +.d-header-icons .d-icon { + border-radius: 100px; +} + +.d-header-icons .icon { + border-radius: 0.25em; + margin-left: 0.3em; + border: 1px solid transparent; + + svg { + font-size: 1.25em; + } +} + +.d-header-icons .icon img.avatar { + border-radius: 0.25em; +} + +.menu-panel.drop-down { + margin-top: 1em; + border-radius: 0.5em; + border: 1px solid var(--primary-low-mid); +} + +.drop-down-mode .d-header-icons .active .icon { + border: 1px solid transparent; + + .d-icon { + color: var(--tertiary); + } +} + +.drop-down-mode .d-header-icons .active .icon:hover { + border: 1px solid transparent; +} + +.unread-high-priority-notifications { + background: var(--quaternary); +} + +.timeline-container .topic-timeline .timeline-handle { + background-color: var(--tertiary); +} + +.timeline-container .topic-timeline .timeline-scrollarea { + border-left-color: var(--tertiary); +} + +html { + body:not(.no-ember) { + background: + linear-gradient( + 0deg, + rgb(var(--primary-rgb), 0.075) 0%, + rgb(var(--primary-rgb), 0.075) 100% + ), + linear-gradient(0deg, var(--secondary) 100%, var(--secondary) 100%); + } + + .background-container { + position: fixed; + top: 0; + left: 0; + height: 100vh; + width: 100vw; + background: linear-gradient( + 90deg, + var(--tertiary-hover) 0%, + var(--tertiary) 100% + ); + clip-path: ellipse(148% 70% at 91% -14%); + } + + body.no-ember .background-container { + display: none; + } +} + +html body #main-outlet { + margin-top: 30px; + margin-bottom: 50px; + background: var(--secondary); + border-radius: 1em; + padding: 3em 3em 5%; + max-width: 1150px; + padding-bottom: 5% !important; // overriding inline style + box-shadow: + 0 24px 40px rgb(0, 0, 0, 0.07), + 0 10.8529px 24.1177px rgb(0, 0, 0, 0.0456112), + 0 4.50776px 10.0172px rgb(0, 0, 0, 0.035), + 0 1.63037px 3.62304px rgb(0, 0, 0, 0.0243888); + + @media screen and (width <= 700px) { + padding: 1.5em; + margin-top: 0; + } + + @media screen and (width <= 1120px) { + width: 80%; + } + + @media screen and (width <= 1075px) { + width: 85%; + } + + .archetype-regular & { + min-height: 500px; + } +} + +.nav-pills:not(.user-nav) > li a.active, +.nav-pills:not(.user-nav) > li > a { + border-radius: 0.5em; +} + +.category-calendar { + &.before-topic-list-body-outlet { + display: block; + } + background: var(--secondary); + padding: 1em; + border-radius: 8px; + margin-bottom: 1em; +} + +.discourse-post-event-upcoming-events { + background: var(--secondary); + border-radius: 8px; + padding: 1em; + margin-bottom: 1em; +} + +// Topic List + +@keyframes background-fade-highlight { + 0% { + background-color: var(--highlight-low); + } + + 100% { + background-color: var(--secondary); + } +} + +.full-width .contents .topic-list { + border-collapse: separate; + border-spacing: 0 0.25em; + display: contents; + + .topic-list-header { + tr { + display: flex; + border-bottom: none; + } + display: contents; + + .topic-list-data.default { + width: 63%; + } + + .topic-list-data.posters { + width: 7%; + } + + .topic-list-data.posts { + width: 15%; + } + + .topic-list-data.activity { + width: 15%; + } + } + + .topic-list-body { + display: contents; + + .topic-list-item-separator { + width: 100%; + margin: 0.75em 0; + display: flex; + + .topic-list-data { + width: 100%; + } + } + + .topic-list-item { + display: flex; + margin-bottom: 0.5em; + background-color: var(--secondary); + border: 1px solid rgb(var(--primary-rgb), 0.2); + border-radius: 1em; + position: relative; + transition: box-shadow 100ms ease-in-out; + box-shadow: 0 0 8px rgb(0, 0, 0, 0.05); + overflow: hidden; + + &.visited { + border: 1px solid rgb(var(--primary-rgb), 0.1); + + .discourse-tag { + opacity: 0.75; + } + + &:hover { + border: 1px solid rgb(var(--primary-rgb), 0.25); + + .discourse-tag { + opacity: 1; + } + } + } + + &:hover { + background-color: var(--secondary); + box-shadow: 0 0 12px rgb(0, 0, 0, 0.1); + border: 1px solid rgb(var(--primary-rgb), 0.3); + + a.title:not(.badge-notification), + a.topic-excerpt { + color: var(--primary) !important; + } + } + + .topic-list-data.main-link { + width: 63%; + order: 2; + } + + .topic-list-data.posters { + width: 7%; + order: 1; + height: auto; + display: flex; + justify-content: center; + align-items: center; + + a:not(.latest) { + display: none; + } + } + + .topic-list-data.posts { + width: 15%; + order: 3; + display: flex; + justify-content: center; + align-items: center; + } + + .topic-list-data.age { + width: 15%; + order: 4; + display: flex; + justify-content: center; + align-items: center; + } + + &.selected { + td:nth-of-type(1) { + box-shadow: none; + } + + &:focus-visible td:nth-of-type(2) { + box-shadow: inset 3px 0 0 var(--tertiary); + border-radius: calc(1em - 3px); + } + } + } + + .main-link { + min-height: 100%; + + .link-top-line { + display: block; + margin-bottom: 0.25em; + } + + .title { + font-weight: bold; + } + + .link-area { + display: flex; + + .link-title-area { + margin-right: 1em; + font-size: $font-up-1; + } + + .link-meta-area { + font-size: $font-down-3; + display: flex; + align-items: center; + } + } + } + + .posters { + .avatar { + width: 40px; + height: 40px; + border-radius: 8px; + } + + a.latest { + margin-right: 4px; + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-content: center; + align-items: center; + + .avatar { + margin-right: 0; + } + } + + a:not(.latest) { + margin-left: -22px; + + .avatar { + border: 3px solid var(--secondary); + } + } + } + + .posts-map, + .num.age.activity { + a { + padding: 0; + } + } + + .posts-map { + position: relative; + + .number { + margin-right: 0.25em; + } + } + + .post-activity { + .d-icon-reply { + color: var(--primary-medium); + margin-right: 0.25em; + } + + .relative-date { + color: var(--primary-medium); + } + } + } +} + +.topic-list-data.num.views { + display: none; +} + +// published page additions +.published-page-content-wrapper { + max-width: 1000px; + margin-top: 30px; + margin-bottom: 50px; + background: var(--secondary); + border-radius: 1em; + padding: 3em 3em 5%; + box-shadow: + 0 24px 40px rgb(0, 0, 0, 0.07), + 0 10.8529px 24.1177px rgb(0, 0, 0, 0.0456112), + 0 4.50776px 10.0172px rgb(0, 0, 0, 0.035), + 0 1.63037px 3.62304px rgb(0, 0, 0, 0.0243888); + z-index: 1; + position: relative; +} + +.published-page { + .background-container { + display: none; + } + + &::before { + background: linear-gradient( + 90deg, + var(--tertiary-hover) 0%, + var(--tertiary) 100% + ); + clip-path: ellipse(148% 70% at 91% -14%); + content: ""; + width: 100%; + height: 100%; + display: block; + position: fixed; + z-index: 0; + } +} + +.quote-button { + border-radius: 0.5em; +} + +.topic-list .main-link.focused + .posters { + box-shadow: inset 3px 0 0 var(--tertiary); +} + +.topic-list .main-link.focused { + box-shadow: none; +} + +.title-voting { + padding-left: 14px; +} diff --git a/themes/41_air_theme/desktop_scss.scss b/themes/41_air_theme/desktop_scss.scss new file mode 100644 index 0000000..c028435 --- /dev/null +++ b/themes/41_air_theme/desktop_scss.scss @@ -0,0 +1,3 @@ +@import "showcased-categories"; +@import "chat-desktop"; +@import "sidebar-desktop"; diff --git a/themes/41_air_theme/extra_scss_chat-desktop.txt b/themes/41_air_theme/extra_scss_chat-desktop.txt new file mode 100644 index 0000000..54ddfed --- /dev/null +++ b/themes/41_air_theme/extra_scss_chat-desktop.txt @@ -0,0 +1,56 @@ +html body.has-sidebar-page.has-full-page-chat { + #main-outlet-wrapper { + gap: 0 2em; + } + + #main-outlet { + padding-bottom: 0 !important; + } +} + +.full-page-chat { + border: none !important; +} + +.chat-channel { + height: calc(100vh - (var(--header-offset) + 7.85em)); +} + +.c-navbar-container { + border-radius: 1em 1em 0 0; +} + +.chat-composer__wrapper { + background: transparent; +} + +.full-page-chat .chat-full-page-header { + border-radius: 1em 1em 0 0; +} + +.has-full-page-chat #main-outlet.wrap { + margin-bottom: 30px; + padding-bottom: 0 !important; + + .full-page-chat { + grid-template-rows: calc(var(--full-page-chat-height) - 50px); + } +} + +@media screen and (width <= 1366px) { + .has-full-page-chat #main-outlet { + width: 100%; + } + + .has-full-page-chat:not(.discourse-sidebar) #main-outlet.wrap { + max-width: 100% !important; + width: 100% !important; + border-radius: 0; + margin: 0; + padding: 0; + + .full-page-chat { + grid-template-rows: var(--full-page-chat-height); + } + } +} diff --git a/themes/41_air_theme/extra_scss_chat-mobile.txt b/themes/41_air_theme/extra_scss_chat-mobile.txt new file mode 100644 index 0000000..c2ed502 --- /dev/null +++ b/themes/41_air_theme/extra_scss_chat-mobile.txt @@ -0,0 +1,5 @@ +html body.has-full-page-chat #main-outlet { + width: 100% !important; + padding: 0 !important; + background-color: var(--secondary) !important; +} diff --git a/themes/41_air_theme/extra_scss_showcased-categories.txt b/themes/41_air_theme/extra_scss_showcased-categories.txt new file mode 100644 index 0000000..ad2211a --- /dev/null +++ b/themes/41_air_theme/extra_scss_showcased-categories.txt @@ -0,0 +1,19 @@ +.showcased-categories-sidebar { + .two-topic-list-sidebar { + .btn-link.posts-map.badge-posts { + display: block; + } + + .topic-list .topic-list-item { + height: unset; + } + + .topic-excerpt { + display: none; + } + } + + .full-width .contents .topic-list { + display: unset; + } +} diff --git a/themes/41_air_theme/extra_scss_sidebar-desktop.txt b/themes/41_air_theme/extra_scss_sidebar-desktop.txt new file mode 100644 index 0000000..3fb298c --- /dev/null +++ b/themes/41_air_theme/extra_scss_sidebar-desktop.txt @@ -0,0 +1,33 @@ +// sidebar +#main-outlet-wrapper { + .sidebar-wrapper { + margin: 30px 0 50px; + background-color: var(--secondary); + border-radius: 1em; + top: calc(var(--header-offset) + 30px); + height: calc(100vh - (var(--header-offset) + 80px)); + box-shadow: + 0 24px 40px rgb(0, 0, 0, 0.07), + 0 10.8529px 24.1177px rgb(0, 0, 0, 0.0456112), + 0 4.50776px 10.0172px rgb(0, 0, 0, 0.035), + 0 1.63037px 3.62304px rgb(0, 0, 0, 0.0243888); + } + + .sidebar-footer-wrapper { + background: var(--secondary); + } +} + +body.has-sidebar-page { + #main-outlet-wrapper { + padding-left: 8px; + } + + #main-outlet { + max-width: unset; + } +} + +.desktop-view .sidebar-footer-wrapper .sidebar-footer-container::before { + background: linear-gradient(to bottom, transparent, rgb(var(--secondary), 1)); +} diff --git a/themes/41_air_theme/javascript_discourse_initializers_init-topic-excerpts.js b/themes/41_air_theme/javascript_discourse_initializers_init-topic-excerpts.js new file mode 100644 index 0000000..a879c89 --- /dev/null +++ b/themes/41_air_theme/javascript_discourse_initializers_init-topic-excerpts.js @@ -0,0 +1,5 @@ +import { apiInitializer } from "discourse/lib/api"; + +export default apiInitializer((api) => { + api.registerValueTransformer("topic-list-item-expand-pinned", () => true); +}); diff --git a/themes/41_air_theme/mobile_scss.scss b/themes/41_air_theme/mobile_scss.scss new file mode 100644 index 0000000..d81c509 --- /dev/null +++ b/themes/41_air_theme/mobile_scss.scss @@ -0,0 +1,257 @@ +@import "chat-mobile"; + +.custom-search-banner-wrap { + .custom-search-banner-headline, + h1 { + font-size: 2.5em !important; + } + + p { + font-weight: normal; + font-size: $font-up-1; + } +} + +html + body:not( + .static-tos, + .static-guidelines, + .static-privacy, + .about-page, + .badges-page, + .tags-page, + .archetype-banner, + .archetype-regular, + .archetype-private_message, + .admin-interface, + .user-summary-page, + .user-activity-page, + .user-invites-page, + .user-preferences-page, + .user-messages-page, + .user-notifications-page, + .user-badges-page + ) + #main-outlet { + width: calc(100% - 1em); + padding: 0 0.5em 1em 0.5em; + box-shadow: none; + background-color: transparent; +} + +#main-outlet { + margin-inline: auto; +} + +html body #main-outlet .docs { + padding: 1em; + background-color: var(--secondary); +} + +html body.static-tos #main-outlet, +html body.no-ember #main-outlet, +html body.static-privacy #main-outlet, +html body.about-page #main-outlet, +html body.static-guidelines #main-outlet, +html body.tags-page #main-outlet, +html body.badges-page #main-outlet, +html body.archetype-banner #main-outlet, +html body.archetype-regular #main-outlet, +html body.archetype-private_message #main-outlet, +html body.admin-interface #main-outlet, +html body.user-summary-page #main-outlet, +html body.user-activity-page #main-outlet, +html body.user-invites-page #main-outlet, +html body.user-preferences-page #main-outlet, +html body.user-messages-page #main-outlet, +html body.user-notifications-page #main-outlet, +html body.user-badges-page #main-outlet, +html body #main-outlet:has(.container.group), +html body #main-outlet:has(.edit-category-page) { + border-radius: 0; + width: calc(100% - 3em); + background-color: var(--secondary); + margin-bottom: 0; +} + +html body #main-outlet:has(.edit-category-page) { + margin-block: 1em; + padding: 1em; + border-radius: 8px; +} + +.container.posts > .row { + max-width: calc(100vw - 1.5em); +} + +.navigation-categories .navigation-container, +.categories-list .navigation-container { + border-bottom: 0 !important; +} + +body.category .category-breadcrumb .select-kit-header, +#navigation-bar, +.navigation-controls { + margin-bottom: 0.5em !important; +} + +body.category .navigation-categories .list-container, +.categories-list .list-container { + padding-top: 1em !important; +} + +ol.category-breadcrumb { + margin-top: 1em; +} + +.categories-list .list-controls { + background: var(--secondary); + padding: 0.5em; + border-radius: 8px; +} + +.list-controls .nav-pills { + li.navigation-toggle { + border-radius: 8px; + border: none; + background-color: var(--secondary); + + a:hover, + a:focus { + color: var(--primary); + background-color: var(--secondary); + } + } + + .drop { + top: calc(100% + 0.5em); + border-radius: 8px; + box-shadow: 0 0 12px rgb(0, 0, 0, 0.25); + } +} + +.topic-list .topic-list-data { + padding: 1em 1em 0 1em; + max-width: unset; +} + +.custom-search-banner-wrap .search-context { + top: 3em !important; +} + +.top-lists { + background-color: var(--secondary); + border-radius: 8px; + padding: 0.25em 0.25em 0.25em 0.5em; + margin-bottom: 0.5em; +} + +.users-directory.directory, +.reviewable { + width: 100%; + background-color: var(--secondary); + margin-left: -0.5em; + padding: 0 0.5em; +} + +.tag-groups-container { + background: var(--secondary); + padding: 2em 1em; + border-radius: 0.25em; + margin-top: 1em; +} + +.search-container .search-advanced .search-results { + padding: none; +} + +.fps-result { + background: var(--secondary); + padding: 1em; + border-radius: 8px; + box-shadow: 0 0 8px rgb(0, 0, 0, 0.05); + border: 1px solid rgb(var(--primary-rgb), 0.1); + margin-bottom: 0.5em; +} + +.search-container .search-header { + border-top-right-radius: 8px; + border-top-left-radius: 8px; +} + +.search-container .search-advanced .search-info { + padding-right: 1em; + padding-left: 1em; + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; +} + +.full-width .contents .topic-list .topic-list-header tr { + background-color: var(--secondary); + border-radius: 8px; + box-shadow: 0 0 8px rgb(0, 0, 0, 0.05); + border: 1px solid rgb(var(--primary-rgb), 0.1); + margin-bottom: 1em; +} + +.topic-list .topic-item-stats { + flex-wrap: wrap; +} + +.topic-list-item { + > .topic-list-data { + width: 100%; + } + + .discourse-tags { + order: 3; + width: 100%; + margin-top: 0.5em; + } +} + +.full-width .contents .topic-list .topic-list-item .posts-map { + padding: 0; + + .number { + margin: 0; + } +} + +.full-width + .contents + .topic-list + .topic-list-body + .topic-list-item + .topic-list-data.posts { + width: unset; +} + +.topic-list .topic-list-header .topic-list-data, +.topic-list .topic-list-item .topic-list-data { + padding: 15px; +} + +// default category list styles when the modern category boxes theme component isn't used +.category-list-item.category { + background: var(--secondary); + border-radius: 1em; + + tbody { + display: flex; + flex-direction: column; + width: 100%; + } + + td { + width: 100%; + } + + .num.posts { + padding-right: 0.25em; + } +} + +.list-controls .nav-pills .list-control-toggle-link-trigger { + color: var(--secondary); +} diff --git a/themes/41_air_theme/theme.json b/themes/41_air_theme/theme.json new file mode 100644 index 0000000..b99808a --- /dev/null +++ b/themes/41_air_theme/theme.json @@ -0,0 +1,131 @@ +{ + "id": 41, + "name": "Air Theme", + "user_selectable": false, + "color_scheme": { + "id": 46, + "name": "air-light", + "theme_id": 41, + "colors": { + "primary": "1c1c1c", + "secondary": "f9fcff", + "tertiary": "3877e5", + "quaternary": "7e8b93", + "header_background": "f9fcff", + "header_primary": "122b43", + "highlight": "e6cb37", + "selected": "e1ebfb", + "hover": "f2f2f2", + "danger": "d05454", + "success": "71bd9f", + "love": "c16ad7" + } + }, + "fields_count": 13, + "files": [ + { + "field_id": 769, + "target_id": 0, + "target_name": "common", + "name": "header", + "filename": "common_header.html", + "bytes": 41 + }, + { + "field_id": 766, + "target_id": 0, + "target_name": "common", + "name": "screenshot_dark", + "filename": "common_screenshot_dark.txt", + "bytes": 0 + }, + { + "field_id": 765, + "target_id": 0, + "target_name": "common", + "name": "screenshot_light", + "filename": "common_screenshot_light.txt", + "bytes": 0 + }, + { + "field_id": 768, + "target_id": 0, + "target_name": "common", + "name": "scss", + "filename": "common_scss.scss", + "bytes": 11478 + }, + { + "field_id": 770, + "target_id": 1, + "target_name": "desktop", + "name": "scss", + "filename": "desktop_scss.scss", + "bytes": 83 + }, + { + "field_id": 773, + "target_id": 2, + "target_name": "mobile", + "name": "scss", + "filename": "mobile_scss.scss", + "bytes": 5179 + }, + { + "field_id": 772, + "target_id": 4, + "target_name": "translations", + "name": "en", + "filename": "translations_en.yml", + "bytes": 81 + }, + { + "field_id": 774, + "target_id": 5, + "target_name": "extra_scss", + "name": "chat-desktop", + "filename": "extra_scss_chat-desktop.txt", + "bytes": 1018 + }, + { + "field_id": 775, + "target_id": 5, + "target_name": "extra_scss", + "name": "chat-mobile", + "filename": "extra_scss_chat-mobile.txt", + "bytes": 146 + }, + { + "field_id": 776, + "target_id": 5, + "target_name": "extra_scss", + "name": "showcased-categories", + "filename": "extra_scss_showcased-categories.txt", + "bytes": 307 + }, + { + "field_id": 777, + "target_id": 5, + "target_name": "extra_scss", + "name": "sidebar-desktop", + "filename": "extra_scss_sidebar-desktop.txt", + "bytes": 808 + }, + { + "field_id": 771, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/initializers/init-topic-excerpts.js", + "filename": "javascript_discourse_initializers_init-topic-excerpts.js", + "bytes": 175 + }, + { + "field_id": 767, + "target_id": 9, + "target_name": "about", + "name": "about", + "filename": "about_about.yml", + "bytes": 1234 + } + ] +} \ No newline at end of file diff --git a/themes/41_air_theme/translations_en.yml b/themes/41_air_theme/translations_en.yml new file mode 100644 index 0000000..e9120fb --- /dev/null +++ b/themes/41_air_theme/translations_en.yml @@ -0,0 +1,3 @@ +en: + theme_metadata: + description: "A clean and modern theme for Discourse." diff --git a/themes/42_modern_category___group_boxes/about_about.yml b/themes/42_modern_category___group_boxes/about_about.yml new file mode 100644 index 0000000..86d8b5a --- /dev/null +++ b/themes/42_modern_category___group_boxes/about_about.yml @@ -0,0 +1,8 @@ +{ + "about_url": null, + "license_url": null, + "assets": { + }, + "name": "Modern Category + Group Boxes", + "component": true +} \ No newline at end of file diff --git a/themes/42_modern_category___group_boxes/common_scss.scss b/themes/42_modern_category___group_boxes/common_scss.scss new file mode 100644 index 0000000..1d754c9 --- /dev/null +++ b/themes/42_modern_category___group_boxes/common_scss.scss @@ -0,0 +1,372 @@ +@use "lib/viewport"; + +.custom-category-header { + margin: 1em auto; + display: inline-block; + font-size: 3em; + border-bottom: 2px solid var(--primary); +} + +.category-boxes { + justify-content: center; +} + +.category .muted, +.navigation-categories .muted { + opacity: 25%; + + &:hover { + opacity: 100%; + } +} + +.custom-category-boxes-container { + width: 100%; + display: flex; + flex-direction: column; + justify-content: center; + + @include viewport.from(sm) { + margin-top: var(--space-8); + } + + &:empty { + display: none; + } +} + +.category { + .custom-category-boxes { + display: flex; + flex-direction: row; + margin: 0 0 32px 0; + width: 100%; + flex-wrap: wrap; + + .category-box { + width: 30%; + margin-right: 1em; + margin-bottom: 1em; + flex-grow: 1; + } + } +} + +.category-list:not(.theme-setting, .setting), +.navigation-categories .list-container .full-width #list-area .contents, +.categories-list .list-container .full-width #header-list-area .contents { + .column { + margin-top: 2em; + } + + .category-boxes, + .category-boxes-with-topics, + .category-list.subcategory-list, + .column.categories, + .category-list, + .muted-categories { + display: none; + visibility: hidden; + } +} + +.category-title-contents { + padding: 87px 0; + + [class*="d-icon-category.restricted"], + .d-icon-lock { + display: none; + } +} + +.groups-boxes { + display: grid; + gap: 18px; + grid-auto-flow: row; + grid-template-columns: 1fr 1fr; + + .group-box { + background-color: var(--secondary); + border: 0 !important; + border-radius: 12px; + color: var(--primary); + padding: 0; + box-shadow: + 0 24px 40px rgb(0, 0, 0, 0.07), + 0 10.8529px 24.1177px rgb(0, 0, 0, 0.0456112), + 0 4.50776px 10.0172px rgb(0, 0, 0, 0.035), + 0 1.63037px 3.62304px rgb(0, 0, 0, 0.0243888); + + .group-avatar-flair { + grid-area: group-image; + + .avatar-flair { + background-size: 64px; + height: 64px; + margin: 0 0; + width: 64px; + } + } + + .group-box-inner { + display: inline-grid; + gap: 1em; + grid-auto-flow: row; + grid-template-rows: 1fr 0fr; + + .group-description { + color: var(--primary-very-high); + } + + .group-info-wrapper { + align-items: center; + gap: 1em; + + .group-info { + margin-bottom: unset; + padding-right: 1em; + width: unset; + + span { + color: var(--primary); + font-size: 1.125em; + font-weight: 600; + letter-spacing: 0.03em; + flex-shrink: 1; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + .group-user-count { + color: var(--primary-high); + flex-shrink: 0; + font-size: 0.875em; + padding-top: 2px; + } + } + } + } + + .group-membership { + color: var(--primary-high); + padding-top: 0; + + .is-group-member { + color: var(--success); + } + } + } +} + +.custom-category-boxes:not(.above-discovery-categories-outlet) { + display: grid; + grid-auto-flow: row; + gap: 32px; + grid-template-columns: 1fr 1fr; + grid-template-rows: 1fr; + width: 100%; + + .category-box { + display: flex; + flex-grow: 1; + background-color: var(--secondary); + border-left-width: 0; + border-radius: 12px; + margin: 0 0; + max-height: 160px; + overflow: hidden; + transition: all ease-out 0.2s; + width: initial; + box-shadow: + 0 24px 40px rgb(0, 0, 0, 0.07), + 0 10.8529px 24.1177px rgb(0, 0, 0, 0.0456112), + 0 4.50776px 10.0172px rgb(0, 0, 0, 0.035), + 0 1.63037px 3.62304px rgb(0, 0, 0, 0.0243888); + + &:hover { + background-color: var(--secondary-very-high); + } + + &.muted { + .category-details { + grid-column: 2; + } + } + + .category-box-inner { + border: 0; + display: grid; + grid-auto-flow: column; + grid-template-columns: 0fr 1fr 0fr; + column-gap: 48px; + padding: 0; + + .category-logo { + align-self: center; + display: inline-block; + width: 100px; + height: 100px; + margin: 0; + + img { + height: 100%; + width: 100%; + } + + .category-abbreviation { + display: none; + } + + &.no-logo-present { + display: flex; + justify-content: center; + align-items: center; + width: 100px; + height: 100%; + min-height: 100px; + + .category-abbreviation { + display: block; + color: white; + font-weight: bold; + font-size: 2em; + } + } + } + + .category-details { + align-self: center; + } + } + } + + h3 { + align-items: baseline; + color: var(--primary); + display: inline-flex; + font-size: 1.125em; + font-weight: 600; + letter-spacing: 0.03em; + line-height: 140%; + margin-top: 0; + margin-bottom: 0; + text-align: left; + + .rtl & { + text-align: right; + } + + .d-icon { + color: var(--primary-very-high); + font-size: 16px; + height: 16px !important; + margin-inline-end: 4px !important; + width: 16px !important; + } + } + + .category-box-heading { + margin-bottom: 8px; + } + + .description { + color: var(--primary-high); + font-size: 1em; + font-weight: 400; + line-height: 140%; + letter-spacing: 0.03em; + margin-bottom: 0; + max-height: 3em; + text-align: left; + + .rtl & { + text-align: right; + } + + p { + margin: 0; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + } + } + + .subcategory { + display: none; + } + + .subcategories { + display: none; + + .subcategory { + .subcategory-image-placeholder { + margin-right: 0; + } + } + } +} + +// Subcategory theming +#header-list-area { + .custom-category-boxes { + grid-template-columns: 1fr 1fr 1fr; + margin-top: 32px; + + .category-box-inner { + column-gap: 24px; + + .category-logo { + height: 80px; + width: 80px; + } + } + + .category-box-heading { + margin-bottom: 4px; + } + + h3 { + font-size: 1em; + } + + .description { + display: none; + } + } + + .custom-category-boxes-container + .category-boxes { + display: none; + } +} + +@media (width <= 1250px) { + body.category, + #header-list-area { + .custom-category-boxes { + grid-template-columns: 1fr 1fr; + } + } +} + +@media (width <= 960px) { + .custom-category-boxes { + grid-template-columns: 1fr; + } +} + +@media (width <= 800px) { + body.category, + body.navigation-categories { + .custom-category-boxes { + grid-template-columns: 1fr; + } + } + + #header-list-area { + .custom-category-boxes { + grid-template-columns: 1fr; + } + } +} diff --git a/themes/42_modern_category___group_boxes/javascript_discourse_components_category-box.gjs b/themes/42_modern_category___group_boxes/javascript_discourse_components_category-box.gjs new file mode 100644 index 0000000..c6c10e2 --- /dev/null +++ b/themes/42_modern_category___group_boxes/javascript_discourse_components_category-box.gjs @@ -0,0 +1,122 @@ +import Component from "@glimmer/component"; +import { trustHTML } from "@ember/template"; +import CategoryLogo from "discourse/components/category-logo"; +import CategoryTitleBefore from "discourse/components/category-title-before"; +import CategoryTitleLink from "discourse/components/category-title-link"; +import PluginOutlet from "discourse/components/plugin-outlet"; +import borderColor from "discourse/helpers/border-color"; +import categoryLink from "discourse/helpers/category-link"; +import icon from "discourse/helpers/d-icon"; +import lazyHash from "discourse/helpers/lazy-hash"; + +export default class extends Component { + get backgroundColor() { + return trustHTML(`background-color: #${this.args.category.color}`); + } + + get getAbbreviation() { + let abbr = this.args.category.name.replace(" and", "").split(" "); + + if (abbr.length > 1) { + abbr = abbr[0].charAt(0).toUpperCase() + abbr[1].charAt(0).toLowerCase(); + } else { + abbr = abbr[0].charAt(0).toUpperCase() + abbr[0].charAt(1).toLowerCase(); + } + + return abbr; + } + + +} diff --git a/themes/42_modern_category___group_boxes/javascript_discourse_components_category-boxes.gjs b/themes/42_modern_category___group_boxes/javascript_discourse_components_category-boxes.gjs new file mode 100644 index 0000000..f5f2016 --- /dev/null +++ b/themes/42_modern_category___group_boxes/javascript_discourse_components_category-boxes.gjs @@ -0,0 +1,11 @@ +import CategoryBox from "./category-box"; + +const CategoryBoxes = ; + +export default CategoryBoxes; diff --git a/themes/42_modern_category___group_boxes/javascript_discourse_components_category-header.gjs b/themes/42_modern_category___group_boxes/javascript_discourse_components_category-header.gjs new file mode 100644 index 0000000..eb6e7e9 --- /dev/null +++ b/themes/42_modern_category___group_boxes/javascript_discourse_components_category-header.gjs @@ -0,0 +1,11 @@ +import { gt } from "discourse/truth-helpers"; + +const CategoryHeader = ; + +export default CategoryHeader; diff --git a/themes/42_modern_category___group_boxes/javascript_discourse_components_custom-category-boxes.gjs b/themes/42_modern_category___group_boxes/javascript_discourse_components_custom-category-boxes.gjs new file mode 100644 index 0000000..77e0a0d --- /dev/null +++ b/themes/42_modern_category___group_boxes/javascript_discourse_components_custom-category-boxes.gjs @@ -0,0 +1,120 @@ +import Component from "@glimmer/component"; +import { service } from "@ember/service"; +import CategoryBoxes from "./category-boxes"; +import CategoryHeader from "./category-header"; + +export default class extends Component { + @service router; + @service site; + + get classNames() { + const classNames = ["custom-category-boxes-container"]; + + if (this.noneSelected) { + classNames.push("none-selected"); + } + + return classNames.join(" "); + } + + #allowedCategories(selectedCategories) { + // filters categories to only include selected categories for each section + let availableCategories = this.site.categories.filter((category) => { + if (selectedCategories.indexOf(category.id) !== -1) { + return true; + } else { + return false; + } + }); + + return availableCategories; + } + + get shouldRenderHeadings() { + let isCategoryPage = this.router.currentRoute.name.includes("category"); + let hasCategoriesSet = false; + + if ( + settings.first_categories || + settings.second_categories || + settings.third_categories || + settings.fourth_categories || + settings.fifth_categories + ) { + hasCategoriesSet = true; + } + + if (!isCategoryPage && hasCategoriesSet) { + return true; + } else { + return false; + } + } + + get noneSelected() { + return this.router.currentRoute.name.includes("None"); + } + + get firstCategories() { + return this.#allowedCategories( + settings.first_categories.split("|").map((id) => Number(id)) + ); + } + + get secondCategories() { + return this.#allowedCategories( + settings.second_categories.split("|").map((id) => Number(id)) + ); + } + + get thirdCategories() { + return this.#allowedCategories( + settings.third_categories.split("|").map((id) => Number(id)) + ); + } + + get fourthCategories() { + return this.#allowedCategories( + settings.fourth_categories.split("|").map((id) => Number(id)) + ); + } + + get fifthCategories() { + return this.#allowedCategories( + settings.fifth_categories.split("|").map((id) => Number(id)) + ); + } + + +} diff --git a/themes/42_modern_category___group_boxes/javascript_discourse_initializers_initialize-category-boxes.js b/themes/42_modern_category___group_boxes/javascript_discourse_initializers_initialize-category-boxes.js new file mode 100644 index 0000000..8ec9eee --- /dev/null +++ b/themes/42_modern_category___group_boxes/javascript_discourse_initializers_initialize-category-boxes.js @@ -0,0 +1,6 @@ +import { apiInitializer } from "discourse/lib/api"; +import CustomCategoryBoxes from "../components/custom-category-boxes"; + +export default apiInitializer((api) => { + api.renderInOutlet("above-discovery-categories", CustomCategoryBoxes); +}); diff --git a/themes/42_modern_category___group_boxes/mobile_scss.scss b/themes/42_modern_category___group_boxes/mobile_scss.scss new file mode 100644 index 0000000..5875206 --- /dev/null +++ b/themes/42_modern_category___group_boxes/mobile_scss.scss @@ -0,0 +1,64 @@ +.custom-category-header { + margin-bottom: 1em; + font-size: 2em; + border-bottom: 2px solid var(--primary); + text-align: center; +} + +.category-logo:not(.no-logo-present) + .category-details { + max-height: 132px; + height: calc(132px - 1em); + padding: 0.5em !important; +} + +.custom-category-boxes { + gap: 1em !important; +} + +.custom-category-boxes .category-box .category-box-inner { + column-gap: 1em !important; +} + +.custom-category-boxes + .category-box + .category-box-inner + .category-logo.no-logo-present { + height: 100% !important; +} + +.custom-category-boxes .description { + max-height: unset !important; +} + +.custom-category-boxes .category-box .category-box-inner .category-details { + padding: 1em; +} + +.groups-header { + margin: 1em 0 0 0; +} + +.groups-header-filters-name { + display: none !important; +} + +.groups-boxes { + grid-template-columns: 1fr !important; +} + +.category-box { + position: relative; +} + +.parent-box-link { + // This avoids an issue with nested links by layering links instead + &::before { + content: ""; + position: absolute; + z-index: 0; + top: 0; + left: 0; + right: 0; + bottom: 0; + } +} diff --git a/themes/42_modern_category___group_boxes/settings_yaml.yml b/themes/42_modern_category___group_boxes/settings_yaml.yml new file mode 100644 index 0000000..8bbefb3 --- /dev/null +++ b/themes/42_modern_category___group_boxes/settings_yaml.yml @@ -0,0 +1,40 @@ +first_categories_header: + type: string + default: "First Categories Header" +first_categories: + type: list + list_type: category + default: "" + description: "Chose the categories to feature for the First Header" +second_categories_header: + type: string + default: "Second Categories Header" +second_categories: + type: list + list_type: category + default: "" + description: "Choose the categories to feature under the Second Header" +third_categories_header: + type: string + default: "Third Categories Header" +third_categories: + type: list + list_type: category + default: "" + description: "Choose the categories to feature under the Third Header" +fourth_categories_header: + type: string + default: "Fourth Categories Header" +fourth_categories: + type: list + list_type: category + default: "" + description: "Choose the categories to feature under the Fourth Header" +fifth_categories_header: + type: string + default: "Fifth Categories Header" +fifth_categories: + type: list + list_type: category + default: "" + description: "Choose the categories to feature under the Fifth Header" diff --git a/themes/42_modern_category___group_boxes/theme.json b/themes/42_modern_category___group_boxes/theme.json new file mode 100644 index 0000000..13bc957 --- /dev/null +++ b/themes/42_modern_category___group_boxes/theme.json @@ -0,0 +1,89 @@ +{ + "id": 42, + "name": "Modern Category + Group Boxes", + "user_selectable": false, + "color_scheme": null, + "fields_count": 10, + "files": [ + { + "field_id": 779, + "target_id": 0, + "target_name": "common", + "name": "scss", + "filename": "common_scss.scss", + "bytes": 6897 + }, + { + "field_id": 786, + "target_id": 2, + "target_name": "mobile", + "name": "scss", + "filename": "mobile_scss.scss", + "bytes": 1136 + }, + { + "field_id": 787, + "target_id": 3, + "target_name": "settings", + "name": "yaml", + "filename": "settings_yaml.yml", + "bytes": 1090 + }, + { + "field_id": 785, + "target_id": 4, + "target_name": "translations", + "name": "en", + "filename": "translations_en.yml", + "bytes": 177 + }, + { + "field_id": 780, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/components/category-box.gjs", + "filename": "javascript_discourse_components_category-box.gjs", + "bytes": 4485 + }, + { + "field_id": 781, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/components/category-boxes.gjs", + "filename": "javascript_discourse_components_category-boxes.gjs", + "bytes": 268 + }, + { + "field_id": 782, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/components/category-header.gjs", + "filename": "javascript_discourse_components_category-header.gjs", + "bytes": 236 + }, + { + "field_id": 783, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/components/custom-category-boxes.gjs", + "filename": "javascript_discourse_components_custom-category-boxes.gjs", + "bytes": 3281 + }, + { + "field_id": 784, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/initializers/initialize-category-boxes.js", + "filename": "javascript_discourse_initializers_initialize-category-boxes.js", + "bytes": 242 + }, + { + "field_id": 778, + "target_id": 9, + "target_name": "about", + "name": "about", + "filename": "about_about.yml", + "bytes": 129 + } + ] +} \ No newline at end of file diff --git a/themes/42_modern_category___group_boxes/translations_en.yml b/themes/42_modern_category___group_boxes/translations_en.yml new file mode 100644 index 0000000..59bbdbd --- /dev/null +++ b/themes/42_modern_category___group_boxes/translations_en.yml @@ -0,0 +1,3 @@ +en: + theme_metadata: + description: "A component that allows you to select custom headings for your category page, and chose which categories to feature under each heading." diff --git a/themes/43_clickable_topic/about_about.yml b/themes/43_clickable_topic/about_about.yml new file mode 100644 index 0000000..ccae6da --- /dev/null +++ b/themes/43_clickable_topic/about_about.yml @@ -0,0 +1,10 @@ +{ + "name": "Clickable Topic", + "about_url": "https://meta.discourse.org/t/clickable-topic/183339", + "license_url": "https://github.com/discourse/discourse-clickable-topic/blob/main/LICENSE", + "component": true, + "assets": { + }, + "color_schemes": { + } +} diff --git a/themes/43_clickable_topic/common_scss.scss b/themes/43_clickable_topic/common_scss.scss new file mode 100644 index 0000000..319653d --- /dev/null +++ b/themes/43_clickable_topic/common_scss.scss @@ -0,0 +1,7 @@ +.topic-list-item, +.latest-topic-list-item { + &:hover { + cursor: pointer; + background: rgb(var(--primary-rgb), 0.025); + } +} diff --git a/themes/43_clickable_topic/javascript_discourse_api-initializers_clickable-topic-row.js b/themes/43_clickable_topic/javascript_discourse_api-initializers_clickable-topic-row.js new file mode 100644 index 0000000..f83a178 --- /dev/null +++ b/themes/43_clickable_topic/javascript_discourse_api-initializers_clickable-topic-row.js @@ -0,0 +1,31 @@ +import { apiInitializer } from "discourse/lib/api"; +import { wantsNewWindow } from "discourse/lib/intercept-click"; + +export default apiInitializer((api) => { + api.registerBehaviorTransformer( + "topic-list-item-click", + ({ context, next }) => { + const targetElement = context.event.target; + const topic = context.topic; + + const clickTargets = [ + "topic-list-data", + "link-bottom-line", + "topic-list-item", + ]; + + if (api.container.lookup("service:site").mobileView) { + clickTargets.push("topic-item-metadata", "topic-item-stats"); + } + + if (clickTargets.some((t) => targetElement.classList.contains(t))) { + if (wantsNewWindow(event)) { + return true; + } + return context.navigateToTopic(topic, topic.lastUnreadUrl); + } + + next(); + } + ); +}); diff --git a/themes/43_clickable_topic/javascript_discourse_connectors_above-latest-topic-list-item_clickable-topic-row.gjs b/themes/43_clickable_topic/javascript_discourse_connectors_above-latest-topic-list-item_clickable-topic-row.gjs new file mode 100644 index 0000000..af086ef --- /dev/null +++ b/themes/43_clickable_topic/javascript_discourse_connectors_above-latest-topic-list-item_clickable-topic-row.gjs @@ -0,0 +1,40 @@ +import Component from "@glimmer/component"; +import { action } from "@ember/object"; +import didInsert from "@ember/render-modifiers/modifiers/did-insert"; +import willDestroy from "@ember/render-modifiers/modifiers/will-destroy"; +import { bind } from "discourse/lib/decorators"; +import { wantsNewWindow } from "discourse/lib/intercept-click"; +import DiscourseURL from "discourse/lib/url"; + +export default class extends Component { + @bind + clickHandler(event) { + const targetElement = event.target; + const topic = this.args.outletArgs.topic; + + if (targetElement.tagName === "DIV") { + if (wantsNewWindow(event)) { + return true; + } + DiscourseURL.routeTo(topic.lastUnreadUrl || topic.url); + } + } + + @action + registerClickHandler(element) { + element.parentElement.addEventListener("click", this.clickHandler); + } + + @action + removeClickHandler(element) { + element.parentElement.removeEventListener("click", this.clickHandler); + } + + +} diff --git a/themes/43_clickable_topic/theme.json b/themes/43_clickable_topic/theme.json new file mode 100644 index 0000000..44a8590 --- /dev/null +++ b/themes/43_clickable_topic/theme.json @@ -0,0 +1,41 @@ +{ + "id": 43, + "name": "Clickable Topic", + "user_selectable": false, + "color_scheme": null, + "fields_count": 4, + "files": [ + { + "field_id": 789, + "target_id": 0, + "target_name": "common", + "name": "scss", + "filename": "common_scss.scss", + "bytes": 131 + }, + { + "field_id": 790, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/api-initializers/clickable-topic-row.js", + "filename": "javascript_discourse_api-initializers_clickable-topic-row.js", + "bytes": 849 + }, + { + "field_id": 791, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/connectors/above-latest-topic-list-item/clickable-topic-row.gjs", + "filename": "javascript_discourse_connectors_above-latest-topic-list-item_clickable-topic-row.gjs", + "bytes": 1134 + }, + { + "field_id": 788, + "target_id": 9, + "target_name": "about", + "name": "about", + "filename": "about_about.yml", + "bytes": 261 + } + ] +} \ No newline at end of file diff --git a/themes/44_air_theme/about_about.yml b/themes/44_air_theme/about_about.yml new file mode 100644 index 0000000..ba0ec18 --- /dev/null +++ b/themes/44_air_theme/about_about.yml @@ -0,0 +1,43 @@ +{ + "name": "Air Theme", + "authors": "Discourse", + "about_url": "https://meta.discourse.org/t/discourse-air-theme/197703", + "license_url": "https://github.com/discourse/discourse-air/blob/main/LICENSE", + "components": [ + "https://github.com/discourse/discourse-minimal-category-boxes.git", + "https://github.com/discourse/discourse-clickable-topic.git" + ], + "modifiers": { + "serialize_topic_excerpts": true + }, + "color_schemes": { + "air-light": { + "primary": "1c1c1c", + "secondary": "f9fcff", + "tertiary": "3877e5", + "quaternary": "7e8b93", + "header_background": "f9fcff", + "header_primary": "122b43", + "highlight": "e6cb37", + "danger": "d05454", + "success": "71bd9f", + "love": "c16ad7", + "selected": "e1ebfb" + }, + "air-dark": { + "primary": "e0e0e0", + "secondary": "2d2d2d", + "tertiary": "9a5cfd", + "quaternary": "71bd9f", + "header_background": "202020", + "header_primary": "e0e0e0", + "highlight": "9a5cfd", + "danger": "d05454", + "success": "71bd9f", + "love": "c16ad7", + "selected": "2f0177", + "hover": "535353" + } + }, + "screenshots": ["screenshots/light.webp", "screenshots/dark.webp"] +} diff --git a/themes/44_air_theme/common_header.html b/themes/44_air_theme/common_header.html new file mode 100644 index 0000000..976104f --- /dev/null +++ b/themes/44_air_theme/common_header.html @@ -0,0 +1 @@ +
diff --git a/themes/44_air_theme/common_screenshot_dark.txt b/themes/44_air_theme/common_screenshot_dark.txt new file mode 100644 index 0000000..e69de29 diff --git a/themes/44_air_theme/common_screenshot_light.txt b/themes/44_air_theme/common_screenshot_light.txt new file mode 100644 index 0000000..e69de29 diff --git a/themes/44_air_theme/common_scss.scss b/themes/44_air_theme/common_scss.scss new file mode 100644 index 0000000..6726928 --- /dev/null +++ b/themes/44_air_theme/common_scss.scss @@ -0,0 +1,615 @@ +@use "lib/viewport"; + +// custom search banner customizations +.welcome-banner.--location-above-topic-content .custom-search-banner-wrap { + color: var(--primary); +} + +.custom-search-banner-wrap { + color: var(--secondary); + + .custom-search-banner-headline, + h1 { + line-height: var(--line-height-small); + } + + p { + margin-top: 0.5em; + margin-bottom: 2em; + } + + .btn { + height: 100%; + } + + .search-menu input[type="text"] { + border: 1px solid transparent; + border-radius: 0.25em; + min-height: 40px; + + &:focus { + outline: 3px solid rgb(var(--primary-rgb), 0.35); + } + } + + .widget-link.show-help { + color: rgb(var(--primary-rgb), 0.75); + border-radius: 0.5em; + padding: 0.5em; + background-color: rgb(var(--secondary-rgb), 0.25); + + &:hover { + color: var(--primary); + } + } + + .search-menu .search-input { + border-color: var(--tertiary-hover); + outline: 1px solid var(--tertiary-hover); + } + + .results { + top: 43px; + border-radius: 0.25em; + } + + .search-context { + top: 3.25em; + right: 1em; + } +} + +.search-input { + border-radius: 0.25em; +} + +.display-search-banner { + #main-outlet { + padding-top: 2em; + } +} + +// Ideally the search banner component should be set to use the below-site-header outlet, +// but this ensures the default works too +.above-main-container-outlet.search-banner { + .custom-search-banner-wrap { + padding: 1em 0 2em; + color: var(--tertiary); + + .mobile-view & { + color: var(--secondary); + } + + .custom-search-banner-headline, + h1 { + margin-bottom: 0; + } + + .search-widget { + margin-top: 2em; + } + } +} + +// Main customizations +.alert { + margin: 1em 0; +} + +.topic-list .topic-list-header .topic-list-data, +.topic-list .topic-list-item .topic-list-data { + padding: 15px 5px; +} + +.navigation-topics .topic-list .topic-list-body .topic-list-data, +.navigation-topics .topic-list .topic-list-header .topic-list-data { + flex: unset; +} + +.badge-wrapper.box { + border-radius: 0.25em; + overflow: hidden; +} + +.badge-wrapper.bullet { + .badge-category-bg { + border-radius: 0.125em; + } + + .badge-category-parent-bg { + border-top-left-radius: 0.125em; + border-bottom-left-radius: 0.125em; + + + .badge-category-bg { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-top-right-radius: 0.125em; + border-bottom-right-radius: 0.125em; + } + } +} + +.discourse-tags { + gap: 0.5em; +} + +.discourse-tag { + font-size: $font-down-1; + border-radius: 0.25em; + padding: 0.15em 0.25em 0.15em 0.35em; + background-color: var(--primary-low); + color: var(--primary) !important; + + &:hover { + background-color: var(--primary-low-mid); + color: var(--primary); + } +} + +.discourse-tags .discourse-tag.simple:not(:last-child)::after, +.list-tags .discourse-tag.simple:not(:last-child)::after, +.search-category .discourse-tag.simple:not(:last-child)::after { + content: ""; + margin-left: unset; +} + +.topic-list .link-bottom-line .discourse-tag.simple::after, +.topic-list .link-bottom-line .discourse-tag.box { + margin-right: 0; +} + +#site-text-logo { + color: var(--primary); +} + +.mobile-view { + .cm-header-links { + display: none; + } + + .list-controls .nav-pills .drop li:first-of-type { + display: none; + } +} + +.not-found-container { + background-color: var(--secondary); +} + +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.select-kit.combo-box .select-kit-header, +.d-editor-textarea-wrapper, +div.ac-wrap { + border-radius: 4px; +} + +.d-header { + box-shadow: 0 2px 4px 0 rgb(0, 0, 0, 0.06); +} + +.d-header-icons .d-icon { + border-radius: 100px; +} + +.d-header-icons .icon { + border-radius: 0.25em; + margin-left: 0.3em; + border: 1px solid transparent; + + svg { + font-size: 1.25em; + } +} + +.d-header-icons .icon img.avatar { + border-radius: 0.25em; +} + +.menu-panel.drop-down { + margin-top: 1em; + border-radius: 0.5em; + border: 1px solid var(--primary-low-mid); +} + +.drop-down-mode .d-header-icons .active .icon { + border: 1px solid transparent; + + .d-icon { + color: var(--tertiary); + } +} + +.drop-down-mode .d-header-icons .active .icon:hover { + border: 1px solid transparent; +} + +.unread-high-priority-notifications { + background: var(--quaternary); +} + +.timeline-container .topic-timeline .timeline-handle { + background-color: var(--tertiary); +} + +.timeline-container .topic-timeline .timeline-scrollarea { + border-left-color: var(--tertiary); +} + +html { + body:not(.no-ember) { + background: + linear-gradient( + 0deg, + rgb(var(--primary-rgb), 0.075) 0%, + rgb(var(--primary-rgb), 0.075) 100% + ), + linear-gradient(0deg, var(--secondary) 100%, var(--secondary) 100%); + } + + .background-container { + position: fixed; + top: 0; + left: 0; + height: 100vh; + width: 100vw; + background: linear-gradient( + 90deg, + var(--tertiary-hover) 0%, + var(--tertiary) 100% + ); + clip-path: ellipse(148% 70% at 91% -14%); + } + + body.no-ember .background-container { + display: none; + } +} + +html body #main-outlet { + margin-top: 30px; + margin-bottom: 50px; + background: var(--secondary); + border-radius: 1em; + padding: 3em 3em 5%; + max-width: 1150px; + padding-bottom: 5% !important; // overriding inline style + box-shadow: + 0 24px 40px rgb(0, 0, 0, 0.07), + 0 10.8529px 24.1177px rgb(0, 0, 0, 0.0456112), + 0 4.50776px 10.0172px rgb(0, 0, 0, 0.035), + 0 1.63037px 3.62304px rgb(0, 0, 0, 0.0243888); + + @media screen and (width <= 700px) { + padding: 1.5em; + margin-top: 0; + } + + @media screen and (width <= 1120px) { + width: 80%; + } + + @media screen and (width <= 1075px) { + width: 85%; + } + + .archetype-regular & { + min-height: 500px; + } +} + +.nav-pills:not(.user-nav) > li a.active, +.nav-pills:not(.user-nav) > li > a { + border-radius: 0.5em; +} + +.category-calendar { + &.before-topic-list-body-outlet { + display: block; + } + background: var(--secondary); + padding: 1em; + border-radius: 8px; + margin-bottom: 1em; +} + +.discourse-post-event-upcoming-events { + background: var(--secondary); + border-radius: 8px; + padding: 1em; + margin-bottom: 1em; +} + +// Topic List + +@keyframes background-fade-highlight { + 0% { + background-color: var(--highlight-low); + } + + 100% { + background-color: var(--secondary); + } +} + +.full-width .contents .topic-list { + border-collapse: separate; + border-spacing: 0 0.25em; + display: contents; + + .topic-list-header { + tr { + display: flex; + border-bottom: none; + } + display: contents; + + .topic-list-data.default { + width: 63%; + } + + .topic-list-data.posters { + width: 7%; + } + + .topic-list-data.posts { + width: 15%; + } + + .topic-list-data.activity { + width: 15%; + } + } + + .topic-list-body { + display: contents; + + .topic-list-item-separator { + width: 100%; + margin: 0.75em 0; + display: flex; + + .topic-list-data { + width: 100%; + } + } + + .topic-list-item { + display: flex; + margin-bottom: 0.5em; + background-color: var(--secondary); + border: 1px solid rgb(var(--primary-rgb), 0.2); + border-radius: 1em; + position: relative; + transition: box-shadow 100ms ease-in-out; + box-shadow: 0 0 8px rgb(0, 0, 0, 0.05); + overflow: hidden; + + &.visited { + border: 1px solid rgb(var(--primary-rgb), 0.1); + + .discourse-tag { + opacity: 0.75; + } + + &:hover { + border: 1px solid rgb(var(--primary-rgb), 0.25); + + .discourse-tag { + opacity: 1; + } + } + } + + &:hover { + background-color: var(--secondary); + box-shadow: 0 0 12px rgb(0, 0, 0, 0.1); + border: 1px solid rgb(var(--primary-rgb), 0.3); + + a.title:not(.badge-notification), + a.topic-excerpt { + color: var(--primary) !important; + } + } + + .topic-list-data.main-link { + width: 63%; + order: 2; + } + + .topic-list-data.posters { + width: 7%; + order: 1; + height: auto; + display: flex; + justify-content: center; + align-items: center; + + a:not(.latest) { + display: none; + } + } + + .topic-list-data.posts { + width: 15%; + order: 3; + display: flex; + justify-content: center; + align-items: center; + } + + .topic-list-data.age { + width: 15%; + order: 4; + display: flex; + justify-content: center; + align-items: center; + } + + &.selected { + td:nth-of-type(1) { + box-shadow: none; + } + + &:focus-visible td:nth-of-type(2) { + box-shadow: inset 3px 0 0 var(--tertiary); + border-radius: calc(1em - 3px); + } + } + } + + .main-link { + min-height: 100%; + + .link-top-line { + display: block; + margin-bottom: 0.25em; + } + + .title { + font-weight: bold; + } + + .link-area { + display: flex; + + .link-title-area { + margin-right: 1em; + font-size: $font-up-1; + } + + .link-meta-area { + font-size: $font-down-3; + display: flex; + align-items: center; + } + } + } + + .posters { + .avatar { + width: 40px; + height: 40px; + border-radius: 8px; + } + + a.latest { + margin-right: 4px; + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-content: center; + align-items: center; + + .avatar { + margin-right: 0; + } + } + + a:not(.latest) { + margin-left: -22px; + + .avatar { + border: 3px solid var(--secondary); + } + } + } + + .posts-map, + .num.age.activity { + a { + padding: 0; + } + } + + .posts-map { + position: relative; + + .number { + margin-right: 0.25em; + } + } + + .post-activity { + .d-icon-reply { + color: var(--primary-medium); + margin-right: 0.25em; + } + + .relative-date { + color: var(--primary-medium); + } + } + } +} + +.topic-list-data.num.views { + display: none; +} + +// published page additions +.published-page-content-wrapper { + max-width: 1000px; + margin-top: 30px; + margin-bottom: 50px; + background: var(--secondary); + border-radius: 1em; + padding: 3em 3em 5%; + box-shadow: + 0 24px 40px rgb(0, 0, 0, 0.07), + 0 10.8529px 24.1177px rgb(0, 0, 0, 0.0456112), + 0 4.50776px 10.0172px rgb(0, 0, 0, 0.035), + 0 1.63037px 3.62304px rgb(0, 0, 0, 0.0243888); + z-index: 1; + position: relative; +} + +.published-page { + .background-container { + display: none; + } + + &::before { + background: linear-gradient( + 90deg, + var(--tertiary-hover) 0%, + var(--tertiary) 100% + ); + clip-path: ellipse(148% 70% at 91% -14%); + content: ""; + width: 100%; + height: 100%; + display: block; + position: fixed; + z-index: 0; + } +} + +.quote-button { + border-radius: 0.5em; +} + +.topic-list .main-link.focused + .posters { + box-shadow: inset 3px 0 0 var(--tertiary); +} + +.topic-list .main-link.focused { + box-shadow: none; +} + +.title-voting { + padding-left: 14px; +} diff --git a/themes/44_air_theme/desktop_scss.scss b/themes/44_air_theme/desktop_scss.scss new file mode 100644 index 0000000..c028435 --- /dev/null +++ b/themes/44_air_theme/desktop_scss.scss @@ -0,0 +1,3 @@ +@import "showcased-categories"; +@import "chat-desktop"; +@import "sidebar-desktop"; diff --git a/themes/44_air_theme/extra_scss_chat-desktop.txt b/themes/44_air_theme/extra_scss_chat-desktop.txt new file mode 100644 index 0000000..54ddfed --- /dev/null +++ b/themes/44_air_theme/extra_scss_chat-desktop.txt @@ -0,0 +1,56 @@ +html body.has-sidebar-page.has-full-page-chat { + #main-outlet-wrapper { + gap: 0 2em; + } + + #main-outlet { + padding-bottom: 0 !important; + } +} + +.full-page-chat { + border: none !important; +} + +.chat-channel { + height: calc(100vh - (var(--header-offset) + 7.85em)); +} + +.c-navbar-container { + border-radius: 1em 1em 0 0; +} + +.chat-composer__wrapper { + background: transparent; +} + +.full-page-chat .chat-full-page-header { + border-radius: 1em 1em 0 0; +} + +.has-full-page-chat #main-outlet.wrap { + margin-bottom: 30px; + padding-bottom: 0 !important; + + .full-page-chat { + grid-template-rows: calc(var(--full-page-chat-height) - 50px); + } +} + +@media screen and (width <= 1366px) { + .has-full-page-chat #main-outlet { + width: 100%; + } + + .has-full-page-chat:not(.discourse-sidebar) #main-outlet.wrap { + max-width: 100% !important; + width: 100% !important; + border-radius: 0; + margin: 0; + padding: 0; + + .full-page-chat { + grid-template-rows: var(--full-page-chat-height); + } + } +} diff --git a/themes/44_air_theme/extra_scss_chat-mobile.txt b/themes/44_air_theme/extra_scss_chat-mobile.txt new file mode 100644 index 0000000..c2ed502 --- /dev/null +++ b/themes/44_air_theme/extra_scss_chat-mobile.txt @@ -0,0 +1,5 @@ +html body.has-full-page-chat #main-outlet { + width: 100% !important; + padding: 0 !important; + background-color: var(--secondary) !important; +} diff --git a/themes/44_air_theme/extra_scss_showcased-categories.txt b/themes/44_air_theme/extra_scss_showcased-categories.txt new file mode 100644 index 0000000..ad2211a --- /dev/null +++ b/themes/44_air_theme/extra_scss_showcased-categories.txt @@ -0,0 +1,19 @@ +.showcased-categories-sidebar { + .two-topic-list-sidebar { + .btn-link.posts-map.badge-posts { + display: block; + } + + .topic-list .topic-list-item { + height: unset; + } + + .topic-excerpt { + display: none; + } + } + + .full-width .contents .topic-list { + display: unset; + } +} diff --git a/themes/44_air_theme/extra_scss_sidebar-desktop.txt b/themes/44_air_theme/extra_scss_sidebar-desktop.txt new file mode 100644 index 0000000..3fb298c --- /dev/null +++ b/themes/44_air_theme/extra_scss_sidebar-desktop.txt @@ -0,0 +1,33 @@ +// sidebar +#main-outlet-wrapper { + .sidebar-wrapper { + margin: 30px 0 50px; + background-color: var(--secondary); + border-radius: 1em; + top: calc(var(--header-offset) + 30px); + height: calc(100vh - (var(--header-offset) + 80px)); + box-shadow: + 0 24px 40px rgb(0, 0, 0, 0.07), + 0 10.8529px 24.1177px rgb(0, 0, 0, 0.0456112), + 0 4.50776px 10.0172px rgb(0, 0, 0, 0.035), + 0 1.63037px 3.62304px rgb(0, 0, 0, 0.0243888); + } + + .sidebar-footer-wrapper { + background: var(--secondary); + } +} + +body.has-sidebar-page { + #main-outlet-wrapper { + padding-left: 8px; + } + + #main-outlet { + max-width: unset; + } +} + +.desktop-view .sidebar-footer-wrapper .sidebar-footer-container::before { + background: linear-gradient(to bottom, transparent, rgb(var(--secondary), 1)); +} diff --git a/themes/44_air_theme/javascript_discourse_initializers_init-topic-excerpts.js b/themes/44_air_theme/javascript_discourse_initializers_init-topic-excerpts.js new file mode 100644 index 0000000..a879c89 --- /dev/null +++ b/themes/44_air_theme/javascript_discourse_initializers_init-topic-excerpts.js @@ -0,0 +1,5 @@ +import { apiInitializer } from "discourse/lib/api"; + +export default apiInitializer((api) => { + api.registerValueTransformer("topic-list-item-expand-pinned", () => true); +}); diff --git a/themes/44_air_theme/mobile_scss.scss b/themes/44_air_theme/mobile_scss.scss new file mode 100644 index 0000000..d81c509 --- /dev/null +++ b/themes/44_air_theme/mobile_scss.scss @@ -0,0 +1,257 @@ +@import "chat-mobile"; + +.custom-search-banner-wrap { + .custom-search-banner-headline, + h1 { + font-size: 2.5em !important; + } + + p { + font-weight: normal; + font-size: $font-up-1; + } +} + +html + body:not( + .static-tos, + .static-guidelines, + .static-privacy, + .about-page, + .badges-page, + .tags-page, + .archetype-banner, + .archetype-regular, + .archetype-private_message, + .admin-interface, + .user-summary-page, + .user-activity-page, + .user-invites-page, + .user-preferences-page, + .user-messages-page, + .user-notifications-page, + .user-badges-page + ) + #main-outlet { + width: calc(100% - 1em); + padding: 0 0.5em 1em 0.5em; + box-shadow: none; + background-color: transparent; +} + +#main-outlet { + margin-inline: auto; +} + +html body #main-outlet .docs { + padding: 1em; + background-color: var(--secondary); +} + +html body.static-tos #main-outlet, +html body.no-ember #main-outlet, +html body.static-privacy #main-outlet, +html body.about-page #main-outlet, +html body.static-guidelines #main-outlet, +html body.tags-page #main-outlet, +html body.badges-page #main-outlet, +html body.archetype-banner #main-outlet, +html body.archetype-regular #main-outlet, +html body.archetype-private_message #main-outlet, +html body.admin-interface #main-outlet, +html body.user-summary-page #main-outlet, +html body.user-activity-page #main-outlet, +html body.user-invites-page #main-outlet, +html body.user-preferences-page #main-outlet, +html body.user-messages-page #main-outlet, +html body.user-notifications-page #main-outlet, +html body.user-badges-page #main-outlet, +html body #main-outlet:has(.container.group), +html body #main-outlet:has(.edit-category-page) { + border-radius: 0; + width: calc(100% - 3em); + background-color: var(--secondary); + margin-bottom: 0; +} + +html body #main-outlet:has(.edit-category-page) { + margin-block: 1em; + padding: 1em; + border-radius: 8px; +} + +.container.posts > .row { + max-width: calc(100vw - 1.5em); +} + +.navigation-categories .navigation-container, +.categories-list .navigation-container { + border-bottom: 0 !important; +} + +body.category .category-breadcrumb .select-kit-header, +#navigation-bar, +.navigation-controls { + margin-bottom: 0.5em !important; +} + +body.category .navigation-categories .list-container, +.categories-list .list-container { + padding-top: 1em !important; +} + +ol.category-breadcrumb { + margin-top: 1em; +} + +.categories-list .list-controls { + background: var(--secondary); + padding: 0.5em; + border-radius: 8px; +} + +.list-controls .nav-pills { + li.navigation-toggle { + border-radius: 8px; + border: none; + background-color: var(--secondary); + + a:hover, + a:focus { + color: var(--primary); + background-color: var(--secondary); + } + } + + .drop { + top: calc(100% + 0.5em); + border-radius: 8px; + box-shadow: 0 0 12px rgb(0, 0, 0, 0.25); + } +} + +.topic-list .topic-list-data { + padding: 1em 1em 0 1em; + max-width: unset; +} + +.custom-search-banner-wrap .search-context { + top: 3em !important; +} + +.top-lists { + background-color: var(--secondary); + border-radius: 8px; + padding: 0.25em 0.25em 0.25em 0.5em; + margin-bottom: 0.5em; +} + +.users-directory.directory, +.reviewable { + width: 100%; + background-color: var(--secondary); + margin-left: -0.5em; + padding: 0 0.5em; +} + +.tag-groups-container { + background: var(--secondary); + padding: 2em 1em; + border-radius: 0.25em; + margin-top: 1em; +} + +.search-container .search-advanced .search-results { + padding: none; +} + +.fps-result { + background: var(--secondary); + padding: 1em; + border-radius: 8px; + box-shadow: 0 0 8px rgb(0, 0, 0, 0.05); + border: 1px solid rgb(var(--primary-rgb), 0.1); + margin-bottom: 0.5em; +} + +.search-container .search-header { + border-top-right-radius: 8px; + border-top-left-radius: 8px; +} + +.search-container .search-advanced .search-info { + padding-right: 1em; + padding-left: 1em; + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; +} + +.full-width .contents .topic-list .topic-list-header tr { + background-color: var(--secondary); + border-radius: 8px; + box-shadow: 0 0 8px rgb(0, 0, 0, 0.05); + border: 1px solid rgb(var(--primary-rgb), 0.1); + margin-bottom: 1em; +} + +.topic-list .topic-item-stats { + flex-wrap: wrap; +} + +.topic-list-item { + > .topic-list-data { + width: 100%; + } + + .discourse-tags { + order: 3; + width: 100%; + margin-top: 0.5em; + } +} + +.full-width .contents .topic-list .topic-list-item .posts-map { + padding: 0; + + .number { + margin: 0; + } +} + +.full-width + .contents + .topic-list + .topic-list-body + .topic-list-item + .topic-list-data.posts { + width: unset; +} + +.topic-list .topic-list-header .topic-list-data, +.topic-list .topic-list-item .topic-list-data { + padding: 15px; +} + +// default category list styles when the modern category boxes theme component isn't used +.category-list-item.category { + background: var(--secondary); + border-radius: 1em; + + tbody { + display: flex; + flex-direction: column; + width: 100%; + } + + td { + width: 100%; + } + + .num.posts { + padding-right: 0.25em; + } +} + +.list-controls .nav-pills .list-control-toggle-link-trigger { + color: var(--secondary); +} diff --git a/themes/44_air_theme/theme.json b/themes/44_air_theme/theme.json new file mode 100644 index 0000000..49563f3 --- /dev/null +++ b/themes/44_air_theme/theme.json @@ -0,0 +1,131 @@ +{ + "id": 44, + "name": "Air Theme", + "user_selectable": false, + "color_scheme": { + "id": 48, + "name": "air-light", + "theme_id": 44, + "colors": { + "primary": "1c1c1c", + "secondary": "f9fcff", + "tertiary": "3877e5", + "quaternary": "7e8b93", + "header_background": "f9fcff", + "header_primary": "122b43", + "highlight": "e6cb37", + "selected": "e1ebfb", + "hover": "f2f2f2", + "danger": "d05454", + "success": "71bd9f", + "love": "c16ad7" + } + }, + "fields_count": 13, + "files": [ + { + "field_id": 796, + "target_id": 0, + "target_name": "common", + "name": "header", + "filename": "common_header.html", + "bytes": 41 + }, + { + "field_id": 793, + "target_id": 0, + "target_name": "common", + "name": "screenshot_dark", + "filename": "common_screenshot_dark.txt", + "bytes": 0 + }, + { + "field_id": 792, + "target_id": 0, + "target_name": "common", + "name": "screenshot_light", + "filename": "common_screenshot_light.txt", + "bytes": 0 + }, + { + "field_id": 795, + "target_id": 0, + "target_name": "common", + "name": "scss", + "filename": "common_scss.scss", + "bytes": 11478 + }, + { + "field_id": 797, + "target_id": 1, + "target_name": "desktop", + "name": "scss", + "filename": "desktop_scss.scss", + "bytes": 83 + }, + { + "field_id": 800, + "target_id": 2, + "target_name": "mobile", + "name": "scss", + "filename": "mobile_scss.scss", + "bytes": 5179 + }, + { + "field_id": 799, + "target_id": 4, + "target_name": "translations", + "name": "en", + "filename": "translations_en.yml", + "bytes": 81 + }, + { + "field_id": 801, + "target_id": 5, + "target_name": "extra_scss", + "name": "chat-desktop", + "filename": "extra_scss_chat-desktop.txt", + "bytes": 1018 + }, + { + "field_id": 802, + "target_id": 5, + "target_name": "extra_scss", + "name": "chat-mobile", + "filename": "extra_scss_chat-mobile.txt", + "bytes": 146 + }, + { + "field_id": 803, + "target_id": 5, + "target_name": "extra_scss", + "name": "showcased-categories", + "filename": "extra_scss_showcased-categories.txt", + "bytes": 307 + }, + { + "field_id": 804, + "target_id": 5, + "target_name": "extra_scss", + "name": "sidebar-desktop", + "filename": "extra_scss_sidebar-desktop.txt", + "bytes": 808 + }, + { + "field_id": 798, + "target_id": 6, + "target_name": "javascript", + "name": "discourse/initializers/init-topic-excerpts.js", + "filename": "javascript_discourse_initializers_init-topic-excerpts.js", + "bytes": 175 + }, + { + "field_id": 794, + "target_id": 9, + "target_name": "about", + "name": "about", + "filename": "about_about.yml", + "bytes": 1234 + } + ] +} \ No newline at end of file diff --git a/themes/44_air_theme/translations_en.yml b/themes/44_air_theme/translations_en.yml new file mode 100644 index 0000000..e9120fb --- /dev/null +++ b/themes/44_air_theme/translations_en.yml @@ -0,0 +1,3 @@ +en: + theme_metadata: + description: "A clean and modern theme for Discourse." diff --git a/themes/45_custom_background/common_scss.scss b/themes/45_custom_background/common_scss.scss new file mode 100644 index 0000000..e8a5f0d --- /dev/null +++ b/themes/45_custom_background/common_scss.scss @@ -0,0 +1 @@ +body { background-image: url(} + up.url + %q{) !important; background-size: cover !important; background-attachment: fixed !important; background-position: center !important; } \ No newline at end of file diff --git a/themes/45_custom_background/theme.json b/themes/45_custom_background/theme.json new file mode 100644 index 0000000..d1a50d3 --- /dev/null +++ b/themes/45_custom_background/theme.json @@ -0,0 +1,17 @@ +{ + "id": 45, + "name": "Custom Background", + "user_selectable": false, + "color_scheme": null, + "fields_count": 1, + "files": [ + { + "field_id": 805, + "target_id": 0, + "target_name": "common", + "name": "scss", + "filename": "common_scss.scss", + "bytes": 176 + } + ] +} \ No newline at end of file diff --git a/themes/all_color_schemes.json b/themes/all_color_schemes.json new file mode 100644 index 0000000..9702816 --- /dev/null +++ b/themes/all_color_schemes.json @@ -0,0 +1,758 @@ +[ + { + "id": 1, + "name": "Dark", + "theme_id": null, + "colors": { + "primary": "dddddd", + "secondary": "222222", + "tertiary": "099dd7", + "quaternary": "c14924", + "header_background": "111111", + "header_primary": "dddddd", + "highlight": "a87137", + "selected": "2c2c2c", + "hover": "313131", + "danger": "e45735", + "success": "1ca551", + "love": "fa6c8d" + } + }, + { + "id": 2, + "name": "WCAG Light", + "theme_id": null, + "colors": { + "primary": "000000", + "primary-medium": "696969", + "primary-low-mid": "909090", + "secondary": "ffffff", + "tertiary": "0033CC", + "quaternary": "3369FF", + "header_background": "ffffff", + "header_primary": "000000", + "highlight": "ffff00", + "highlight-high": "0036E6", + "highlight-medium": "e0e9ff", + "highlight-low": "e0e9ff", + "selected": "E2E9FE", + "hover": "F0F4FE", + "danger": "BB1122", + "success": "3d854d", + "love": "9D256B" + } + }, + { + "id": 3, + "name": "WCAG Dark", + "theme_id": null, + "colors": { + "primary-medium": "999999", + "primary-low-mid": "888888", + "secondary": "0c0c0c", + "tertiary": "759AFF", + "quaternary": "759AFF", + "header_background": "000000", + "header_primary": "ffffff", + "highlight": "3369FF", + "selected": "0d2569", + "hover": "002382", + "danger": "FF697A", + "success": "70B880", + "love": "9D256B", + "primary": "b2c0cd" + } + }, + { + "id": 4, + "name": "Dracula", + "theme_id": null, + "colors": { + "primary_very_low": "373A47", + "primary_low": "414350", + "primary_low_mid": "8C8D94", + "primary_medium": "A3A4AA", + "primary_high": "CCCCCF", + "primary": "f2f2f2", + "primary-50": "3F414E", + "primary-100": "535460", + "primary-200": "666972", + "primary-300": "7A7C84", + "primary-400": "8D8F96", + "primary-500": "A2A3A9", + "primary-600": "B6B7BC", + "primary-700": "C7C7C7", + "primary-800": "DEDFE0", + "primary-900": "F5F5F5", + "secondary_low": "CCCCCF", + "secondary_medium": "91939A", + "secondary_high": "6A6C76", + "secondary_very_high": "3D404C", + "secondary": "2d303e", + "tertiary_low": "4A4463", + "tertiary_medium": "6E5D92", + "tertiary": "bd93f9", + "tertiary_high": "9275C1", + "quaternary_low": "6AA8BA", + "quaternary": "8be9fd", + "header_background": "373A47", + "header_primary": "f2f2f2", + "highlight_low": "686D55", + "highlight_medium": "52592B", + "highlight_high": "C0C879", + "selected": "4A4463", + "hover": "61597f", + "danger_low": "957279", + "danger": "ff5555", + "success_low": "386D50", + "success_medium": "44B366", + "success": "50fa7b", + "love_low": "6C4667", + "love": "ff79c6" + } + }, + { + "id": 5, + "name": "Solarized Light", + "theme_id": null, + "colors": { + "primary_very_low": "F0ECD7", + "primary_low": "D6D8C7", + "primary_low_mid": "A4AFA5", + "primary_medium": "7E918C", + "primary_high": "4C6869", + "primary": "002B36", + "primary-50": "F0EBDA", + "primary-100": "DAD8CA", + "primary-200": "B2B9B3", + "primary-300": "839496", + "primary-400": "76898C", + "primary-500": "697F83", + "primary-600": "627A7E", + "primary-700": "556F74", + "primary-800": "415F66", + "primary-900": "21454E", + "secondary_low": "325458", + "secondary_medium": "6C8280", + "secondary_high": "97A59D", + "secondary_very_high": "E8E6D3", + "secondary": "FCF6E1", + "tertiary_low": "D6E6DE", + "tertiary_medium": "7EBFD7", + "tertiary": "0088cc", + "tertiary_high": "329ED0", + "quaternary": "e45735", + "header_background": "FCF6E1", + "header_primary": "002B36", + "highlight_low": "FDF9AD", + "highlight_medium": "E3D0A3", + "highlight": "F2F481", + "highlight_high": "BCAA7F", + "selected": "E8E6D3", + "hover": "F0EBDA", + "danger_low": "F8D9C2", + "danger": "e45735", + "success_low": "CFE5B9", + "success_medium": "4CB544", + "success": "009900", + "love_low": "FCDDD2", + "love": "fa6c8d" + } + }, + { + "id": 6, + "name": "Solarized Dark", + "theme_id": null, + "colors": { + "primary_very_low": "0D353F", + "primary_low": "193F47", + "primary_low_mid": "798C88", + "primary_medium": "97A59D", + "primary_high": "B5BDB1", + "primary": "FCF6E1", + "primary-50": "21454E", + "primary-100": "415F66", + "primary-200": "556F74", + "primary-300": "627A7E", + "primary-400": "697F83", + "primary-500": "76898C", + "primary-600": "839496", + "primary-700": "B2B9B3", + "primary-800": "DAD8CA", + "primary-900": "F0EBDA", + "secondary_low": "B5BDB1", + "secondary_medium": "81938D", + "secondary_high": "4E6A6B", + "secondary_very_high": "143B44", + "secondary": "002B36", + "tertiary_low": "003E54", + "tertiary_medium": "00557A", + "tertiary": "1a97d5", + "tertiary_high": "006C9F", + "quaternary_low": "944835", + "quaternary": "e45735", + "header_background": "002B36", + "header_primary": "FCF6E1", + "highlight_low": "4D6B3D", + "highlight_medium": "464C33", + "highlight": "F2F481", + "highlight_high": "BFCA47", + "selected": "143B44", + "hover": "21454E", + "danger_low": "443836", + "danger_medium": "944835", + "danger": "e45735", + "success_low": "004C26", + "success_medium": "007313", + "success": "009900", + "love_low": "4B3F50", + "love": "fa6c8d" + } + }, + { + "id": 22, + "name": "Material Teal/Amber", + "theme_id": 23, + "colors": { + "primary": "212121", + "secondary": "fafafa", + "tertiary": "ffa000", + "quaternary": "00796b", + "header_background": "00796b", + "header_primary": "ffffff", + "highlight": "ffff8d", + "hover": "f2f2f2", + "danger": "ff5722", + "success": "4caf50", + "love": "fa6c8d", + "selected": "fff1d9" + } + }, + { + "id": 23, + "name": "Material Red/Blue", + "theme_id": 23, + "colors": { + "primary": "212121", + "secondary": "fafafa", + "tertiary": "448aff", + "quaternary": "d32f2f", + "header_background": "d32f2f", + "header_primary": "ffffff", + "highlight": "ffff8d", + "hover": "f2f2f2", + "danger": "ff6d00", + "success": "4caf50", + "love": "fa6c8d", + "selected": "e3edff" + } + }, + { + "id": 24, + "name": "Material Blue/Red", + "theme_id": 23, + "colors": { + "primary": "212121", + "secondary": "fafafa", + "tertiary": "ff5252", + "quaternary": "2196f3", + "header_background": "1976f2", + "header_primary": "ffffff", + "highlight": "ffff8d", + "hover": "f2f2f2", + "danger": "ff6d00", + "success": "4caf50", + "love": "fa6c8d", + "selected": "ffe5e5" + } + }, + { + "id": 25, + "name": "Material Indigo/Orange", + "theme_id": 23, + "colors": { + "primary": "212121", + "secondary": "fafafa", + "tertiary": "ff5722", + "quaternary": "3f51b5", + "header_background": "303f9f", + "header_primary": "ffffff", + "highlight": "ffeb3b", + "hover": "f2f2f2", + "danger": "f44336", + "success": "4caf50", + "love": "fa6c8d", + "selected": "ffe6de" + } + }, + { + "id": 26, + "name": "Material Dark", + "theme_id": 23, + "colors": { + "primary": "fafafa", + "secondary": "212121", + "tertiary": "00bcd4", + "quaternary": "00bcd4", + "header_background": "000000", + "header_primary": "ffffff", + "highlight": "fafafa", + "danger": "e45735", + "success": "009900", + "love": "fa6c8d", + "selected": "00424a", + "hover": "2d2d2d" + } + }, + { + "id": 27, + "name": "Horizon", + "theme_id": -2, + "colors": { + "primary": "1a1a1a", + "secondary": "ffffff", + "tertiary": "595bca", + "quaternary": "e45735", + "header_background": "ffffff", + "header_primary": "1a1a1a", + "highlight": "ffff4d", + "selected": "d7dfff", + "hover": "e1e8ff", + "danger": "c80001", + "success": "090", + "love": "fa6c8d", + "tertiary-med-or-tertiary": "595bca" + } + }, + { + "id": 28, + "name": "Horizon Dark", + "theme_id": -2, + "colors": { + "primary": "ffffff", + "secondary": "1a1a1a", + "quaternary": "e45735", + "header_background": "1a1a1a", + "header_primary": "ffffff", + "highlight": "ffff4d", + "selected": "3b3e56", + "hover": "333548", + "danger": "c80001", + "success": "090", + "love": "fa6c8d", + "tertiary": "6568e6", + "tertiary-med-or-tertiary": "6568e6" + } + }, + { + "id": 29, + "name": "Royal", + "theme_id": -2, + "colors": { + "primary": "1a1a1a", + "secondary": "ffffff", + "tertiary": "1f7bc1", + "quaternary": "e45735", + "header_background": "ffffff", + "header_primary": "1a1a1a", + "highlight": "ffff4d", + "selected": "c7e3ff", + "hover": "d6ebff", + "danger": "c80001", + "success": "090", + "love": "fa6c8d", + "tertiary-med-or-tertiary": "1f7bc1" + } + }, + { + "id": 30, + "name": "Royal Dark", + "theme_id": -2, + "colors": { + "primary": "ffffff", + "secondary": "1a1a1a", + "tertiary": "1f7bc1", + "quaternary": "e45735", + "header_background": "1a1a1a", + "header_primary": "ffffff", + "highlight": "ffff4d", + "selected": "3a455f", + "hover": "323b4e", + "danger": "c80001", + "success": "090", + "love": "fa6c8d", + "tertiary-med-or-tertiary": "1f7bc1" + } + }, + { + "id": 31, + "name": "Clover", + "theme_id": -2, + "colors": { + "primary": "1a1a1a", + "secondary": "ffffff", + "tertiary": "39845b", + "quaternary": "e45735", + "header_background": "ffffff", + "header_primary": "1a1a1a", + "highlight": "ffff4d", + "selected": "c6f1d5", + "hover": "d5f5e0", + "danger": "c80001", + "success": "090", + "love": "fa6c8d", + "tertiary-med-or-tertiary": "39845b" + } + }, + { + "id": 32, + "name": "Clover Dark", + "theme_id": -2, + "colors": { + "primary": "ffffff", + "secondary": "1a1a1a", + "tertiary": "39845b", + "quaternary": "e45735", + "header_background": "1a1a1a", + "header_primary": "ffffff", + "highlight": "ffff4d", + "selected": "47594e", + "hover": "3c4a40", + "danger": "c80001", + "success": "090", + "love": "fa6c8d", + "tertiary-med-or-tertiary": "39845b" + } + }, + { + "id": 33, + "name": "Lily", + "theme_id": -2, + "colors": { + "primary": "1a1a1a", + "secondary": "ffffff", + "tertiary": "cc338c", + "quaternary": "e45735", + "header_background": "ffffff", + "header_primary": "1a1a1a", + "highlight": "ffff4d", + "selected": "ffc8ee", + "hover": "ffd7f3", + "danger": "c80001", + "success": "090", + "love": "fa6c8d", + "tertiary-med-or-tertiary": "cc338c" + } + }, + { + "id": 34, + "name": "Lily Dark", + "theme_id": -2, + "colors": { + "primary": "ffffff", + "secondary": "1a1a1a", + "tertiary": "cc338c", + "quaternary": "e45735", + "header_background": "1a1a1a", + "header_primary": "ffffff", + "highlight": "ffff4d", + "selected": "5f3e4e", + "hover": "4e3640", + "danger": "c80001", + "success": "090", + "love": "fa6c8d", + "tertiary-med-or-tertiary": "cc338c" + } + }, + { + "id": 35, + "name": "Violet", + "theme_id": -2, + "colors": { + "highlight": "ffff4d", + "selected": "feccff", + "hover": "ffd9ff", + "danger": "c80001", + "success": "090", + "love": "fa6c8d", + "tertiary-med-or-tertiary": "9b15de", + "primary": "1a1a1a", + "secondary": "ffffff", + "tertiary": "9b15de", + "quaternary": "e45735", + "header_background": "ffffff", + "header_primary": "1a1a1a" + } + }, + { + "id": 36, + "name": "Violet Dark", + "theme_id": -2, + "colors": { + "primary": "ffffff", + "secondary": "1a1a1a", + "tertiary": "9b15de", + "quaternary": "e45735", + "header_background": "1a1a1a", + "header_primary": "ffffff", + "highlight": "ffff4d", + "selected": "4c385c", + "hover": "40314c", + "danger": "c80001", + "success": "090", + "love": "fa6c8d", + "tertiary-med-or-tertiary": "9b15de" + } + }, + { + "id": 37, + "name": "Marigold", + "theme_id": -2, + "colors": { + "primary": "1a1a1a", + "secondary": "ffffff", + "tertiary": "d3881f", + "quaternary": "e45735", + "header_background": "ffffff", + "header_primary": "1a1a1a", + "highlight": "ffff4d", + "selected": "ffdcb2", + "hover": "ffe6c6", + "danger": "c80001", + "success": "090", + "love": "fa6c8d", + "tertiary-med-or-tertiary": "d3881f" + } + }, + { + "id": 38, + "name": "Marigold Dark", + "theme_id": -2, + "colors": { + "primary": "ffffff", + "secondary": "1a1a1a", + "tertiary": "d3881f", + "quaternary": "e45735", + "header_background": "1a1a1a", + "header_primary": "ffffff", + "highlight": "ffff4d", + "selected": "6c5b49", + "hover": "584b3e", + "danger": "c80001", + "success": "090", + "love": "fa6c8d", + "tertiary-med-or-tertiary": "d3881f" + } + }, + { + "id": 39, + "name": "mint-light", + "theme_id": 24, + "colors": { + "secondary": "f6fbfc", + "tertiary": "4f8a7c", + "quaternary": "e45735", + "header_background": "ffffff", + "header_primary": "111111", + "highlight": "ffff4d", + "selected": "e3efec", + "hover": "e3efec", + "danger": "c80001", + "success": "090", + "love": "fa6c8d", + "primary": "454545" + } + }, + { + "id": 40, + "name": "mint-dark", + "theme_id": 24, + "colors": { + "primary": "e0e0e0", + "secondary": "2d2d2d", + "tertiary": "4f8a7c", + "quaternary": "e45735", + "header_background": "202020", + "header_primary": "e0e0e0", + "highlight": "b2b235", + "selected": "1c302b", + "hover": "1c302b", + "danger": "c80001", + "success": "090", + "love": "fa6c8d" + } + }, + { + "id": 41, + "name": "Tokyo Night Storm", + "theme_id": null, + "colors": { + "highlight": "e0af68", + "danger": "f7768e", + "success": "9ece6a", + "love": "f7768e", + "primary": "c0caf5", + "tertiary": "7aa2f7", + "header_primary": "c0caf5", + "secondary": "1a1b2e", + "header_background": "13141f", + "highlight_text": "1a1b2e", + "selected": "2a2d3e", + "hover": "1f2033", + "quaternary": "bb9af7" + } + }, + { + "id": 42, + "name": "Onyx", + "theme_id": null, + "colors": { + "primary": "fafafa", + "secondary": "09090b", + "tertiary": "8b5cf6", + "quaternary": "06b6d4", + "header_background": "09090b", + "header_primary": "fafafa", + "highlight": "f59e0b", + "highlight_text": "09090b", + "hover": "18181b", + "selected": "27272a", + "danger": "f43f5e", + "success": "10b981", + "love": "f472b6" + } + }, + { + "id": 43, + "name": "Catppuccin Mocha Ultra", + "theme_id": null, + "colors": { + "header_background": "181825", + "header_primary": "cdd6f4", + "highlight": "f9e2af", + "danger": "f38ba8", + "success": "a6e3a1", + "love": "f5c2e7", + "primary": "cdd6f4", + "tertiary": "cba6f7", + "quaternary": "89b4fa", + "secondary": "1e1e2e", + "highlight_text": "1e1e2e", + "hover": "313244", + "selected": "45475a" + } + }, + { + "id": 44, + "name": "Synthwave '84 Pro", + "theme_id": null, + "colors": { + "primary": "03edf9", + "secondary": "bd00ff", + "tertiary": "72f1b8", + "quaternary": "ff79c6", + "header_background": "0d0d1a", + "header_primary": "e2def8", + "highlight": "f5f5aa", + "danger": "ff6c6b", + "success": "72f1b8", + "love": "ff79c6" + } + }, + { + "id": 45, + "name": "Dracula Pro Ultra", + "theme_id": null, + "colors": { + "header_background": "1e1f29", + "header_primary": "f8f8f2", + "highlight": "f1fa8c", + "danger": "ff5555", + "success": "50fa7b", + "love": "ff79c6", + "secondary": "282a36", + "quaternary": "ff79c6", + "highlight_text": "282a36", + "selected": "44475a", + "primary": "f8f8f2", + "tertiary": "bd93f9", + "hover": "21222c" + } + }, + { + "id": 46, + "name": "air-light", + "theme_id": 41, + "colors": { + "primary": "1c1c1c", + "secondary": "f9fcff", + "tertiary": "3877e5", + "quaternary": "7e8b93", + "header_background": "f9fcff", + "header_primary": "122b43", + "highlight": "e6cb37", + "selected": "e1ebfb", + "hover": "f2f2f2", + "danger": "d05454", + "success": "71bd9f", + "love": "c16ad7" + } + }, + { + "id": 47, + "name": "air-dark", + "theme_id": 41, + "colors": { + "primary": "e0e0e0", + "secondary": "2d2d2d", + "tertiary": "9a5cfd", + "quaternary": "71bd9f", + "header_background": "202020", + "header_primary": "e0e0e0", + "highlight": "9a5cfd", + "selected": "2f0177", + "hover": "535353", + "danger": "d05454", + "success": "71bd9f", + "love": "c16ad7" + } + }, + { + "id": 48, + "name": "air-light", + "theme_id": 44, + "colors": { + "primary": "1c1c1c", + "secondary": "f9fcff", + "tertiary": "3877e5", + "quaternary": "7e8b93", + "header_background": "f9fcff", + "header_primary": "122b43", + "highlight": "e6cb37", + "selected": "e1ebfb", + "hover": "f2f2f2", + "danger": "d05454", + "success": "71bd9f", + "love": "c16ad7" + } + }, + { + "id": 49, + "name": "air-dark", + "theme_id": 44, + "colors": { + "primary": "e0e0e0", + "secondary": "2d2d2d", + "tertiary": "9a5cfd", + "quaternary": "71bd9f", + "header_background": "202020", + "header_primary": "e0e0e0", + "highlight": "9a5cfd", + "selected": "2f0177", + "hover": "535353", + "danger": "d05454", + "success": "71bd9f", + "love": "c16ad7" + } + } +] \ No newline at end of file