# NOTE: will log all redux actions and transfers in console
debug: false

# Angular User Inteface settings
# NOTE: these settings define where Node.js will start your UI application. Therefore, these
# "ui" settings usually specify a localhost port/URL which is later proxied to a public URL (using Apache or similar)
ui:
  ssl: false
  host: localhost
  port: 4000
  # NOTE: Space is capitalized because 'namespace' is a reserved string in TypeScript
  nameSpace: /
  # The rateLimiter settings limit each IP to a 'max' of 500 requests per 'windowMs' (1 minute).
  rateLimiter:
    windowMs: 60000 # 1 minute
    max: 500 # limit each IP to 500 requests per windowMs
  # Trust X-FORWARDED-* headers from proxies (default = true)
  useProxies: true

# Angular Server Side Rendering (SSR) settings
ssr:
  # Whether to tell Angular to inline "critical" styles into the server-side rendered HTML.
  # Determining which styles are critical is a relatively expensive operation; this option is
  # disabled (false) by default to boost server performance at the expense of loading smoothness.
  inlineCriticalCss: false
  # Patterns to be run as regexes against the path of the page to check if SSR is allowed.
  # If the path match any of the regexes it will be served directly in CSR.
  # By default, excludes community and collection browse, global browse, global search, community list, statistics and various administrative tools.
  excludePathPatterns:
    - pattern: "^/communities/[a-f0-9-]{36}/browse(/.*)?$"
      flag: "i"
    - pattern: "^/collections/[a-f0-9-]{36}/browse(/.*)?$"
      flag: "i"
    - pattern: "^/browse/"
    - pattern: "^/search$"
    - pattern: "^/community-list$"
    - pattern: "^/admin/"
    - pattern: "^/processes/?"
    - pattern: "^/notifications/"
    - pattern: "^/statistics/?"
    - pattern: "^/access-control/"
    - pattern: "^/health$"

  # Whether to enable rendering of Search component on SSR.
  # If set to true the component will be included in the HTML returned from the server side rendering.
  # If set to false the component will not be included in the HTML returned from the server side rendering.
  enableSearchComponent: false
  # Whether to enable rendering of Browse component on SSR.
  # If set to true the component will be included in the HTML returned from the server side rendering.
  # If set to false the component will not be included in the HTML returned from the server side rendering.
  enableBrowseComponent: false
  # Enable state transfer from the server-side application to the client-side application.
  # Defaults to true.
  # Note: When using an external application cache layer, it's recommended not to transfer the state to avoid caching it.
  # Disabling it ensures that dynamic state information is not inadvertently cached, which can improve security and
  # ensure that users always use the most up-to-date state.
  transferState: true
  # When a different REST base URL is used for the server-side application, the generated state contains references to
  # REST resources with the internal URL configured. By default, these internal URLs are replaced with public URLs.
  # Disable this setting to avoid URL replacement during SSR. In this the state is not transferred to avoid security issues.
  replaceRestUrl: true
  # Enable request performance profiling data collection and printing the results in the server console.
  # Defaults to false. Enabling in production is NOT recommended
  #enablePerformanceProfiler: false

# The REST API server settings
# NOTE: these settings define which (publicly available) REST API to use. They are usually
# 'synced' with the 'dspace.server.url' setting in your backend's local.cfg.
rest:
  ssl: true
  host: sandbox.dspace.org
  port: 443
  # NOTE: Space is capitalized because 'namespace' is a reserved string in TypeScript
  nameSpace: /server
  # Provide a different REST url to be used during SSR execution. It must contain the whole url including protocol, server port and
  # server namespace (uncomment to use it).
  #ssrBaseUrl: http://localhost:8080/server

# Caching settings
cache:
  # NOTE: how long should objects be cached for by default
  msToLive:
    default: 900000 # 15 minutes
  # Default 'Cache-Control' HTTP Header to set for all static content (including compiled *.js files)
  # Defaults to max-age=604,800 seconds (one week). This lets a user's browser know that it can cache these
  # files for one week, after which they will be "stale" and need to be redownloaded.
  # NOTE: When updates are made to compiled *.js files, it will automatically bypass this browser cache, because
  # all compiled *.js files include a unique hash in their name which updates when content is modified.
  control: max-age=604800 # revalidate browser
  autoSync:
    defaultTime: 0
    maxBufferSize: 100
    timePerMethod:
      PATCH: 3 # time in seconds
  # In-memory cache(s) of server-side rendered pages. These caches will store the most recently accessed public pages.
  # Pages are automatically added/dropped from these caches based on how recently they have been used.
  # Restarting the app clears all page caches.
  # NOTE: To control the cache size, use the "max" setting. Keep in mind, individual cached pages are usually small (<100KB).
  # Enabling *both* caches will mean that a page may be cached twice, once in each cache (but may expire at different times via timeToLive).
  serverSide:
    # Set to true to see all cache hits/misses/refreshes in your console logs. Useful for debugging SSR caching issues.
    debug: false
    # When enabled (i.e. max > 0), known bots will be sent pages from a server side cache specific for bots.
    # (Keep in mind, bot detection cannot be guaranteed. It is possible some bots will bypass this cache.)
    botCache:
      # Maximum number of pages to cache for known bots. Set to zero (0) to disable server side caching for bots.
      # Default is 1000, which means the 1000 most recently accessed public pages will be cached.
      # As all pages are cached in server memory, increasing this value will increase memory needs.
      # Individual cached pages are usually small (<100KB), so max=1000 should only require ~100MB of memory.
      max: 1000
      # Amount of time after which cached pages are considered stale (in ms). After becoming stale, the cached
      # copy is automatically refreshed on the next request.
      # NOTE: For the bot cache, this setting may impact how quickly search engine bots will index new content on your site.
      # For example, setting this to one week may mean that search engine bots may not find all new content for one week.
      timeToLive: 86400000 # 1 day
      # When set to true, after timeToLive expires, the next request will receive the *cached* page & then re-render the page
      # behind the scenes to update the cache. This ensures users primarily interact with the cache, but may receive stale pages (older than timeToLive).
      # When set to false, after timeToLive expires, the next request will wait on SSR to complete & receive a fresh page (which is then saved to cache).
      # This ensures stale pages (older than timeToLive) are never returned from the cache, but some users will wait on SSR.
      allowStale: true
    # When enabled (i.e. max > 0), all anonymous users will be sent pages from a server side cache.
    # This allows anonymous users to interact more quickly with the site, but also means they may see slightly
    # outdated content (based on timeToLive)
    anonymousCache:
      # Maximum number of pages to cache. Default is zero (0) which means anonymous user cache is disabled.
      # As all pages are cached in server memory, increasing this value will increase memory needs.
      # Individual cached pages are usually small (<100KB), so a value of max=1000 would only require ~100MB of memory.
      max: 0
      # Amount of time after which cached pages are considered stale (in ms). After becoming stale, the cached
      # copy is automatically refreshed on the next request.
      # NOTE: For the anonymous cache, it is recommended to keep this value low to avoid anonymous users seeing outdated content.
      timeToLive: 10000 # 10 seconds
      # When set to true, after timeToLive expires, the next request will receive the *cached* page & then re-render the page
      # behind the scenes to update the cache. This ensures users primarily interact with the cache, but may receive stale pages (older than timeToLive).
      # When set to false, after timeToLive expires, the next request will wait on SSR to complete & receive a fresh page (which is then saved to cache).
      # This ensures stale pages (older than timeToLive) are never returned from the cache, but some users will wait on SSR.
      allowStale: true

# Authentication settings
auth:
  # Authentication UI settings
  ui:
    # the amount of time before the idle warning is shown
    timeUntilIdle: 900000 # 15 minutes
    # the amount of time the user has to react after the idle warning is shown before they are logged out.
    idleGracePeriod: 300000 # 5 minutes
  # Authentication REST settings
  rest:
    # If the rest token expires in less than this amount of time, it will be refreshed automatically.
    # This is independent from the idle warning.
    timeLeftBeforeTokenRefresh: 120000 # 2 minutes

# Form settings
form:
  # Sets the spellcheck textarea attribute value
  spellCheck: true
  # NOTE: Map server-side validators to comparative Angular form validators
  validatorMap:
    required: required
    regex: pattern

# Notification settings
notifications:
  rtl: false
  position:
    - top
    - right
  maxStack: 8
  # NOTE: after how many seconds notification is closed automatically. If set to zero notifications are not closed automatically
  timeOut: 5000 # 5 second
  clickToClose: true
  # NOTE: 'fade' | 'fromTop' | 'fromRight' | 'fromBottom' | 'fromLeft' | 'rotate' | 'scale'
  animate: scale

# Submission settings
submission:
  autosave:
    # NOTE: which metadata trigger an autosave
    metadata: []
    # NOTE: after how many time (milliseconds) submission is saved automatically
    # eg. timer: 5 * (1000 * 60); // 5 minutes
    timer: 0
  # Always show the duplicate detection section if enabled, even if there are no potential duplicates detected
  # (a message will be displayed to indicate no matches were found)
  duplicateDetection:
    alwaysShowSection: false
  icons:
    metadata:
      # NOTE: example of configuration
      #   # NOTE: metadata name
      # - name: dc.author
      #   # NOTE: fontawesome (v6.x) icon classes and bootstrap utility classes can be used
      #   style: fas fa-user
      - name: dc.author
        style: fas fa-user
      # default configuration
      - name: default
        style: ''
    authority:
      confidence:
        # NOTE: example of configuration
        #   # NOTE: confidence value
        # - value: 600
        #   # NOTE: fontawesome (v6.x) icon classes and bootstrap utility classes can be used
        #   style: text-success
        #   icon: fa-circle-check
        #   # NOTE: the class configured in property style is used by default, the icon property could be used in component
        #           configured to use a 'icon mode' display (mainly in edit-item page)
        - value: 600
          style: text-success
          icon: fa-circle-check
        - value: 500
          style: text-info
          icon: fa-gear
        - value: 400
          style: text-warning
          icon: fa-circle-question
        - value: 300
          style: text-muted
          icon: fa-thumbs-down
        - value: 200
          style: text-muted
          icon: fa-circle-exclamation
        - value: 100
          style: text-muted
          icon: fa-circle-stop
        - value: 0
          style: text-muted
          icon: fa-ban
        - value: -1
          style: text-muted
          icon: fa-circle-xmark
        # default configuration
        - value: default
          style: text-muted
          icon: fa-circle-xmark

#  Default Language in which the UI will be rendered if the user's browser language is not an active language
defaultLanguage: en

# Languages. DSpace Angular holds a message catalog for each of the following languages.
# When set to active, users will be able to switch to the use of this language in the user interface.
languages:
  - code: en
    label: English
    active: true
  - code: ar
    label: العربية
    active: true
  - code: bn
    label: বাংলা
    active: true
  - code: ca
    label: Català
    active: true
  - code: cs
    label: Čeština
    active: true
  - code: de
    label: Deutsch
    active: true
  - code: el
    label: Ελληνικά
    active: true
  - code: es
    label: Español
    active: true
  - code: fi
    label: Suomi
    active: true
  - code: fr
    label: Français
    active: true
  - code: gd
    label: Gàidhlig
    active: true
  - code: gu
    label: ગુજરાતી
    active: true
  - code: hi
    label: हिंदी
    active: true
  - code: hu
    label: Magyar
    active: true
  - code: it
    label: Italiano
    active: true
  - code: kk
    label: Қазақ
    active: true
  - code: lv
    label: Latviešu
    active: true
  - code: mr
    label: मराठी
    active: true
  - code: nl
    label: Nederlands
    active: true
  - code: pl
    label: Polski
    active: true
  - code: pt-PT
    label: Português
    active: true
  - code: pt-BR
    label: Português do Brasil
    active: true
  - code: sr-lat
    label: Srpski (lat)
    active: true
  - code: sr-cyr
    label: Српски
    active: true
  - code: sv
    label: Svenska
    active: true
  - code: tr
    label: Türkçe
    active: true
  - code: uk
    label: Yкраї́нська
    active: true
  - code: vi
    label: Tiếng Việt
    active: true


# Browse-By Pages
browseBy:
  # Amount of years to display using jumps of one year (current year - oneYearLimit)
  oneYearLimit: 10
  # Limit for years to display using jumps of five years (current year - fiveYearLimit)
  fiveYearLimit: 30
  # The absolute lowest year to display in the dropdown (only used when no lowest date can be found for all items)
  defaultLowerLimit: 1900
  # If true, thumbnail images for items will be added to BOTH search and browse result lists.
  showThumbnails: true
  # The number of entries in a paginated browse results list.
  # Rounded to the nearest size in the list of selectable sizes on the
  # settings menu.
  pageSize: 20

communityList:
  # No. of communities to list per expansion (show more)
  pageSize: 20

homePage:
  recentSubmissions:
    # The number of item showing in recent submission components
    pageSize: 5
    # Sort record of recent submission
    sortField: 'dc.date.accessioned'
  topLevelCommunityList:
    # No. of communities to list per page on the home page
    # This will always round to the nearest number from the list of page sizes. e.g. if you set it to 7 it'll use 10
    pageSize: 5
  # Enable or disable the Discover filters on the homepage
  showDiscoverFilters: false

# Item Config
item:
  edit:
    undoTimeout: 10000 # 10 seconds
  # Show the item access status label in items lists
  showAccessStatuses: false
  bitstream:
    # Number of entries in the bitstream list in the item view page.
    # Rounded to the nearest size in the list of selectable sizes on the
    # settings menu.  See pageSizeOptions in 'pagination-component-options.model.ts'.
    pageSize: 5
    # Show the bitstream access status label on the item page
    showAccessStatuses: false

# Community Page Config
community:
  # Default tab to be shown when browsing a Community. Valid values are: comcols, search, or browse_<field>
  # <field> must be any of the configured "browse by" fields, e.g., dateissued, author, title, or subject
  # When the default tab is not the 'search' tab, the search tab is moved to the last position
  defaultBrowseTab: search
  # Search tab config
  searchSection:
    showSidebar: true

# Collection Page Config
collection:
  # Default tab to be shown when browsing a Collection. Valid values are: search, or browse_<field>
  # <field> must be any of the configured "browse by" fields, e.g., dateissued, author, title, or subject
  # When the default tab is not the 'search' tab, the search tab is moved to the last position
  defaultBrowseTab: search
  # Search tab config
  searchSection:
    showSidebar: true
  edit:
    undoTimeout: 10000 # 10 seconds

# Theme Config
themes:
  # Add additional themes here. In the case where multiple themes match a route, the first one
  # in this list will get priority. It is advisable to always have a theme that matches
  # every route as the last one
  #
  # # A theme with a handle property will match the community, collection or item with the given
  # # handle, and all collections and/or items within it
  # - name: custom
  #   handle: 10673/1233
  #
  # # A theme with a regex property will match the route using a regular expression. If it
  # # matches the route for a community or collection it will also apply to all collections
  # # and/or items within it
  # - name: custom
  #   regex: collections\/e8043bc2.*
  #
  # # A theme with a uuid property will match the community, collection or item with the given
  # # ID, and all collections and/or items within it
  # - name: custom
  #   uuid: 0958c910-2037-42a9-81c7-dca80e3892b4
  #
  # # The extends property specifies an ancestor theme (by name). Whenever a themed component is not found
  # # in the current theme, its ancestor theme(s) will be checked recursively before falling back to default.
  # - name: custom-A
  #   extends: custom-B
  #   # Any of the matching properties above can be used
  #   handle: 10673/34
  #
  # - name: custom-B
  #   extends: custom
  #   handle: 10673/12
  #
  # # A theme with only a name will match every route
  # name: custom
  #
  # # This theme will use the default bootstrap styling for DSpace components
  # - name: BASE_THEME_NAME
  #
  - name: dspace
    headTags:
    - tagName: link
      attributes:
        rel: icon
        href: assets/dspace/images/favicons/favicon.ico
        sizes: any
    - tagName: link
      attributes:
        rel: icon
        href: assets/dspace/images/favicons/favicon.svg
        type: image/svg+xml
    - tagName: link
      attributes:
        rel: apple-touch-icon
        href: assets/dspace/images/favicons/apple-touch-icon.png
    - tagName: link
      attributes:
        rel: manifest
        href: assets/dspace/images/favicons/manifest.webmanifest

# The default bundles that should always be displayed as suggestions when you upload a new bundle
bundle:
  standardBundles: [ ORIGINAL, THUMBNAIL, LICENSE ]

# Whether to enable media viewer for image and/or video Bitstreams (i.e. Bitstreams whose MIME type starts with 'image' or 'video').
# For images, this enables a gallery viewer where you can zoom or page through images.
# For videos, this enables embedded video streaming
mediaViewer:
  image: false
  video: false

# Whether the end user agreement is required before users use the repository.
# If enabled, the user will be required to accept the agreement before they can use the repository.
# And whether the privacy statement/COAR notify support page should exist or not.
info:
  enableEndUserAgreement: true
  enablePrivacyStatement: true
  enableCOARNotifySupport: true
  # Whether to show the cookie consent popup and the cookie settings footer link or not.
  enableCookieConsentPopup: true

# Whether to enable Markdown (https://commonmark.org/) and MathJax (https://www.mathjax.org/)
# display in supported metadata fields. By default, only dc.description.abstract is supported.
markdown:
  enabled: false
  mathjax: false

# Which vocabularies should be used for which search filters
# and whether to show the filter in the search sidebar
# Take a look at the filter-vocabulary-config.ts file for documentation on how the options are obtained
vocabularies:
  - filter: 'subject'
    vocabulary: 'srsc'
    enabled: true

# Default collection/community sorting order at Advanced search, Create/update community and collection when there are not a query.
comcolSelectionSort:
  sortField: 'dc.title'
  sortDirection: 'ASC'

# Example of fallback collection for suggestions import
# suggestion:
  # - collectionId: 8f7df5ca-f9c2-47a4-81ec-8a6393d6e5af
    # source: "openaire"


# Search settings
search:
  # Settings to enable/disable or configure advanced search filters.
  advancedFilters:
    enabled: false
    # List of filters to enable in "Advanced Search" dropdown
    filter: [ 'title', 'author', 'subject', 'entityType' ]
  #
  # Number used to render n UI elements called loading skeletons that act as placeholders.
  # These elements indicate that some content will be loaded in their stead.
  # Since we don't know how many filters will be loaded before we receive a response from the server we use this parameter for the skeletons count.
  # e.g. If we set 5 then 5 loading skeletons will be visualized before the actual filters are retrieved.
  defaultFiltersCount: 5


# Notify metrics
# Configuration for Notify Admin Dashboard for metrics visualization
notifyMetrics:
  # Configuration for received messages
- title: 'admin-notify-dashboard.received-ldn'
  boxes:
  - color: '#B8DAFF'
    title: 'admin-notify-dashboard.NOTIFY.incoming.accepted'
    config: 'NOTIFY.incoming.accepted'
    description: 'admin-notify-dashboard.NOTIFY.incoming.accepted.description'
  - color: '#D4EDDA'
    title: 'admin-notify-dashboard.NOTIFY.incoming.processed'
    config: 'NOTIFY.incoming.processed'
    description: 'admin-notify-dashboard.NOTIFY.incoming.processed.description'
  - color: '#FDBBC7'
    title: 'admin-notify-dashboard.NOTIFY.incoming.failure'
    config: 'NOTIFY.incoming.failure'
    description: 'admin-notify-dashboard.NOTIFY.incoming.failure.description'
  - color: '#FDBBC7'
    title: 'admin-notify-dashboard.NOTIFY.incoming.untrusted'
    config: 'NOTIFY.incoming.untrusted'
    description: 'admin-notify-dashboard.NOTIFY.incoming.untrusted.description'
  - color: '#43515F'
    title: 'admin-notify-dashboard.NOTIFY.incoming.involvedItems'
    textColor: '#fff'
    config: 'NOTIFY.incoming.involvedItems'
    description: 'admin-notify-dashboard.NOTIFY.incoming.involvedItems.description'
# Configuration for outgoing messages
- title: 'admin-notify-dashboard.generated-ldn'
  boxes:
  - color: '#B8DAFF'
    title: 'admin-notify-dashboard.NOTIFY.outgoing.queued'
    config: 'NOTIFY.outgoing.queued'
    description: 'admin-notify-dashboard.NOTIFY.outgoing.queued.description'
  - color: '#FDEEBB'
    title: 'admin-notify-dashboard.NOTIFY.outgoing.queued_for_retry'
    config: 'NOTIFY.outgoing.queued_for_retry'
    description: 'admin-notify-dashboard.NOTIFY.outgoing.queued_for_retry.description'
  - color: '#FDBBC7'
    title: 'admin-notify-dashboard.NOTIFY.outgoing.failure'
    config: 'NOTIFY.outgoing.failure'
    description: 'admin-notify-dashboard.NOTIFY.outgoing.failure.description'
  - color: '#43515F'
    title: 'admin-notify-dashboard.NOTIFY.outgoing.involvedItems'
    textColor: '#fff'
    config: 'NOTIFY.outgoing.involvedItems'
    description: 'admin-notify-dashboard.NOTIFY.outgoing.involvedItems.description'
  - color: '#D4EDDA'
    title: 'admin-notify-dashboard.NOTIFY.outgoing.delivered'
    config: 'NOTIFY.outgoing.delivered'
    description: 'admin-notify-dashboard.NOTIFY.outgoing.delivered.description'

# Live Region configuration
# Live Region as defined by w3c, https://www.w3.org/TR/wai-aria-1.1/#terms:
# Live regions are perceivable regions of a web page that are typically updated as a
# result of an external event when user focus may be elsewhere.
#
# The DSpace live region is a component present at the bottom of all pages that is invisible by default, but is useful
# for screen readers. Any message pushed to the live region will be announced by the screen reader. These messages
# usually contain information about changes on the page that might not be in focus.
liveRegion:
  # The duration after which messages disappear from the live region in milliseconds
  messageTimeOutDurationMs: 30000
  # The visibility of the live region. Setting this to true is only useful for debugging purposes.
  isVisible: false

# Geospatial Map display options
geospatialMapViewer:
  # Which fields to use for parsing as geospatial points in search maps
  # (note, the item page field component allows any field(s) to be used
  # and is set as an input when declaring the component)
  spatialMetadataFields:
    - 'dcterms.spatial'
  # Which discovery configuration to use for 'geospatial search', used
  # in the browse map
  spatialFacetDiscoveryConfiguration: 'geospatial'
  # Which filter / facet name to use for faceted geospatial search
  # used in the browse map
  spatialPointFilterName: 'point'
  # Whether item page geospatial metadata should be displayed
  # (assumes they are wrapped in a test for this config in the template as
  # per the default templates supplied with DSpace for untyped-item and publication)
  enableItemPageFields: false
  # Whether the browse map should be enabled and included in the browse menu
  enableBrowseMap: false
  # Whether a 'map view' mode should be included alongside list and grid views
  # in search result pages
  enableSearchViewMode: false
  # The tile provider(s) to use for the map tiles drawn in the leaflet maps.
  # (see https://leaflet-extras.github.io/leaflet-providers/preview/) for a full list
  tileProviders:
    - 'OpenStreetMap.Mapnik'
  # Starting centre point for the map, as lat and lng coordinates. This is useful
  # to set the centre of the map when the map is first loaded and if there are no
  # points, shapes or markers to display.
  # Defaults to the centre of Istanbul
  defaultCentrePoint:
    lat: 41.015137
    lng: 28.979530

# Configuration for storing accessibility settings, used by the AccessibilitySettingsService
accessibility:
  # The duration in days after which the accessibility settings cookie expires
  cookieExpirationDuration: 7
