gitextract_yzw4jm7n/ ├── .coveragerc ├── .devcontainer/ │ ├── Dockerfile │ └── devcontainer.json ├── .dockerignore ├── .flake8 ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md.bak │ │ ├── bug_report.yml │ │ ├── config.yml │ │ ├── doc_issue.yml │ │ ├── feature_request.md.bak │ │ ├── feature_request.yml │ │ ├── help-request.md.bak │ │ ├── help_request.yml │ │ ├── url_import.md.bak │ │ └── website_import.yml │ ├── dependabot.yml │ └── workflows/ │ ├── build-docker.yml │ ├── ci.yml │ ├── codeql-analysis.yml │ └── docs.yml ├── .gitignore ├── .idea/ │ ├── codeStyles/ │ │ └── codeStyleConfig.xml │ ├── dictionaries/ │ │ ├── vaben.xml │ │ └── vabene1111_PC.xml │ ├── inspectionProfiles/ │ │ └── profiles_settings.xml │ ├── modules.xml │ ├── prettier.xml │ ├── recipes.iml │ └── watcherTasks.xml ├── .prettierignore ├── .prettierrc ├── .vscode/ │ ├── launch.json │ ├── settings.json │ └── tasks.json ├── CONTRIBUTERS.md ├── Dockerfile ├── LICENSE.md ├── README.md ├── SECURITY.md ├── boot.sh ├── cookbook/ │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── connectors/ │ │ ├── __init__.py │ │ ├── connector.py │ │ ├── connector_manager.py │ │ └── homeassistant.py │ ├── fixtures/ │ │ └── german_example_tags.json │ ├── forms.py │ ├── helper/ │ │ ├── AllAuthCustomAdapter.py │ │ ├── CustomStorageClass.py │ │ ├── HelperFunctions.py │ │ ├── __init__.py │ │ ├── ai_helper.py │ │ ├── automation_helper.py │ │ ├── batch_edit_helper.py │ │ ├── cache_helper.py │ │ ├── context_processors.py │ │ ├── cooklang_parser.py │ │ ├── drf_spectacular_hooks.py │ │ ├── fdc_helper.py │ │ ├── image_processing.py │ │ ├── ingredient_parser.py │ │ ├── mdx_attributes.py │ │ ├── mdx_urlize.py │ │ ├── open_data_importer.py │ │ ├── permission_config.py │ │ ├── permission_helper.py │ │ ├── property_helper.py │ │ ├── recipe_search.py │ │ ├── recipe_url_import.py │ │ ├── scope_middleware.py │ │ ├── shopping_helper.py │ │ ├── template_helper.py │ │ └── unit_conversion_helper.py │ ├── integration/ │ │ ├── cheftap.py │ │ ├── chowdown.py │ │ ├── cookbookapp.py │ │ ├── cooklang.py │ │ ├── cookmate.py │ │ ├── copymethat.py │ │ ├── default.py │ │ ├── domestica.py │ │ ├── gourmet.py │ │ ├── integration.py │ │ ├── mealie.py │ │ ├── mealie1.py │ │ ├── mealmaster.py │ │ ├── melarecipes.py │ │ ├── nextcloud_cookbook.py │ │ ├── openeats.py │ │ ├── paprika.py │ │ ├── pdfexport.py │ │ ├── pepperplate.py │ │ ├── plantoeat.py │ │ ├── recettetek.py │ │ ├── recipekeeper.py │ │ ├── recipesage.py │ │ ├── rezeptsuitede.py │ │ ├── rezkonv.py │ │ └── saffron.py │ ├── locale/ │ │ ├── ar/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── bg/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── ca/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── cs/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── da/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── de/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── el/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── en/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── es/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── fi/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── fr/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── he/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── hr/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── hu_HU/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── hy/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── id/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── it/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── ko/ │ │ │ └── LC_MESSAGES/ │ │ │ └── django.po │ │ ├── lv/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── nb_NO/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── nl/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── nn/ │ │ │ └── LC_MESSAGES/ │ │ │ └── django.po │ │ ├── pl/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── pt/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── pt_BR/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── rn/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── ro/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── ru/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── sl/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── sv/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── tr/ │ │ │ ├── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ └── id/ │ │ │ └── LC_MESSAGES/ │ │ │ └── django.po │ │ ├── uk/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── vi/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── zh_CN/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ └── zh_Hant/ │ │ └── LC_MESSAGES/ │ │ ├── django.mo │ │ └── django.po │ ├── management/ │ │ └── commands/ │ │ ├── export.py │ │ ├── fix_duplicate_properties.py │ │ ├── import.py │ │ ├── rebuildindex.py │ │ └── seed_basic_data.py │ ├── managers.py │ ├── migrations/ │ │ ├── 0001_initial.py │ │ ├── 0001_squashed_0227_space_ai_default_provider_and_more.py │ │ ├── 0002_auto_20191119_2035.py │ │ ├── 0003_enable_pgtrm.py │ │ ├── 0004_storage_created_by.py │ │ ├── 0005_recipebook_recipebookentry.py │ │ ├── 0006_recipe_image.py │ │ ├── 0007_auto_20191226_0852.py │ │ ├── 0008_mealplan.py │ │ ├── 0009_auto_20200130_1056.py │ │ ├── 0010_auto_20200130_1059.py │ │ ├── 0011_remove_recipeingredients_unit.py │ │ ├── 0012_auto_20200130_1116.py │ │ ├── 0013_userpreference.py │ │ ├── 0014_auto_20200213_2332.py │ │ ├── 0015_auto_20200213_2334.py │ │ ├── 0016_auto_20200213_2335.py │ │ ├── 0017_auto_20200216_2257.py │ │ ├── 0018_auto_20200216_2303.py │ │ ├── 0019_ingredient.py │ │ ├── 0020_recipeingredient_ingredient.py │ │ ├── 0021_auto_20200216_2309.py │ │ ├── 0022_remove_recipeingredient_name.py │ │ ├── 0023_auto_20200216_2311.py │ │ ├── 0024_auto_20200216_2313.py │ │ ├── 0025_userpreference_nav_color.py │ │ ├── 0026_auto_20200219_1605.py │ │ ├── 0027_ingredient_recipe.py │ │ ├── 0028_auto_20200317_1901.py │ │ ├── 0029_auto_20200317_1901.py │ │ ├── 0030_recipeingredient_note.py │ │ ├── 0031_auto_20200407_1841.py │ │ ├── 0032_userpreference_default_unit.py │ │ ├── 0033_userpreference_default_page.py │ │ ├── 0034_auto_20200426_1614.py │ │ ├── 0035_auto_20200427_1637.py │ │ ├── 0036_auto_20200427_1800.py │ │ ├── 0037_userpreference_search_style.py │ │ ├── 0038_auto_20200502_1259.py │ │ ├── 0039_recipebook_shared.py │ │ ├── 0040_auto_20200502_1433.py │ │ ├── 0041_auto_20200502_1446.py │ │ ├── 0042_cooklog.py │ │ ├── 0043_auto_20200507_2302.py │ │ ├── 0044_viewlog.py │ │ ├── 0045_userpreference_show_recent.py │ │ ├── 0046_auto_20200602_1133.py │ │ ├── 0047_auto_20200602_1133.py │ │ ├── 0048_auto_20200602_1140.py │ │ ├── 0049_mealtype_created_by.py │ │ ├── 0050_auto_20200611_1509.py │ │ ├── 0051_auto_20200611_1518.py │ │ ├── 0052_userpreference_ingredient_decimals.py │ │ ├── 0053_auto_20200611_2217.py │ │ ├── 0054_sharelink.py │ │ ├── 0055_auto_20200616_1236.py │ │ ├── 0056_auto_20200625_2118.py │ │ ├── 0056_auto_20200625_2157.py │ │ ├── 0057_auto_20200625_2127.py │ │ ├── 0058_auto_20200625_2128.py │ │ ├── 0059_auto_20200625_2137.py │ │ ├── 0060_auto_20200625_2144.py │ │ ├── 0061_merge_20200625_2209.py │ │ ├── 0062_auto_20200625_2219.py │ │ ├── 0063_auto_20200625_2230.py │ │ ├── 0064_auto_20200625_2329.py │ │ ├── 0065_auto_20200626_1444.py │ │ ├── 0066_auto_20200626_1455.py │ │ ├── 0067_auto_20200629_1508.py │ │ ├── 0068_auto_20200629_2127.py │ │ ├── 0069_auto_20200629_2134.py │ │ ├── 0070_auto_20200701_2007.py │ │ ├── 0071_auto_20200701_2048.py │ │ ├── 0072_step_show_as_header.py │ │ ├── 0073_auto_20200708_2311.py │ │ ├── 0074_remove_keyword_created_by.py │ │ ├── 0075_shoppinglist_shoppinglistentry_shoppinglistrecipe.py │ │ ├── 0076_shoppinglist_entries.py │ │ ├── 0077_invitelink.py │ │ ├── 0078_invitelink_used_by.py │ │ ├── 0079_invitelink_group.py │ │ ├── 0080_auto_20200921_2331.py │ │ ├── 0081_auto_20200921_2349.py │ │ ├── 0082_auto_20200922_1143.py │ │ ├── 0083_space.py │ │ ├── 0084_auto_20200922_1233.py │ │ ├── 0085_auto_20200922_1235.py │ │ ├── 0086_auto_20200929_1143.py │ │ ├── 0087_auto_20200929_1152.py │ │ ├── 0088_shoppinglist_finished.py │ │ ├── 0089_auto_20201117_2222.py │ │ ├── 0090_auto_20201214_1359.py │ │ ├── 0091_auto_20201226_1551.py │ │ ├── 0092_recipe_servings.py │ │ ├── 0093_auto_20201231_1236.py │ │ ├── 0094_auto_20201231_1238.py │ │ ├── 0095_auto_20210107_1804.py │ │ ├── 0096_auto_20210109_2044.py │ │ ├── 0097_auto_20210113_1315.py │ │ ├── 0098_auto_20210113_1320.py │ │ ├── 0099_auto_20210113_1518.py │ │ ├── 0100_recipe_servings_text.py │ │ ├── 0101_storage_path.py │ │ ├── 0102_auto_20210125_1147.py │ │ ├── 0103_food_ignore_shopping.py │ │ ├── 0104_auto_20210125_2133.py │ │ ├── 0105_auto_20210126_1604.py │ │ ├── 0106_shoppinglist_supermarket.py │ │ ├── 0107_auto_20210128_1535.py │ │ ├── 0108_auto_20210219_1410.py │ │ ├── 0109_auto_20210221_1204.py │ │ ├── 0110_auto_20210221_1406.py │ │ ├── 0111_space_created_by.py │ │ ├── 0112_remove_synclog_space.py │ │ ├── 0113_auto_20210317_2017.py │ │ ├── 0114_importlog.py │ │ ├── 0115_telegrambot.py │ │ ├── 0116_auto_20210319_0012.py │ │ ├── 0117_space_max_recipes.py │ │ ├── 0118_auto_20210406_1805.py │ │ ├── 0119_auto_20210411_2101.py │ │ ├── 0120_bookmarklet.py │ │ ├── 0121_auto_20210518_1638.py │ │ ├── 0122_auto_20210527_1712.py │ │ ├── 0123_invitelink_email.py │ │ ├── 0124_alter_userpreference_theme.py │ │ ├── 0125_space_demo.py │ │ ├── 0126_alter_userpreference_theme.py │ │ ├── 0127_remove_invitelink_username.py │ │ ├── 0128_userfile.py │ │ ├── 0129_auto_20210608_1233.py │ │ ├── 0130_alter_userfile_file_size_kb.py │ │ ├── 0131_auto_20210608_1929.py │ │ ├── 0132_sharelink_request_count.py │ │ ├── 0133_sharelink_abuse_blocked.py │ │ ├── 0134_space_allow_sharing.py │ │ ├── 0135_auto_20210615_2210.py │ │ ├── 0136_auto_20210617_1343.py │ │ ├── 0137_auto_20210617_1501.py │ │ ├── 0138_auto_20210617_1602.py │ │ ├── 0139_space_created_at.py │ │ ├── 0140_userpreference_created_at.py │ │ ├── 0141_auto_20210713_1042.py │ │ ├── 0142_alter_userpreference_search_style.py │ │ ├── 0143_build_full_text_index.py │ │ ├── 0144_create_searchfields.py │ │ ├── 0145_alter_userpreference_search_style.py │ │ ├── 0146_alter_userpreference_use_fractions.py │ │ ├── 0147_keyword_to_tree.py │ │ ├── 0148_auto_20210813_1829.py │ │ ├── 0149_fix_leading_trailing_spaces.py │ │ ├── 0150_food_to_tree.py │ │ ├── 0151_auto_20210915_1037.py │ │ ├── 0152_automation.py │ │ ├── 0153_auto_20210915_2327.py │ │ ├── 0154_auto_20210922_1705.py │ │ ├── 0155_mealtype_default.py │ │ ├── 0156_searchpreference_trigram_threshold.py │ │ ├── 0157_alter_searchpreference_trigram.py │ │ ├── 0158_userpreference_use_kj.py │ │ ├── 0159_add_shoppinglistentry_fields.py │ │ ├── 0160_delete_shoppinglist_orphans.py │ │ ├── 0161_alter_shoppinglistentry_food.py │ │ ├── 0162_userpreference_csv_delim.py │ │ ├── 0163_auto_20220105_0758.py │ │ ├── 0164_space_show_facet_count.py │ │ ├── 0165_remove_step_type.py │ │ ├── 0166_alter_userpreference_shopping_add_onhand.py │ │ ├── 0167_userpreference_left_handed.py │ │ ├── 0168_add_unit_searchfields.py │ │ ├── 0169_exportlog.py │ │ ├── 0170_auto_20220207_1848.py │ │ ├── 0171_alter_searchpreference_trigram_threshold.py │ │ ├── 0172_ingredient_original_text.py │ │ ├── 0173_recipe_source_url.py │ │ ├── 0174_alter_food_substitute_userspace.py │ │ ├── 0175_remove_userpreference_space.py │ │ ├── 0176_alter_searchpreference_icontains_and_more.py │ │ ├── 0177_recipe_show_ingredient_overview.py │ │ ├── 0178_remove_userpreference_search_style_and_more.py │ │ ├── 0179_recipe_private_recipe_shared.py │ │ ├── 0180_invitelink_reusable.py │ │ ├── 0181_space_image.py │ │ ├── 0182_userpreference_image.py │ │ ├── 0183_alter_space_image.py │ │ ├── 0184_alter_userpreference_image.py │ │ ├── 0185_food_plural_name_ingredient_always_use_plural_food_and_more.py │ │ ├── 0186_automation_order_alter_automation_type.py │ │ ├── 0187_alter_space_use_plural.py │ │ ├── 0188_space_no_sharing_limit.py │ │ ├── 0189_property_propertytype_unitconversion_food_fdc_id_and_more.py │ │ ├── 0190_auto_20230525_1506.py │ │ ├── 0191_foodproperty_property_import_food_id_and_more.py │ │ ├── 0192_food_food_unique_open_data_slug_per_space_and_more.py │ │ ├── 0193_space_internal_note.py │ │ ├── 0194_alter_food_properties_food_amount.py │ │ ├── 0195_invitelink_internal_note_userspace_internal_note_and_more.py │ │ ├── 0196_food_url.py │ │ ├── 0197_step_show_ingredients_table_and_more.py │ │ ├── 0198_propertytype_order.py │ │ ├── 0199_alter_propertytype_options_alter_automation_type_and_more.py │ │ ├── 0200_alter_propertytype_options_remove_keyword_icon_and_more.py │ │ ├── 0201_rename_date_mealplan_from_date_mealplan_to_date.py │ │ ├── 0202_remove_space_show_facet_count.py │ │ ├── 0203_alter_unique_contstraints.py │ │ ├── 0204_propertytype_fdc_id.py │ │ ├── 0205_alter_food_fdc_id_alter_propertytype_fdc_id.py │ │ ├── 0206_rename_sticky_navbar_userpreference_nav_sticky_and_more.py │ │ ├── 0207_space_logo_color_128_space_logo_color_144_and_more.py │ │ ├── 0208_space_app_name_userpreference_max_owned_spaces.py │ │ ├── 0209_remove_space_use_plural.py │ │ ├── 0210_shoppinglistentry_updated_at.py │ │ ├── 0211_recipebook_order.py │ │ ├── 0212_alter_property_property_amount.py │ │ ├── 0213_remove_property_property_unique_import_food_per_space_and_more.py │ │ ├── 0214_cooklog_comment_cooklog_updated_at_and_more.py │ │ ├── 0215_connectorconfig.py │ │ ├── 0216_delete_shoppinglist.py │ │ ├── 0217_alter_userpreference_default_page.py │ │ ├── 0218_alter_mealplan_from_date_alter_mealplan_to_date.py │ │ ├── 0219_connectorconfig_supports_description_field.py │ │ ├── 0220_shoppinglistrecipe_created_by_and_more.py │ │ ├── 0221_migrate_shoppinglistrecipe_space_created_by.py │ │ ├── 0222_alter_shoppinglistrecipe_created_by_and_more.py │ │ ├── 0223_auto_20250831_1111.py │ │ ├── 0224_space_ai_credits_balance_space_ai_credits_monthly_and_more.py │ │ ├── 0225_space_ai_enabled.py │ │ ├── 0226_aiprovider_log_credit_cost_and_more.py │ │ ├── 0227_space_ai_default_provider_and_more.py │ │ ├── 0228_space_space_setup_completed.py │ │ ├── 0229_alter_ailog_options_alter_aiprovider_options_and_more.py │ │ ├── 0230_auto_20250925_2056.py │ │ ├── 0231_alter_aiprovider_options_alter_automation_options_and_more.py │ │ ├── 0232_shoppinglist.py │ │ ├── 0233_food_shopping_lists_shoppinglistentry_shopping_lists_and_more.py │ │ ├── 0234_alter_shoppinglist_options_and_more.py │ │ ├── 0235_recipe_diameter_recipe_diameter_text.py │ │ ├── 0236_household_userspace_household_inventorylocation_and_more.py │ │ ├── 0237_remove_mealtype_mt_unique_name_per_space_and_more.py │ │ ├── 0238_auto_20260312_1920.py │ │ └── __init__.py │ ├── models.py │ ├── provider/ │ │ ├── __init__.py │ │ ├── dropbox.py │ │ ├── local.py │ │ ├── nextcloud.py │ │ └── provider.py │ ├── serializer.py │ ├── signals.py │ ├── static/ │ │ ├── custom/ │ │ │ └── css/ │ │ │ └── markdown_blockquote.css │ │ └── pdfjs/ │ │ ├── LICENSE │ │ └── web/ │ │ ├── cmaps/ │ │ │ ├── 78-EUC-H.bcmap │ │ │ ├── 78-EUC-V.bcmap │ │ │ ├── 78-H.bcmap │ │ │ ├── 78-RKSJ-H.bcmap │ │ │ ├── 78-RKSJ-V.bcmap │ │ │ ├── 78-V.bcmap │ │ │ ├── 78ms-RKSJ-H.bcmap │ │ │ ├── 78ms-RKSJ-V.bcmap │ │ │ ├── 83pv-RKSJ-H.bcmap │ │ │ ├── 90ms-RKSJ-H.bcmap │ │ │ ├── 90ms-RKSJ-V.bcmap │ │ │ ├── 90msp-RKSJ-H.bcmap │ │ │ ├── 90msp-RKSJ-V.bcmap │ │ │ ├── 90pv-RKSJ-H.bcmap │ │ │ ├── 90pv-RKSJ-V.bcmap │ │ │ ├── Add-H.bcmap │ │ │ ├── Add-RKSJ-H.bcmap │ │ │ ├── Add-RKSJ-V.bcmap │ │ │ ├── Add-V.bcmap │ │ │ ├── Adobe-CNS1-0.bcmap │ │ │ ├── Adobe-CNS1-1.bcmap │ │ │ ├── Adobe-CNS1-2.bcmap │ │ │ ├── Adobe-CNS1-3.bcmap │ │ │ ├── Adobe-CNS1-4.bcmap │ │ │ ├── Adobe-CNS1-5.bcmap │ │ │ ├── Adobe-CNS1-6.bcmap │ │ │ ├── Adobe-CNS1-UCS2.bcmap │ │ │ ├── Adobe-GB1-0.bcmap │ │ │ ├── Adobe-GB1-1.bcmap │ │ │ ├── Adobe-GB1-2.bcmap │ │ │ ├── Adobe-GB1-3.bcmap │ │ │ ├── Adobe-GB1-4.bcmap │ │ │ ├── Adobe-GB1-5.bcmap │ │ │ ├── Adobe-GB1-UCS2.bcmap │ │ │ ├── Adobe-Japan1-0.bcmap │ │ │ ├── Adobe-Japan1-1.bcmap │ │ │ ├── Adobe-Japan1-2.bcmap │ │ │ ├── Adobe-Japan1-3.bcmap │ │ │ ├── Adobe-Japan1-4.bcmap │ │ │ ├── Adobe-Japan1-5.bcmap │ │ │ ├── Adobe-Japan1-6.bcmap │ │ │ ├── Adobe-Japan1-UCS2.bcmap │ │ │ ├── Adobe-Korea1-0.bcmap │ │ │ ├── Adobe-Korea1-1.bcmap │ │ │ ├── Adobe-Korea1-2.bcmap │ │ │ ├── Adobe-Korea1-UCS2.bcmap │ │ │ ├── B5-H.bcmap │ │ │ ├── B5-V.bcmap │ │ │ ├── B5pc-H.bcmap │ │ │ ├── B5pc-V.bcmap │ │ │ ├── CNS-EUC-H.bcmap │ │ │ ├── CNS-EUC-V.bcmap │ │ │ ├── CNS1-H.bcmap │ │ │ ├── CNS1-V.bcmap │ │ │ ├── CNS2-H.bcmap │ │ │ ├── CNS2-V.bcmap │ │ │ ├── ETHK-B5-H.bcmap │ │ │ ├── ETHK-B5-V.bcmap │ │ │ ├── ETen-B5-H.bcmap │ │ │ ├── ETen-B5-V.bcmap │ │ │ ├── ETenms-B5-H.bcmap │ │ │ ├── ETenms-B5-V.bcmap │ │ │ ├── EUC-H.bcmap │ │ │ ├── EUC-V.bcmap │ │ │ ├── Ext-H.bcmap │ │ │ ├── Ext-RKSJ-H.bcmap │ │ │ ├── Ext-RKSJ-V.bcmap │ │ │ ├── Ext-V.bcmap │ │ │ ├── GB-EUC-H.bcmap │ │ │ ├── GB-EUC-V.bcmap │ │ │ ├── GB-H.bcmap │ │ │ ├── GB-V.bcmap │ │ │ ├── GBK-EUC-H.bcmap │ │ │ ├── GBK-EUC-V.bcmap │ │ │ ├── GBK2K-H.bcmap │ │ │ ├── GBK2K-V.bcmap │ │ │ ├── GBKp-EUC-H.bcmap │ │ │ ├── GBKp-EUC-V.bcmap │ │ │ ├── GBT-EUC-H.bcmap │ │ │ ├── GBT-EUC-V.bcmap │ │ │ ├── GBT-H.bcmap │ │ │ ├── GBT-V.bcmap │ │ │ ├── GBTpc-EUC-H.bcmap │ │ │ ├── GBTpc-EUC-V.bcmap │ │ │ ├── GBpc-EUC-H.bcmap │ │ │ ├── GBpc-EUC-V.bcmap │ │ │ ├── H.bcmap │ │ │ ├── HKdla-B5-H.bcmap │ │ │ ├── HKdla-B5-V.bcmap │ │ │ ├── HKdlb-B5-H.bcmap │ │ │ ├── HKdlb-B5-V.bcmap │ │ │ ├── HKgccs-B5-H.bcmap │ │ │ ├── HKgccs-B5-V.bcmap │ │ │ ├── HKm314-B5-H.bcmap │ │ │ ├── HKm314-B5-V.bcmap │ │ │ ├── HKm471-B5-H.bcmap │ │ │ ├── HKm471-B5-V.bcmap │ │ │ ├── HKscs-B5-H.bcmap │ │ │ ├── HKscs-B5-V.bcmap │ │ │ ├── Hankaku.bcmap │ │ │ ├── Hiragana.bcmap │ │ │ ├── KSC-EUC-H.bcmap │ │ │ ├── KSC-EUC-V.bcmap │ │ │ ├── KSC-H.bcmap │ │ │ ├── KSC-Johab-H.bcmap │ │ │ ├── KSC-Johab-V.bcmap │ │ │ ├── KSC-V.bcmap │ │ │ ├── KSCms-UHC-H.bcmap │ │ │ ├── KSCms-UHC-HW-H.bcmap │ │ │ ├── KSCms-UHC-HW-V.bcmap │ │ │ ├── KSCms-UHC-V.bcmap │ │ │ ├── KSCpc-EUC-H.bcmap │ │ │ ├── KSCpc-EUC-V.bcmap │ │ │ ├── Katakana.bcmap │ │ │ ├── LICENSE │ │ │ ├── NWP-H.bcmap │ │ │ ├── NWP-V.bcmap │ │ │ ├── RKSJ-H.bcmap │ │ │ ├── RKSJ-V.bcmap │ │ │ ├── Roman.bcmap │ │ │ ├── UniCNS-UCS2-H.bcmap │ │ │ ├── UniCNS-UCS2-V.bcmap │ │ │ ├── UniCNS-UTF16-H.bcmap │ │ │ ├── UniCNS-UTF16-V.bcmap │ │ │ ├── UniCNS-UTF32-H.bcmap │ │ │ ├── UniCNS-UTF32-V.bcmap │ │ │ ├── UniCNS-UTF8-H.bcmap │ │ │ ├── UniCNS-UTF8-V.bcmap │ │ │ ├── UniGB-UCS2-H.bcmap │ │ │ ├── UniGB-UCS2-V.bcmap │ │ │ ├── UniGB-UTF16-H.bcmap │ │ │ ├── UniGB-UTF16-V.bcmap │ │ │ ├── UniGB-UTF32-H.bcmap │ │ │ ├── UniGB-UTF32-V.bcmap │ │ │ ├── UniGB-UTF8-H.bcmap │ │ │ ├── UniGB-UTF8-V.bcmap │ │ │ ├── UniJIS-UCS2-H.bcmap │ │ │ ├── UniJIS-UCS2-HW-H.bcmap │ │ │ ├── UniJIS-UCS2-HW-V.bcmap │ │ │ ├── UniJIS-UCS2-V.bcmap │ │ │ ├── UniJIS-UTF16-H.bcmap │ │ │ ├── UniJIS-UTF16-V.bcmap │ │ │ ├── UniJIS-UTF32-H.bcmap │ │ │ ├── UniJIS-UTF32-V.bcmap │ │ │ ├── UniJIS-UTF8-H.bcmap │ │ │ ├── UniJIS-UTF8-V.bcmap │ │ │ ├── UniJIS2004-UTF16-H.bcmap │ │ │ ├── UniJIS2004-UTF16-V.bcmap │ │ │ ├── UniJIS2004-UTF32-H.bcmap │ │ │ ├── UniJIS2004-UTF32-V.bcmap │ │ │ ├── UniJIS2004-UTF8-H.bcmap │ │ │ ├── UniJIS2004-UTF8-V.bcmap │ │ │ ├── UniJISPro-UCS2-HW-V.bcmap │ │ │ ├── UniJISPro-UCS2-V.bcmap │ │ │ ├── UniJISPro-UTF8-V.bcmap │ │ │ ├── UniJISX0213-UTF32-H.bcmap │ │ │ ├── UniJISX0213-UTF32-V.bcmap │ │ │ ├── UniJISX02132004-UTF32-H.bcmap │ │ │ ├── UniJISX02132004-UTF32-V.bcmap │ │ │ ├── UniKS-UCS2-H.bcmap │ │ │ ├── UniKS-UCS2-V.bcmap │ │ │ ├── UniKS-UTF16-H.bcmap │ │ │ ├── UniKS-UTF16-V.bcmap │ │ │ ├── UniKS-UTF32-H.bcmap │ │ │ ├── UniKS-UTF32-V.bcmap │ │ │ ├── UniKS-UTF8-H.bcmap │ │ │ ├── UniKS-UTF8-V.bcmap │ │ │ ├── V.bcmap │ │ │ └── WP-Symbol.bcmap │ │ ├── debugger.css │ │ ├── debugger.mjs │ │ ├── iccs/ │ │ │ ├── CGATS001Compat-v2-micro.icc │ │ │ └── LICENSE │ │ ├── locale/ │ │ │ ├── ach/ │ │ │ │ └── viewer.ftl │ │ │ ├── af/ │ │ │ │ └── viewer.ftl │ │ │ ├── an/ │ │ │ │ └── viewer.ftl │ │ │ ├── ar/ │ │ │ │ └── viewer.ftl │ │ │ ├── ast/ │ │ │ │ └── viewer.ftl │ │ │ ├── az/ │ │ │ │ └── viewer.ftl │ │ │ ├── be/ │ │ │ │ └── viewer.ftl │ │ │ ├── bg/ │ │ │ │ └── viewer.ftl │ │ │ ├── bn/ │ │ │ │ └── viewer.ftl │ │ │ ├── bo/ │ │ │ │ └── viewer.ftl │ │ │ ├── br/ │ │ │ │ └── viewer.ftl │ │ │ ├── brx/ │ │ │ │ └── viewer.ftl │ │ │ ├── bs/ │ │ │ │ └── viewer.ftl │ │ │ ├── ca/ │ │ │ │ └── viewer.ftl │ │ │ ├── cak/ │ │ │ │ └── viewer.ftl │ │ │ ├── ckb/ │ │ │ │ └── viewer.ftl │ │ │ ├── cs/ │ │ │ │ └── viewer.ftl │ │ │ ├── cy/ │ │ │ │ └── viewer.ftl │ │ │ ├── da/ │ │ │ │ └── viewer.ftl │ │ │ ├── de/ │ │ │ │ └── viewer.ftl │ │ │ ├── dsb/ │ │ │ │ └── viewer.ftl │ │ │ ├── el/ │ │ │ │ └── viewer.ftl │ │ │ ├── en-CA/ │ │ │ │ └── viewer.ftl │ │ │ ├── en-GB/ │ │ │ │ └── viewer.ftl │ │ │ ├── en-US/ │ │ │ │ └── viewer.ftl │ │ │ ├── eo/ │ │ │ │ └── viewer.ftl │ │ │ ├── es-AR/ │ │ │ │ └── viewer.ftl │ │ │ ├── es-CL/ │ │ │ │ └── viewer.ftl │ │ │ ├── es-ES/ │ │ │ │ └── viewer.ftl │ │ │ ├── es-MX/ │ │ │ │ └── viewer.ftl │ │ │ ├── et/ │ │ │ │ └── viewer.ftl │ │ │ ├── eu/ │ │ │ │ └── viewer.ftl │ │ │ ├── fa/ │ │ │ │ └── viewer.ftl │ │ │ ├── ff/ │ │ │ │ └── viewer.ftl │ │ │ ├── fi/ │ │ │ │ └── viewer.ftl │ │ │ ├── fr/ │ │ │ │ └── viewer.ftl │ │ │ ├── fur/ │ │ │ │ └── viewer.ftl │ │ │ ├── fy-NL/ │ │ │ │ └── viewer.ftl │ │ │ ├── ga-IE/ │ │ │ │ └── viewer.ftl │ │ │ ├── gd/ │ │ │ │ └── viewer.ftl │ │ │ ├── gl/ │ │ │ │ └── viewer.ftl │ │ │ ├── gn/ │ │ │ │ └── viewer.ftl │ │ │ ├── gu-IN/ │ │ │ │ └── viewer.ftl │ │ │ ├── he/ │ │ │ │ └── viewer.ftl │ │ │ ├── hi-IN/ │ │ │ │ └── viewer.ftl │ │ │ ├── hr/ │ │ │ │ └── viewer.ftl │ │ │ ├── hsb/ │ │ │ │ └── viewer.ftl │ │ │ ├── hu/ │ │ │ │ └── viewer.ftl │ │ │ ├── hy-AM/ │ │ │ │ └── viewer.ftl │ │ │ ├── hye/ │ │ │ │ └── viewer.ftl │ │ │ ├── ia/ │ │ │ │ └── viewer.ftl │ │ │ ├── id/ │ │ │ │ └── viewer.ftl │ │ │ ├── is/ │ │ │ │ └── viewer.ftl │ │ │ ├── it/ │ │ │ │ └── viewer.ftl │ │ │ ├── ja/ │ │ │ │ └── viewer.ftl │ │ │ ├── ka/ │ │ │ │ └── viewer.ftl │ │ │ ├── kab/ │ │ │ │ └── viewer.ftl │ │ │ ├── kk/ │ │ │ │ └── viewer.ftl │ │ │ ├── km/ │ │ │ │ └── viewer.ftl │ │ │ ├── kn/ │ │ │ │ └── viewer.ftl │ │ │ ├── ko/ │ │ │ │ └── viewer.ftl │ │ │ ├── lij/ │ │ │ │ └── viewer.ftl │ │ │ ├── lo/ │ │ │ │ └── viewer.ftl │ │ │ ├── locale.json │ │ │ ├── lt/ │ │ │ │ └── viewer.ftl │ │ │ ├── ltg/ │ │ │ │ └── viewer.ftl │ │ │ ├── lv/ │ │ │ │ └── viewer.ftl │ │ │ ├── meh/ │ │ │ │ └── viewer.ftl │ │ │ ├── mk/ │ │ │ │ └── viewer.ftl │ │ │ ├── ml/ │ │ │ │ └── viewer.ftl │ │ │ ├── mr/ │ │ │ │ └── viewer.ftl │ │ │ ├── ms/ │ │ │ │ └── viewer.ftl │ │ │ ├── my/ │ │ │ │ └── viewer.ftl │ │ │ ├── nb-NO/ │ │ │ │ └── viewer.ftl │ │ │ ├── ne-NP/ │ │ │ │ └── viewer.ftl │ │ │ ├── nl/ │ │ │ │ └── viewer.ftl │ │ │ ├── nn-NO/ │ │ │ │ └── viewer.ftl │ │ │ ├── oc/ │ │ │ │ └── viewer.ftl │ │ │ ├── pa-IN/ │ │ │ │ └── viewer.ftl │ │ │ ├── pl/ │ │ │ │ └── viewer.ftl │ │ │ ├── pt-BR/ │ │ │ │ └── viewer.ftl │ │ │ ├── pt-PT/ │ │ │ │ └── viewer.ftl │ │ │ ├── rm/ │ │ │ │ └── viewer.ftl │ │ │ ├── ro/ │ │ │ │ └── viewer.ftl │ │ │ ├── ru/ │ │ │ │ └── viewer.ftl │ │ │ ├── sat/ │ │ │ │ └── viewer.ftl │ │ │ ├── sc/ │ │ │ │ └── viewer.ftl │ │ │ ├── scn/ │ │ │ │ └── viewer.ftl │ │ │ ├── sco/ │ │ │ │ └── viewer.ftl │ │ │ ├── si/ │ │ │ │ └── viewer.ftl │ │ │ ├── sk/ │ │ │ │ └── viewer.ftl │ │ │ ├── skr/ │ │ │ │ └── viewer.ftl │ │ │ ├── sl/ │ │ │ │ └── viewer.ftl │ │ │ ├── son/ │ │ │ │ └── viewer.ftl │ │ │ ├── sq/ │ │ │ │ └── viewer.ftl │ │ │ ├── sr/ │ │ │ │ └── viewer.ftl │ │ │ ├── sv-SE/ │ │ │ │ └── viewer.ftl │ │ │ ├── szl/ │ │ │ │ └── viewer.ftl │ │ │ ├── ta/ │ │ │ │ └── viewer.ftl │ │ │ ├── te/ │ │ │ │ └── viewer.ftl │ │ │ ├── tg/ │ │ │ │ └── viewer.ftl │ │ │ ├── th/ │ │ │ │ └── viewer.ftl │ │ │ ├── tl/ │ │ │ │ └── viewer.ftl │ │ │ ├── tr/ │ │ │ │ └── viewer.ftl │ │ │ ├── trs/ │ │ │ │ └── viewer.ftl │ │ │ ├── uk/ │ │ │ │ └── viewer.ftl │ │ │ ├── ur/ │ │ │ │ └── viewer.ftl │ │ │ ├── uz/ │ │ │ │ └── viewer.ftl │ │ │ ├── vi/ │ │ │ │ └── viewer.ftl │ │ │ ├── wo/ │ │ │ │ └── viewer.ftl │ │ │ ├── xh/ │ │ │ │ └── viewer.ftl │ │ │ ├── zh-CN/ │ │ │ │ └── viewer.ftl │ │ │ └── zh-TW/ │ │ │ └── viewer.ftl │ │ ├── pdf.mjs │ │ ├── pdf.sandbox.mjs │ │ ├── pdf.worker.mjs │ │ ├── standard_fonts/ │ │ │ ├── FoxitDingbats.pfb │ │ │ ├── FoxitFixed.pfb │ │ │ ├── FoxitFixedBold.pfb │ │ │ ├── FoxitFixedBoldItalic.pfb │ │ │ ├── FoxitFixedItalic.pfb │ │ │ ├── FoxitSerif.pfb │ │ │ ├── FoxitSerifBold.pfb │ │ │ ├── FoxitSerifBoldItalic.pfb │ │ │ ├── FoxitSerifItalic.pfb │ │ │ ├── FoxitSymbol.pfb │ │ │ ├── LICENSE_FOXIT │ │ │ └── LICENSE_LIBERATION │ │ ├── viewer.css │ │ ├── viewer.html │ │ ├── viewer.mjs │ │ └── wasm/ │ │ ├── LICENSE_OPENJPEG │ │ ├── LICENSE_PDFJS_OPENJPEG │ │ ├── LICENSE_PDFJS_QCMS │ │ ├── LICENSE_QCMS │ │ ├── openjpeg.wasm │ │ ├── openjpeg_nowasm_fallback.js │ │ └── qcms_bg.wasm │ ├── templates/ │ │ ├── 404.html │ │ ├── account/ │ │ │ ├── email.html │ │ │ ├── email_confirm.html │ │ │ ├── login.html │ │ │ ├── logout.html │ │ │ ├── password_change.html │ │ │ ├── password_reset.html │ │ │ ├── password_reset_done.html │ │ │ ├── password_reset_from_key.html │ │ │ ├── password_reset_from_key_done.html │ │ │ ├── password_set.html │ │ │ ├── signup.html │ │ │ └── signup_closed.html │ │ ├── base.html │ │ ├── frontend/ │ │ │ └── tandoor.html │ │ ├── index.html │ │ ├── manifest.json │ │ ├── markdown_info.html │ │ ├── no_groups_info.html │ │ ├── no_perm_info.html │ │ ├── offline.html │ │ ├── openid/ │ │ │ └── login.html │ │ ├── pdf_viewer.html │ │ ├── rest_framework/ │ │ │ └── api.html │ │ ├── search_info.html │ │ ├── setup.html │ │ ├── socialaccount/ │ │ │ ├── authentication_error.html │ │ │ ├── connections.html │ │ │ ├── login.html │ │ │ ├── signup.html │ │ │ └── snippets/ │ │ │ └── provider_list.html │ │ ├── space_overview.html │ │ ├── system.html │ │ ├── test.html │ │ └── test2.html │ ├── templatetags/ │ │ ├── __init__.py │ │ ├── custom_tags.py │ │ └── theming_tags.py │ ├── tests/ │ │ ├── __init__.py │ │ ├── api/ │ │ │ ├── __init__.py │ │ │ ├── docs/ │ │ │ │ └── reports/ │ │ │ │ └── tests/ │ │ │ │ ├── assets/ │ │ │ │ │ └── style.css │ │ │ │ ├── pytest.xml │ │ │ │ └── tests.html │ │ │ ├── test_api_access_token.py │ │ │ ├── test_api_ai_provider.py │ │ │ ├── test_api_ai_timeout.py │ │ │ ├── test_api_connector_config.py │ │ │ ├── test_api_cook_log.py │ │ │ ├── test_api_food.py │ │ │ ├── test_api_food_shopping.py │ │ │ ├── test_api_import_log.py │ │ │ ├── test_api_ingredient.py │ │ │ ├── test_api_invitelinke.py │ │ │ ├── test_api_keyword.py │ │ │ ├── test_api_meal_plan.py │ │ │ ├── test_api_meal_type.py │ │ │ ├── test_api_property.py │ │ │ ├── test_api_property_type.py │ │ │ ├── test_api_recipe.py │ │ │ ├── test_api_recipe_book.py │ │ │ ├── test_api_recipe_book_entry.py │ │ │ ├── test_api_related_recipe.py │ │ │ ├── test_api_share_link.py │ │ │ ├── test_api_shopping_list_entryv2.py │ │ │ ├── test_api_shopping_list_recipe.py │ │ │ ├── test_api_shopping_recipe.py │ │ │ ├── test_api_space.py │ │ │ ├── test_api_step.py │ │ │ ├── test_api_storage.py │ │ │ ├── test_api_supermarket.py │ │ │ ├── test_api_sync.py │ │ │ ├── test_api_sync_log.py │ │ │ ├── test_api_unit.py │ │ │ ├── test_api_unit_conversion.py │ │ │ ├── test_api_user.py │ │ │ ├── test_api_userpreference.py │ │ │ ├── test_api_userspace.py │ │ │ └── test_api_view_log.py │ │ ├── conftest.py │ │ ├── docs/ │ │ │ └── reports/ │ │ │ └── tests/ │ │ │ ├── assets/ │ │ │ │ └── style.css │ │ │ ├── pytest.xml │ │ │ └── tests.html │ │ ├── factories/ │ │ │ └── __init__.py │ │ ├── other/ │ │ │ ├── __init__.py │ │ │ ├── _recipes.py │ │ │ ├── docs/ │ │ │ │ └── reports/ │ │ │ │ └── tests/ │ │ │ │ └── assets/ │ │ │ │ └── style.css │ │ │ ├── test_automations.py │ │ │ ├── test_connector_manager.py │ │ │ ├── test_cooklang_integration.py │ │ │ ├── test_data/ │ │ │ │ ├── Cooklang/ │ │ │ │ │ ├── American Pancakes.cook │ │ │ │ │ ├── Another Lemon Blueberry Bread.cook │ │ │ │ │ └── Butter Swirl Shortbread Cookies.cook │ │ │ │ ├── allrecipes.html │ │ │ │ ├── americastestkitchen.html │ │ │ │ ├── chefkoch.html │ │ │ │ ├── chefkoch2.html │ │ │ │ ├── cookpad.html │ │ │ │ ├── cookscountry.html │ │ │ │ ├── delish.html │ │ │ │ ├── foodnetwork.html │ │ │ │ ├── giallozafferano.html │ │ │ │ ├── journaldesfemmes.html │ │ │ │ ├── madamedessert.html │ │ │ │ ├── madamedessert.json │ │ │ │ ├── marmiton.html │ │ │ │ ├── regex_recipe.html │ │ │ │ ├── tasteofhome.html │ │ │ │ ├── thespruceeats.html │ │ │ │ └── tudogostoso.html │ │ │ ├── test_food_property.py │ │ │ ├── test_ingredient_editor_performance.py │ │ │ ├── test_ingredient_parser.py │ │ │ ├── test_local_provider.py │ │ │ ├── test_makenow_filter.py │ │ │ ├── test_nested_serializer.py │ │ │ ├── test_permission_helper.py │ │ │ ├── test_recipe_full_text_search.py │ │ │ ├── test_schemas.py │ │ │ ├── test_social_auth.py │ │ │ ├── test_theming.py │ │ │ ├── test_unit_conversion.py │ │ │ └── test_url_import.py │ │ ├── resources/ │ │ │ └── websites/ │ │ │ ├── ld_json_1.html │ │ │ ├── ld_json_2.html │ │ │ ├── ld_json_3.html │ │ │ ├── ld_json_4.html │ │ │ ├── ld_json_itemList.html │ │ │ ├── ld_json_multiple.html │ │ │ ├── micro_data_1.html │ │ │ ├── micro_data_2.html │ │ │ ├── micro_data_3.html │ │ │ └── micro_data_4.html │ │ └── views/ │ │ ├── __init__.py │ │ ├── test_views_api.py │ │ └── test_views_general.py │ ├── urls.py │ ├── version_info.py │ └── views/ │ ├── __init__.py │ ├── api.py │ ├── import_export.py │ ├── telegram.py │ └── views.py ├── docs/ │ ├── CNAME │ ├── contribute/ │ │ ├── contribute.md │ │ ├── documentation.md │ │ ├── feature_contrib/ │ │ │ ├── Integration.md │ │ │ └── featureguides.md │ │ ├── guidelines.md │ │ ├── installation.md │ │ ├── pycharm.md │ │ ├── related.md │ │ ├── translations.md │ │ └── vscode.md │ ├── faq.md │ ├── features/ │ │ ├── ai.md │ │ ├── authentication.md │ │ ├── automation.md │ │ ├── connectors.md │ │ ├── external_recipes.md │ │ ├── import_export.md │ │ ├── shopping.md │ │ ├── telegram_bot.md │ │ └── templating.md │ ├── index.md │ ├── install/ │ │ ├── archlinux.md │ │ ├── docker/ │ │ │ ├── apache-proxy/ │ │ │ │ └── docker-compose.yml │ │ │ ├── ipv6_plain/ │ │ │ │ └── docker-compose.yml │ │ │ ├── nginx-proxy/ │ │ │ │ └── docker-compose.yml │ │ │ ├── plain/ │ │ │ │ └── docker-compose.yml │ │ │ └── traefik-nginx/ │ │ │ └── docker-compose.yml │ │ ├── docker.md │ │ ├── helmChart.md │ │ ├── homeassistant.md │ │ ├── k8s/ │ │ │ ├── 10-configmap.yaml │ │ │ ├── 15-secrets.yaml │ │ │ ├── 20-service-account.yaml │ │ │ ├── 30-pvc.yaml │ │ │ ├── 40-sts-postgresql.yaml │ │ │ ├── 45-service-db.yaml │ │ │ ├── 50-deployment.yaml │ │ │ ├── 60-service.yaml │ │ │ └── 70-ingress.yaml │ │ ├── kubernetes.md │ │ ├── kubesail.md │ │ ├── manual.md │ │ ├── other.md │ │ ├── swag.md │ │ ├── synology.md │ │ ├── truenas_portainer.md │ │ ├── unraid.md │ │ └── wsl.md │ ├── preview.xcf │ ├── stylesheets/ │ │ └── extra.css │ ├── system/ │ │ ├── backup.md │ │ ├── configuration.md │ │ ├── migration_sqlite-postgres.md │ │ ├── permissions.md │ │ └── updating.md │ └── tests/ │ ├── assets/ │ │ └── style.css │ ├── pytest.xml │ └── tests.html ├── generate_api_client.py ├── http.d/ │ ├── Recipes.conf.template │ └── errorpages/ │ └── http502.html ├── make_compile_messages.py ├── manage.py ├── mkdocs.yml ├── nginx/ │ └── conf.d/ │ ├── Recipes.conf │ └── errorpages/ │ └── http502.html ├── openapitools.json ├── plugin.py ├── pyproject.toml ├── pytest.ini ├── recipes/ │ ├── __init__.py │ ├── locale/ │ │ ├── ar/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── bg/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── ca/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── cs/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── da/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── de/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── el/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── en/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── es/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── fi/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── fr/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── he/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── hr/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── hu_HU/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── hy/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── id/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── it/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── lv/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── nb_NO/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── nl/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── pl/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── pt/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── pt_BR/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── rn/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── ro/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── ru/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── sl/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── sv/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── tr/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── uk/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── vi/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── zh_CN/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ └── zh_Hant/ │ │ └── LC_MESSAGES/ │ │ ├── django.mo │ │ └── django.po │ ├── middleware.py │ ├── settings.py │ ├── test_settings.py │ ├── urls.py │ └── wsgi.py ├── requirements.txt ├── version.py └── vue3/ ├── env.d.ts ├── package.json ├── src/ │ ├── apps/ │ │ └── tandoor/ │ │ ├── Tandoor.vue │ │ └── main.ts │ ├── assets/ │ │ ├── bookmarklet_v3.js │ │ └── vueform.css │ ├── components/ │ │ ├── buttons/ │ │ │ ├── AiActionButton.vue │ │ │ └── BtnCopy.vue │ │ ├── dialogs/ │ │ │ ├── AddToShoppingDialog.vue │ │ │ ├── AutoPlanDialog.vue │ │ │ ├── BatchDeleteDialog.vue │ │ │ ├── BatchEditFoodDialog.vue │ │ │ ├── BatchEditRecipeDialog.vue │ │ │ ├── DeleteConfirmDialog.vue │ │ │ ├── FdcSearchDialog.vue │ │ │ ├── FreezerExpiryDialog.vue │ │ │ ├── HelpDialog.vue │ │ │ ├── ImportTandoorDialog.vue │ │ │ ├── InventoryEntryLogDialog.vue │ │ │ ├── MealPlanIcalDialog.vue │ │ │ ├── MessageListDialog.vue │ │ │ ├── ModelEditDialog.vue │ │ │ ├── ModelMergeDialog.vue │ │ │ ├── RecipeScalingDialog.vue │ │ │ ├── RecipeShareDialog.vue │ │ │ ├── ShoppingExportDialog.vue │ │ │ ├── ShoppingLineItemDialog.vue │ │ │ ├── StepIngredientSorterDialog.vue │ │ │ ├── SyncDialog.vue │ │ │ └── VClosableCardTitle.vue │ │ ├── display/ │ │ │ ├── BookEntryCard.vue │ │ │ ├── ClosableHelpAlert.vue │ │ │ ├── DatabaseLinkCol.vue │ │ │ ├── DatabaseModelCol.vue │ │ │ ├── ExternalRecipeViewer.vue │ │ │ ├── HelpView.vue │ │ │ ├── HorizontalMealPlanWindow.vue │ │ │ ├── HorizontalRecipeWindow.vue │ │ │ ├── ImportLogViewer.vue │ │ │ ├── IngredientString.vue │ │ │ ├── IngredientsTable.vue │ │ │ ├── IngredientsTableRow.vue │ │ │ ├── Instructions.vue │ │ │ ├── InventoryEntryTable.vue │ │ │ ├── KeywordsBar.vue │ │ │ ├── MealPlanCalendarHeader.vue │ │ │ ├── MealPlanCalendarItem.vue │ │ │ ├── MealPlanView.vue │ │ │ ├── NavigationDrawerContextMenu.vue │ │ │ ├── PrivateRecipeBadge.vue │ │ │ ├── PropertyView.vue │ │ │ ├── RandomIcon.vue │ │ │ ├── RecipeActivity.vue │ │ │ ├── RecipeCard.vue │ │ │ ├── RecipeImage.vue │ │ │ ├── RecipeView.vue │ │ │ ├── ScalableNumber.vue │ │ │ ├── ShoppingLineItem.vue │ │ │ ├── ShoppingListView.vue │ │ │ ├── ShoppingListsBar.vue │ │ │ ├── SpaceLimitsInfo.vue │ │ │ ├── StepView.vue │ │ │ ├── StepsOverview.vue │ │ │ ├── ThankYouNote.vue │ │ │ ├── Timer.vue │ │ │ └── VSnackbarQueued.vue │ │ ├── inputs/ │ │ │ ├── BaseUnitSelect.vue │ │ │ ├── CategorySelectChip.vue │ │ │ ├── GlobalSearchDialog.vue │ │ │ ├── HierarchyEditor.vue │ │ │ ├── LanguageSelect.vue │ │ │ ├── ModelSelect.vue │ │ │ ├── ModelSelectVuetify.vue │ │ │ ├── NumberScalerDialog.vue │ │ │ ├── PropertiesEditor.vue │ │ │ ├── RatingField.vue │ │ │ ├── RecipeContextMenu.vue │ │ │ ├── ShoppingListEntryInput.vue │ │ │ ├── ShoppingListSelectChip.vue │ │ │ ├── StepEditor.vue │ │ │ ├── StepMarkdownEditor.vue │ │ │ └── UserFileField.vue │ │ ├── model_editors/ │ │ │ ├── AccessTokenEditor.vue │ │ │ ├── AiProviderEditor.vue │ │ │ ├── AutomationEditor.vue │ │ │ ├── ConnectorConfigEditor.vue │ │ │ ├── CookLogEditor.vue │ │ │ ├── CustomFilterEditor.vue │ │ │ ├── FoodEditor.vue │ │ │ ├── HouseholdEditor.vue │ │ │ ├── InventoryLocationEditor.vue │ │ │ ├── InviteLinkEditor.vue │ │ │ ├── KeywordEditor.vue │ │ │ ├── MealPlanEditor.vue │ │ │ ├── MealTypeEditor.vue │ │ │ ├── ModelEditorBase.vue │ │ │ ├── PropertyEditor.vue │ │ │ ├── PropertyTypeEditor.vue │ │ │ ├── RecipeBookEditor.vue │ │ │ ├── RecipeEditor.vue │ │ │ ├── ShoppingListEditor.vue │ │ │ ├── ShoppingListEntryEditor.vue │ │ │ ├── SpaceEditor.vue │ │ │ ├── StorageEditor.vue │ │ │ ├── SupermarketCategoryEditor.vue │ │ │ ├── SupermarketEditor.vue │ │ │ ├── SyncEditor.vue │ │ │ ├── UnitConversionEditor.vue │ │ │ ├── UnitEditor.vue │ │ │ ├── UserFileEditor.vue │ │ │ └── UserSpaceEditor.vue │ │ ├── settings/ │ │ │ ├── AccountSettings.vue │ │ │ ├── ApiSettings.vue │ │ │ ├── CosmeticSettings.vue │ │ │ ├── ExportDataSettings.vue │ │ │ ├── MealPlanDeviceSettings.vue │ │ │ ├── MealPlanSettings.vue │ │ │ ├── OpenDataImportSettings.vue │ │ │ ├── SearchSettings.vue │ │ │ ├── ShoppingSettings.vue │ │ │ └── SpaceSettings.vue │ │ └── tables/ │ │ └── InventoryEntryLogTable.vue │ ├── composables/ │ │ ├── useDjangoUrls.ts │ │ ├── useFileApi.ts │ │ ├── useModelEditorFunctions.ts │ │ └── useNavigation.ts │ ├── i18n.ts │ ├── locales/ │ │ ├── ar.json │ │ ├── bg.json │ │ ├── ca.json │ │ ├── cs.json │ │ ├── da.json │ │ ├── de.json │ │ ├── el.json │ │ ├── en.json │ │ ├── es.json │ │ ├── fi.json │ │ ├── fr.json │ │ ├── he.json │ │ ├── hr.json │ │ ├── hu.json │ │ ├── hy.json │ │ ├── id.json │ │ ├── is.json │ │ ├── it.json │ │ ├── ko.json │ │ ├── lt.json │ │ ├── lv.json │ │ ├── nb_NO.json │ │ ├── nl.json │ │ ├── nn.json │ │ ├── pl.json │ │ ├── pt.json │ │ ├── pt_BR.json │ │ ├── ro.json │ │ ├── ru.json │ │ ├── sl.json │ │ ├── sv.json │ │ ├── tr.json │ │ ├── uk.json │ │ ├── zh_Hans.json │ │ └── zh_Hant.json │ ├── openapi/ │ │ ├── .openapi-generator/ │ │ │ ├── FILES │ │ │ └── VERSION │ │ ├── .openapi-generator-ignore │ │ ├── apis/ │ │ │ ├── ApiApi.ts │ │ │ ├── ApiTokenAuthApi.ts │ │ │ └── index.ts │ │ ├── index.ts │ │ ├── models/ │ │ │ ├── AccessToken.ts │ │ │ ├── AiLog.ts │ │ │ ├── AiProvider.ts │ │ │ ├── AlignmentEnum.ts │ │ │ ├── AuthToken.ts │ │ │ ├── AutoMealPlan.ts │ │ │ ├── Automation.ts │ │ │ ├── AutomationTypeEnum.ts │ │ │ ├── BaseUnitEnum.ts │ │ │ ├── BookingTypeEnum.ts │ │ │ ├── BookmarkletImport.ts │ │ │ ├── BookmarkletImportList.ts │ │ │ ├── ConnectorConfig.ts │ │ │ ├── ConnectorConfigConfig.ts │ │ │ ├── ConnectorConfigTypeEnum.ts │ │ │ ├── CookLog.ts │ │ │ ├── CustomFilter.ts │ │ │ ├── DefaultPageEnum.ts │ │ │ ├── DeleteEnum.ts │ │ │ ├── EnterpriseKeyword.ts │ │ │ ├── EnterpriseSocialEmbed.ts │ │ │ ├── EnterpriseSocialEmbedTypeEnum.ts │ │ │ ├── EnterpriseSocialRecipeSearch.ts │ │ │ ├── EnterpriseSpace.ts │ │ │ ├── ExportLog.ts │ │ │ ├── ExportRequest.ts │ │ │ ├── FdcQuery.ts │ │ │ ├── FdcQueryFoods.ts │ │ │ ├── Food.ts │ │ │ ├── FoodBatchUpdate.ts │ │ │ ├── FoodInheritField.ts │ │ │ ├── FoodShopping.ts │ │ │ ├── FoodShoppingUpdate.ts │ │ │ ├── FoodSimple.ts │ │ │ ├── GenericModel.ts │ │ │ ├── GenericModelReference.ts │ │ │ ├── Group.ts │ │ │ ├── Household.ts │ │ │ ├── ImportImage.ts │ │ │ ├── ImportLog.ts │ │ │ ├── ImportOpenData.ts │ │ │ ├── ImportOpenDataMetaData.ts │ │ │ ├── ImportOpenDataResponse.ts │ │ │ ├── ImportOpenDataResponseDetail.ts │ │ │ ├── ImportOpenDataVersionMetaData.ts │ │ │ ├── Ingredient.ts │ │ │ ├── IngredientParserRequest.ts │ │ │ ├── IngredientParserResponse.ts │ │ │ ├── IngredientSimple.ts │ │ │ ├── IngredientString.ts │ │ │ ├── InventoryEntry.ts │ │ │ ├── InventoryLocation.ts │ │ │ ├── InventoryLog.ts │ │ │ ├── InviteLink.ts │ │ │ ├── Keyword.ts │ │ │ ├── KeywordLabel.ts │ │ │ ├── Localization.ts │ │ │ ├── MealPlan.ts │ │ │ ├── MealType.ts │ │ │ ├── MethodEnum.ts │ │ │ ├── NutritionInformation.ts │ │ │ ├── OpenDataCategory.ts │ │ │ ├── OpenDataConversion.ts │ │ │ ├── OpenDataFood.ts │ │ │ ├── OpenDataFoodProperty.ts │ │ │ ├── OpenDataProperty.ts │ │ │ ├── OpenDataStore.ts │ │ │ ├── OpenDataStoreCategory.ts │ │ │ ├── OpenDataUnit.ts │ │ │ ├── OpenDataUnitTypeEnum.ts │ │ │ ├── OpenDataVersion.ts │ │ │ ├── PaginatedAiLogList.ts │ │ │ ├── PaginatedAiProviderList.ts │ │ │ ├── PaginatedAutomationList.ts │ │ │ ├── PaginatedBookmarkletImportListList.ts │ │ │ ├── PaginatedConnectorConfigConfigList.ts │ │ │ ├── PaginatedConnectorConfigList.ts │ │ │ ├── PaginatedCookLogList.ts │ │ │ ├── PaginatedCustomFilterList.ts │ │ │ ├── PaginatedEnterpriseSocialEmbedList.ts │ │ │ ├── PaginatedEnterpriseSocialRecipeSearchList.ts │ │ │ ├── PaginatedEnterpriseSpaceList.ts │ │ │ ├── PaginatedExportLogList.ts │ │ │ ├── PaginatedFoodList.ts │ │ │ ├── PaginatedGenericModelList.ts │ │ │ ├── PaginatedGenericModelReferenceList.ts │ │ │ ├── PaginatedHouseholdList.ts │ │ │ ├── PaginatedImportLogList.ts │ │ │ ├── PaginatedIngredientList.ts │ │ │ ├── PaginatedInventoryEntryList.ts │ │ │ ├── PaginatedInventoryLocationList.ts │ │ │ ├── PaginatedInventoryLogList.ts │ │ │ ├── PaginatedInviteLinkList.ts │ │ │ ├── PaginatedKeywordList.ts │ │ │ ├── PaginatedMealPlanList.ts │ │ │ ├── PaginatedMealTypeList.ts │ │ │ ├── PaginatedOpenDataCategoryList.ts │ │ │ ├── PaginatedOpenDataConversionList.ts │ │ │ ├── PaginatedOpenDataFoodList.ts │ │ │ ├── PaginatedOpenDataPropertyList.ts │ │ │ ├── PaginatedOpenDataStoreList.ts │ │ │ ├── PaginatedOpenDataUnitList.ts │ │ │ ├── PaginatedOpenDataVersionList.ts │ │ │ ├── PaginatedPropertyList.ts │ │ │ ├── PaginatedPropertyTypeList.ts │ │ │ ├── PaginatedRecipeBookEntryList.ts │ │ │ ├── PaginatedRecipeBookList.ts │ │ │ ├── PaginatedRecipeImportList.ts │ │ │ ├── PaginatedRecipeOverviewList.ts │ │ │ ├── PaginatedRecipeSimpleList.ts │ │ │ ├── PaginatedShoppingListEntryList.ts │ │ │ ├── PaginatedShoppingListList.ts │ │ │ ├── PaginatedShoppingListRecipeList.ts │ │ │ ├── PaginatedSpaceList.ts │ │ │ ├── PaginatedStepList.ts │ │ │ ├── PaginatedStorageEntryList.ts │ │ │ ├── PaginatedStorageList.ts │ │ │ ├── PaginatedStorageLocationList.ts │ │ │ ├── PaginatedSupermarketCategoryList.ts │ │ │ ├── PaginatedSupermarketCategoryRelationList.ts │ │ │ ├── PaginatedSupermarketList.ts │ │ │ ├── PaginatedSyncList.ts │ │ │ ├── PaginatedSyncLogList.ts │ │ │ ├── PaginatedUnitConversionList.ts │ │ │ ├── PaginatedUnitList.ts │ │ │ ├── PaginatedUserFileList.ts │ │ │ ├── PaginatedUserSpaceList.ts │ │ │ ├── PaginatedViewLogList.ts │ │ │ ├── ParsedIngredient.ts │ │ │ ├── PatchedAccessToken.ts │ │ │ ├── PatchedAiProvider.ts │ │ │ ├── PatchedAutomation.ts │ │ │ ├── PatchedBookmarkletImport.ts │ │ │ ├── PatchedConnectorConfig.ts │ │ │ ├── PatchedConnectorConfigConfig.ts │ │ │ ├── PatchedCookLog.ts │ │ │ ├── PatchedCustomFilter.ts │ │ │ ├── PatchedEnterpriseSocialEmbed.ts │ │ │ ├── PatchedEnterpriseSpace.ts │ │ │ ├── PatchedExportLog.ts │ │ │ ├── PatchedFood.ts │ │ │ ├── PatchedHousehold.ts │ │ │ ├── PatchedImportLog.ts │ │ │ ├── PatchedIngredient.ts │ │ │ ├── PatchedInventoryEntry.ts │ │ │ ├── PatchedInventoryLocation.ts │ │ │ ├── PatchedInviteLink.ts │ │ │ ├── PatchedKeyword.ts │ │ │ ├── PatchedMealPlan.ts │ │ │ ├── PatchedMealType.ts │ │ │ ├── PatchedOpenDataCategory.ts │ │ │ ├── PatchedOpenDataConversion.ts │ │ │ ├── PatchedOpenDataFood.ts │ │ │ ├── PatchedOpenDataProperty.ts │ │ │ ├── PatchedOpenDataStore.ts │ │ │ ├── PatchedOpenDataUnit.ts │ │ │ ├── PatchedOpenDataVersion.ts │ │ │ ├── PatchedProperty.ts │ │ │ ├── PatchedPropertyType.ts │ │ │ ├── PatchedRecipe.ts │ │ │ ├── PatchedRecipeBook.ts │ │ │ ├── PatchedRecipeBookEntry.ts │ │ │ ├── PatchedRecipeImport.ts │ │ │ ├── PatchedSearchPreference.ts │ │ │ ├── PatchedShoppingList.ts │ │ │ ├── PatchedShoppingListEntry.ts │ │ │ ├── PatchedShoppingListRecipe.ts │ │ │ ├── PatchedSpace.ts │ │ │ ├── PatchedStep.ts │ │ │ ├── PatchedStorage.ts │ │ │ ├── PatchedStorageEntry.ts │ │ │ ├── PatchedStorageLocation.ts │ │ │ ├── PatchedSupermarket.ts │ │ │ ├── PatchedSupermarketCategory.ts │ │ │ ├── PatchedSupermarketCategoryRelation.ts │ │ │ ├── PatchedSync.ts │ │ │ ├── PatchedUnit.ts │ │ │ ├── PatchedUnitConversion.ts │ │ │ ├── PatchedUser.ts │ │ │ ├── PatchedUserPreference.ts │ │ │ ├── PatchedUserSpace.ts │ │ │ ├── PatchedViewLog.ts │ │ │ ├── Property.ts │ │ │ ├── PropertyType.ts │ │ │ ├── Recipe.ts │ │ │ ├── RecipeBatchUpdate.ts │ │ │ ├── RecipeBook.ts │ │ │ ├── RecipeBookEntry.ts │ │ │ ├── RecipeFlat.ts │ │ │ ├── RecipeFromSource.ts │ │ │ ├── RecipeFromSourceResponse.ts │ │ │ ├── RecipeImage.ts │ │ │ ├── RecipeImport.ts │ │ │ ├── RecipeOverview.ts │ │ │ ├── RecipeShoppingUpdate.ts │ │ │ ├── RecipeSimple.ts │ │ │ ├── ScalingEnum.ts │ │ │ ├── SearchEnum.ts │ │ │ ├── SearchFields.ts │ │ │ ├── SearchPreference.ts │ │ │ ├── ServerSettings.ts │ │ │ ├── ShareLink.ts │ │ │ ├── ShoppingList.ts │ │ │ ├── ShoppingListEntry.ts │ │ │ ├── ShoppingListEntryBulk.ts │ │ │ ├── ShoppingListEntryBulkCreate.ts │ │ │ ├── ShoppingListEntrySimpleCreate.ts │ │ │ ├── ShoppingListRecipe.ts │ │ │ ├── SourceImportDuplicate.ts │ │ │ ├── SourceImportFood.ts │ │ │ ├── SourceImportIngredient.ts │ │ │ ├── SourceImportKeyword.ts │ │ │ ├── SourceImportProperty.ts │ │ │ ├── SourceImportPropertyType.ts │ │ │ ├── SourceImportRecipe.ts │ │ │ ├── SourceImportStep.ts │ │ │ ├── SourceImportUnit.ts │ │ │ ├── Space.ts │ │ │ ├── SpaceNavTextColorEnum.ts │ │ │ ├── SpaceThemeEnum.ts │ │ │ ├── Step.ts │ │ │ ├── Storage.ts │ │ │ ├── Supermarket.ts │ │ │ ├── SupermarketCategory.ts │ │ │ ├── SupermarketCategoryRelation.ts │ │ │ ├── Sync.ts │ │ │ ├── SyncLog.ts │ │ │ ├── ThemeEnum.ts │ │ │ ├── TypeEnum.ts │ │ │ ├── Unit.ts │ │ │ ├── UnitConversion.ts │ │ │ ├── User.ts │ │ │ ├── UserFile.ts │ │ │ ├── UserFileView.ts │ │ │ ├── UserPreference.ts │ │ │ ├── UserPreferenceNavTextColorEnum.ts │ │ │ ├── UserSpace.ts │ │ │ ├── ViewLog.ts │ │ │ └── index.ts │ │ ├── openapi.json │ │ ├── openapitools.json │ │ ├── runtime.ts │ │ └── templates/ │ │ ├── apis.mustache │ │ └── modelGeneric.mustache │ ├── pages/ │ │ ├── 404Page.vue │ │ ├── BookViewPage.vue │ │ ├── BooksPage.vue │ │ ├── DatabasePage.vue │ │ ├── HelpPage.vue │ │ ├── IngredientEditorPage.vue │ │ ├── InventoryBookingPage.vue │ │ ├── MealPlanPage.vue │ │ ├── ModelDeletePage.vue │ │ ├── ModelEditPage.vue │ │ ├── ModelListPage.vue │ │ ├── PantryPage.vue │ │ ├── PropertyEditorPage.vue │ │ ├── RecipeImportPage.vue │ │ ├── RecipeViewPage.vue │ │ ├── SearchPage.vue │ │ ├── SettingsPage.vue │ │ ├── ShoppingListPage.vue │ │ ├── SpaceSetupPage.vue │ │ ├── StartPage.vue │ │ ├── TestPage.vue │ │ └── WelcomePage.vue │ ├── service-worker.ts │ ├── stores/ │ │ ├── MealPlanStore.ts │ │ ├── MessageStore.ts │ │ ├── ShoppingStore.ts │ │ └── UserPreferenceStore.ts │ ├── types/ │ │ ├── FoodFilters.ts │ │ ├── MealPlan.ts │ │ ├── Models.ts │ │ ├── Plugins.ts │ │ ├── SearchTypes.ts │ │ ├── Shopping.ts │ │ └── settings.ts │ ├── utils/ │ │ ├── breakpoint_utils.ts │ │ ├── cookie.ts │ │ ├── date_utils.ts │ │ ├── fdc.ts │ │ ├── integration_utils.ts │ │ ├── logic_utils.ts │ │ ├── model_utils.ts │ │ ├── number_utils.ts │ │ ├── step_utils.ts │ │ └── utils.ts │ └── vuetify.ts ├── tsconfig.app.json ├── tsconfig.json ├── tsconfig.node.json ├── tsconfig.vitest.json └── vite.config.ts