7422 Commits

Author SHA1 Message Date
7aa71aa734 Tracing: chore make insecure option configurable (#99236)
* Tracing: chore: make insecure option configurable

In case of insecure set to false, default system cert pool will be used to create otlpgrpc client.

* test: add tracing/insecure config checks

This is to verify whether insecure configuration is properly parsed.

* chore: update configura Grafana docs with new setting

* chore: also update comment in the ini files

---------

Co-authored-by: Matheus Macabu <macabu.matheus@gmail.com>
2025-03-27 12:37:23 -04:00
157edf92a0 Azure: Mark Azure Prometheus exemplars as GA and enable by default (#100595)
* Mark Azure Prom exemplars as GA and enable by default

* make gen-feature-toggles
2025-03-27 10:54:39 -05:00
73e0db452b Docs: Add a section to clarify how sessions are handled with SSO (#102694)
* Docs: Add a section to clarify how sessions are handled with SSO

* Add a link to SAML SLO setup
2025-03-27 16:40:57 +01:00
6c2794bf3a Docs: Update public dashboards limitations (#102999) 2025-03-27 12:40:18 -03:00
f43d39f8ad docs/adds grot guide link (#102635)
* adds grot guide link

* updates title and text

---------

Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
2025-03-27 08:54:20 -05:00
dce180acf3 LBAC for data sources: PublicPreview and self serve enablement (#102276)
* Publicpreview and self serve of lbac for mimir

* update from review
2025-03-27 15:44:29 +02:00
3a9370083f I18n: Add 13 new languages for translations (#102971)
I18n: Remove extraLanguages toggle
2025-03-27 12:58:52 +00:00
69d8419109 Plugins: Remove userStorageAPI feature toggle (#102915) 2025-03-27 13:40:00 +01:00
e216c2f29d Anonymous: Enforce org role Viewer setting (#102070)
* Anon: Remove org role setting

* remove from ini

* remove setting from documentation
2025-03-27 09:10:30 +00:00
e5ff56ae7b docs/adds shared shortcode (#102946)
* adds shared shortcode

* makes prettier
2025-03-26 16:58:47 -05:00
558773ed7f docs: add note about alert migration (#102741)
* docs: add note about alert migration

added note about alert migration in 11.6.0.

* docs: add note about alert migration

adding documentation about the migrations to the performance limitation docs

* title edit

<-- vale = NO -->
2025-03-26 15:39:32 -05:00
383e38d87b Docs: histogram visualization refactor (#102832)
* Added Config options heading and bumped other heading levels

* Restructured Histogram options and fixed tooltip options level

* Created tooltip 3 shared file and updated tooltip 1 file

* Replaced shared file in 3 visualizations

* Wording fix

* Fixed wording
2025-03-26 11:37:33 -04:00
0be91d9771 Docs: add orgId to folder/dashboard search api docs (#102898) 2025-03-26 10:15:05 -05:00
d29d8d1c7c Docs: Update service account (#102502)
update content from support request
2025-03-26 10:06:44 -04:00
c54da8f955 Alerting: Make $value return the query value in case when a single datasource is used (#102301)
What is this feature?

This PR changes the behavior of the $value and .Value variables in alerting templating to be more compatible with Prometheus templating. When a single datasource is used in the alerting rule, these variables will now return the numeric value from the query instead of the evaluation string.

Why do we need this feature?

It makes Grafana templating more compatible with Prometheus templates. In Prometheus, $value returns the numeric value of the query, but in Grafana it's the evaluation string: [ var='A' labels={instance=instance1} value=81.234 ]. This is because in Grafana multiple datasources can be used in the alert rule, and it's not always possible to get a single value.

This change makes Grafana's behavior consistent with Prometheus when a single datasource is used, and in case when multiple datasources are used in the query, it keeps the old behaviour.

Both $value and .Value are not recommended to use (documentation), and it's better to use .Values instead.
2025-03-26 10:31:38 +01:00
03d6d8f854 Table: Move library to react-data-grid (#102482)
* Changes galore

* Freedom 🗽

* Add feature flag

* Latest changes

* Basic auto cell type

* Partially working bar-gauge

* Brokenish but whatevs

* Include the toggle doc

* TableNG: Context menu (#94094)

* feat(table-ng): context menu init commit

* betterer

* feat(table-ng): re-use contextmenu component

* fix(table-ng): close context menu issue

* TableNG: Sorting columns (#94200)

feat(table-ng): sorting column

* fix feature toggle conflict

* TableNG: Sorting with custom table header (#95351)

* TableNG: Header Toggle (#95310)

* TableNG: Multi-column sorting (#95395)

feat(table-ng): multi-sorting

* TableNG: Column width options (#95426)

* feat(table-ng): column width

* mouse handle drag event

* move resizing task

* TableNG: Fix icon sorting direction (#95653)

fix(table-ng): sorting icon direction

* TableNG: Show table footer (#95313)

* TableNG: Show table footer

* Revert betterer

* Update betterer

* Incorporate reducer calculations into footer

* Update imports in FooterRow

* Use getFooterValue for summary cell render

* TableNG: Min column width (#95657)

* feat(table-ng): min column width

* feat(table-ng): set a min width constant

* TableNG: Column alignment (#95679)

* feat(table-ng): column alignment

* cleaning

* feat(table-ng): header cell alignment

* optimizations

* feat(table-ng): footer cell alignment

* calc counter

* TableNG: use compiled fn for columns -> records conversion (#95914)

* use compiled fn for columns -> records conversion

* TableNG: Move key rev and fix width overrides (#95921)

* meh

* add index to records

---------

Co-authored-by: Drew Slobodnjak <60050885+drew08t@users.noreply.github.com>

* TableNG: Sparkline Cell Parity (#95690)

* sparkline value

* todo

* Remove unsued shallowField

* Pass justifyContent to sparkline

---------

Co-authored-by: drew08t <drew08@gmail.com>

* TableNG: BarGauge cell updates (#95521)

* fix bargauge cell

* merge and fix props

* cleanup imports

* TableNG: Text wrapping (#96041)

* feat(table-ng): fix long text cell width

* feat(table-ng): fix long text cell width 2

* comment out column rowHeight

* fix long text column width

* fix types

* fix types

* naming

* Check current header cell ref is defined for key

* cleaning

* make table re-render when data changed

* eslint

---------

Co-authored-by: drew08t <drew08@gmail.com>

* TableNG: Text overflow (#96641)

* feat(table-ng): text overflow

* cleaning

* TableNG: Fix footer for count (#96802)

* TableNG: Table column filter (#96767)

* feat(table-ng): add filter form

---------

Co-authored-by: drew08t <drew08@gmail.com>
Co-authored-by: Leon Sorokin <leeoniya@gmail.com>

* TableNG: On column resize trigger (#97004)

chore(table-ng): trigger on resize on text wrap only

* TableNG: Improve sort performance (#97767)

* TableNG: Improve sort performance

* clean a bit

* a bit more

* Remove const that was breaking sort

---------

Co-authored-by: Leon Sorokin <leeoniya@gmail.com>

* TableNG: Fix sorting (#98141)

fix(table-ng): sorting

* TableNG: fix multi sorting (#98668)

fix(table-ng): multi sorting

* TableNG: Column re-size handler (#98901)

* feat(table-ng): column re-size handler

* TableNG: Fix footer calcs with no reducer (#99347)

* TableNG: Update renderHeaderCell with filter dep (#99483)

* TableNG: Updated styles for demo (#99530)

* style proposal: table ng

* chore: revert gauge cell custom stuff

* TableNG: Cross-filter (#99459)

* feat(table-ng): cross-filter

* fix filter update issue

* fix filter reset issue

* Fix spacebar for filter input

---------

Co-authored-by: drew08t <drew08@gmail.com>

* TableNG: Filter perfomance optimization (#99620)

fix(table-ng): filter performance optimization

* TableNG: Refine styling closer to original table (#99625)

* TableNG: Support groupToNestedTableTransform (#97134)

* TableNG: Support groupToNestedTableTransform

* Fix merge issues

* Force refresh for now

* Remove log

* Fix some conflicts

* Fix more conflicts

* Help avoid clash with compiled frameToRecords keys

* Make subtable height unconstrained

* Support show field names in nested tables toggle

* TableNG: Fix footer + some other misc updates (#99846)

fix: footer fixes huzzah

* TableNG: Styling - Update styling for cells (#99851)

* fix(table-ng): bargauge inner width issue

* TableNG: Move header cell component (#99844)

* fix(table-ng): move header cell into separate file

* Fix sub table

---------

Co-authored-by: drew08t <drew08@gmail.com>

* TableNG: Auto cell feature parity (#100095)

* feat(table-ng): auto cell feature parity

* TableNG: JSON cell implementation + hover fixes (#100152)

* feat: tableNG json cell + auto fixes

* chore: add comment

* add justify content to json cell

---------

Co-authored-by: Ihor Yeromin <yeryomin.igor@gmail.com>

* TableNG: Fix cell hover issue (#100207)

* fix(table-ng): cell hover issue

* better commenting

* TableNG: Text color cell (#100120)

feat(table-ng): text color cell feature parity

* TableNG: Image cell implementation (#100132)

* feat: tableNG image cell

* fix: incorporate justify-content correctly

* chore: pass down cell options from fieldConfig

---------

Co-authored-by: Ihor Yeromin <yeryomin.igor@gmail.com>

* TableNG: Cell height performance improvement (#100544)

* chore: perf improvement

* chore: minor fix

* Update packages/grafana-ui/src/components/Table/TableNG/TableNG.tsx

Co-authored-by: Leon Sorokin <leeoniya@gmail.com>

* chore: fix betterer

---------

Co-authored-by: Leon Sorokin <leeoniya@gmail.com>

* TableNG: Add pagination (#100165)

* TableNG: Add pagination

* TableNG: Get collapsed icon state correct + update `rowHeight` (#100556)

* fix: get collapsed icon state correct + update condition for calculating row height

* chore: some cleanup!

* chore: naming to avoid confusion with local state name

* TableNG: Add support for `DataLinksCell` (#100459)

* TableNG: Improve sub table styling (#100772)

* Move files temporarily to fix conflicts

* Fix feature flag conflicts

* Move files back to cell dir

* TableNG: Update inner height of bar gauge cell (#100996)

* fix: change inner height of bar gauge cell

* chore: move function to utils, cleanup

* Remove testing line

* TableNG: Add bottom border to column headers + fix footer styling (#101016)

* feat: add bottom border to column headers for table parity

* feat: summary row style fix

* chore: remove redundant style

---------

Co-authored-by: drew08t <drew08@gmail.com>

* TableNG: Add support for `ActionsCell` (#101024)

* TableNG: Cell hover styles + header resize handler indicator (#100770)

* fix: tableNG styles

* chore: clean up comments

* chore: remove column header stuffz for now

* fix: refactor to transform/translate + resize handler hover styling

* chore: re-think approach - change a lot of things

* chore: most recent iteration

* chore: wait i like this better

* chore: hoist into colors function + clean it up!

* moar better

* chore: define constants for clarity

* chore: calculate rbga to rgb values given background color

---------

Co-authored-by: drew08t <drew08@gmail.com>

* TableNG: Fix scoll hover jumpy behavior (#101085)

* fix(table-ng): hover scroll jumping

* Account for panel padding during pagination

---------

Co-authored-by: Drew Slobodnjak <60050885+drew08t@users.noreply.github.com>
Co-authored-by: drew08t <drew08@gmail.com>

* TableNG: Fix imports (#101059)

* fix(table-ng): clean imports

Co-authored-by: Drew Slobodnjak <60050885+drew08t@users.noreply.github.com>

* TableNG: Sorted rows dependent upon filtered rows (#100985)

TableNG: Improve multi-sort performance

* TableNG: Fix sparkline width (#101164)

fix(table-ng): sparkline width

* TableNG: Type TableNG (#101257)

* feat: type tableNG

* chore: push betterer

* chore: fix linter + why can't I have inline if statements... GRR!

* fix: linter - props name got changed at some point...

* feedback: data links prop consistency + json cell robustness

* chore: remove unused rowIndex prop

---------

Co-authored-by: drew08t <drew08@gmail.com>

* TableNG: Add support for datalinks (#100769)

Co-authored-by: drew08t <drew08@gmail.com>

* Chore: Remove unused import (#102064)

remove unused import

* Update betterer

* BarGauge: Remove z-index (#102220)

fix(bargauge): remove z-index

* TableNG: Refactor + testing (#102045)

* feat: type tableNG

* chore: push betterer

* chore: fix linter + why can't I have inline if statements... GRR!

* fix: linter - props name got changed at some point...

* feedback: data links prop consistency + json cell robustness

* feat: refactor + tests

* chore: fix import lint errors

* betterer

* chore: fix image cell

* chore: revert width function

* add test

* betterer

* chore: fix sorting + add tests

* chore: pr feedback

---------

Co-authored-by: Ihor Yeromin <yeryomin.igor@gmail.com>
Co-authored-by: drew08t <drew08@gmail.com>

* TableNG: Fix table suggestion (#102497)

fix: defensively guard against missing cellOptions

* TableNG: Footer fields calc fix (#102487)

* fix: respect footer fields calc selection

* chore: add test

* TableNG: Image cell hover fix (#102489)

fix: image cell hover

* TableNG: Persist scrollbars during re render (#102559)

* TableNG: Persist scrollbars during re render

* Update improved betterer

* TableNG: Fix column width override (#102474)

* fix(table): column width override

* TableNG: Add support for crosshair share (#102410)

* TableNG: Add support for crosshair share

* Add tests

* TableNG: Fix table ng tests (#102645)

fix: cellType causing tests to fail

* Remove empty file

* TableNG: Update util tests (#102646)

* TableNG: Add column type icon (#102686)

* chore(table-ng): add column type icon

* chore(table-ng): clean styling

* Use core internationalization outside grafana ui

* Import popover directly

* Add count to grafana-ui locales

* TableNG: Change feature flag to tableNextGen (#102814)

Change feature flag to tableNextGen

* TableNG: Add row colors (#102706)

* chore(table-ng): add row colors

* clean up

* fix params

* fix(table-ng): cell color background indexing

---------

Co-authored-by: Kyle Cunningham <kyle@codeincarnate.com>
Co-authored-by: Ihor Yeromin <yeryomin.igor@gmail.com>
Co-authored-by: Adela Almasan <adela.almasan@grafana.com>
Co-authored-by: Leon Sorokin <leeoniya@gmail.com>
Co-authored-by: Adela Almasan <88068998+adela-almasan@users.noreply.github.com>
Co-authored-by: Alex Spencer <52186778+alexjonspencer1@users.noreply.github.com>
2025-03-25 20:57:57 -07:00
4dccc03fa2 Docs: updating admonition shortcodes in plugin management (#102817) 2025-03-25 13:37:26 -05:00
13058d2715 Docs: bar gauge visualization refactor (#102747)
* Added Config options heading and bumped heading levels

* Added empty Text size options section and updated Value options

* Updated bar gauge section

* Added missing options and removed screenshot

* Fixed Bar gauge options

* Added descriptions for Text size section

* Added links to text size section

* Fixed text size section
2025-03-25 12:15:15 -04:00
1e4555c79b K8s: Folders: fix error conversion (#102737) 2025-03-24 19:59:26 +02:00
c76a681a43 Dashboards: Prevent version restore to same data (#102665) 2025-03-24 10:48:46 -05:00
b0fda33d06 Docs: What's new & Upgrade guide v11.6 (#101479)
* Docs: What's new & Upgrade guide v11.6

* Adding alerting entries

* adding new entries

* updating entries and initial text from website PR

* Reorder changelog entries

* adjusting front matter spacing for product labels

* adding missing space

---------

Co-authored-by: Mitch Seaman <mjseaman@users.noreply.github.com>
Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
2025-03-24 08:58:32 -05:00
d25dba8d0a Alerting docs: additional details for No Data and Error alerts (#102593)
* Alerting docs: additional details for `No Data` and `Error` alerts

* add Error in the list of possible values

---------

Co-authored-by: Sonia Aguilar <33540275+soniaAguilarPeiron@users.noreply.github.com>
2025-03-24 10:43:01 +01:00
dfe2af9559 Tempo: Remove aggregate by (#98474)
* Remove aggregate by

* Update betterer

* Run toggles test

* Add back group by in schema so it can be checked for

* Show error if group by

* Update error message

* Allow user to remove the group by from the query

* Fix assertion

---------

Co-authored-by: Piotr Jamróz <pm.jamroz@gmail.com>
2025-03-24 09:17:32 +00:00
bb8392c9a1 Transformations: Correct documentation around prepare time series (#102553)
* Correct documentation around prepare time series

* Update public/app/features/transformers/docs/content.ts

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>

---------

Co-authored-by: Isabel Matwawana <76437239+imatwawana@users.noreply.github.com>
2025-03-22 14:25:12 -05:00
e2b84ff828 alerting docs: add note about alert rule versions limit (#102647)
added note about alert rule versions limit
2025-03-21 14:40:58 -05:00
7d435e5d84 Docs: Cleaning up configure security hardening docs (#102567)
* Docs: Cleaning up configure security hardening docs

* Adjusting layout
2025-03-21 11:16:10 -05:00
8af271187c Docs: Remove references to group sync (#102599)
* remove references to group sync

* remove relfref and add new link

* remove relfref

* Update relfref

* remove relrefs and add admonitions

* fix URL

* remove relrefs

* replace relrefs

* replace relrefs

* replace relrefs

* replace relrefs

* replace relrefs

* replace relrefs

* replace relrefs

* replace relrefs

* run prettier

---------

Co-authored-by: Irene Rodríguez <irene.rodriguez@grafana.com>
2025-03-21 16:13:44 +00:00
874751d9da Docs: AzureAD + SAML improvements (#102623)
* Docs: AzureAD + SAML improvements

* Fix
2025-03-21 17:00:12 +01:00
77c5e0eeb2 Docs: Update RBAC role modification for cloud user (#102412)
added content from support ticket
2025-03-21 10:32:49 -04:00
aeca9a80a4 JWT: Add org role mapping support to the JWT provider (#101584)
* add org role mapping to the jwt provider

* Fix indentation for OrgMapping assignment

* add-test

* fix linting

* add org_attribute_path

* fix test

* update doc

* update doc

* Update pkg/services/authn/clients/jwt.go

* Update docs

---------

Co-authored-by: Mihaly Gyongyosi <mgyongyosi@users.noreply.github.com>
2025-03-21 14:18:53 +01:00
Jo
d7fe097630 Docs: Add documentation on the cloud access policy permissions (#102550)
* add admonition

* add to menu

* add missing entry

* make it prettier

* fix ref
2025-03-21 10:07:52 +01:00
a5665c06cf docs: Span details includes events and links (#102520)
* docs: Span details includes events and links

Adds to the explore trace integration information about trace span
events and links, which are also available in the trace view.

Signed-off-by: Alex Bikfalvi <alex.bikfalvi@grafana.com>

* Update trace-integration.md

* Apply suggestions from code review

* Fix prettier issues

Signed-off-by: Alex Bikfalvi <alex.bikfalvi@grafana.com>

---------

Signed-off-by: Alex Bikfalvi <alex.bikfalvi@grafana.com>
Co-authored-by: Kim Nylander <104772500+knylander-grafana@users.noreply.github.com>
2025-03-20 19:14:57 -04:00
c33a53a47a K8s: Remove restore functionality; can be done with list (#102560) 2025-03-20 16:38:32 -05:00
Jo
7411472f52 Docs: Make role definitions more precise (#102391)
* fix missing clarification

* remove OnCall admonitions
2025-03-20 16:12:29 +01:00
1e0d7102cc Docs: Add auth for metrics to hardening page (#102475) 2025-03-20 14:22:54 +01:00
d9ca794b30 Docs: Update service account doc (#102498)
added content from support ticket
2025-03-20 11:37:45 +01:00
5b67ae1876 Plugins: Remove support for secrets manager plugins (#101467)
* remove secrets manager code

* remove unused struct

* add test toggles back

* rollback golden file changes

* add missing TestMain

* update betterer
2025-03-20 10:00:59 +00:00
7b8e5467bb Docs: Fix Incorrect LBAC Data Source Reference (#102509) 2025-03-20 08:51:56 +00:00
27245622a9 Docs: Edit Google Cloud Monitoring data source (#102411)
* changed content organization and created before you begin section

* Update docs/sources/datasources/google-cloud-monitoring/_index.md

Co-authored-by: Larissa Wandzura <126723338+lwandz13@users.noreply.github.com>

---------

Co-authored-by: Larissa Wandzura <126723338+lwandz13@users.noreply.github.com>
2025-03-19 17:27:42 -04:00
a132b12daf Docs: fix typo in cloud link (#102488)
Fixed link typo
2025-03-19 15:41:51 -04:00
a29e49f472 Chore: Promoting frontendSandboxMonitorOnly to private preview (#102213)
* Since pluginsFrontendSandbox is private preview we can make frontendSandboxMonitorOnly also private preview

* Running toggle generation command
2025-03-19 20:07:26 +02:00
5f0faf2dd6 Chore: Promoting feature toggle pluginsSriChecks GA (#102212)
* Making pluginsSriChecks GA

* make it disabled by default
2025-03-19 19:45:04 +02:00
ac4b2a3200 SecretsManager: Add feature toggle (#102420)
Co-authored-by: Dana Axinte <53751979+dana-axinte@users.noreply.github.com>
2025-03-19 10:25:14 +01:00
671ba2ab02 docs: create documentation for jira service management contact point (#100444)
* docs: create documentation for jira service management contact point

create documentation page for jira service management

* Update configure-jira-service-management.md

updates thanks to yuri and some subsequent edits

* minor edits, weight

minor edits, weight

* links and tables

links and references to jira added on other pages, bullets turned into a table.

* edits

* Update configure-jira.md

link fix

* Update docs/sources/alerting/configure-notifications/manage-contact-points/integrations/configure-jira.md

Co-authored-by: Pepe Cano <825430+ppcano@users.noreply.github.com>

* Update docs/sources/alerting/configure-notifications/manage-contact-points/integrations/configure-jira.md

Co-authored-by: Pepe Cano <825430+ppcano@users.noreply.github.com>

* Update docs/sources/alerting/configure-notifications/manage-contact-points/integrations/configure-jira.md

Co-authored-by: Pepe Cano <825430+ppcano@users.noreply.github.com>

* Update docs/sources/alerting/configure-notifications/manage-contact-points/integrations/configure-jira.md

Co-authored-by: Pepe Cano <825430+ppcano@users.noreply.github.com>

* Update docs/sources/alerting/configure-notifications/manage-contact-points/integrations/configure-jira.md

Co-authored-by: Pepe Cano <825430+ppcano@users.noreply.github.com>

* Update docs/sources/alerting/configure-notifications/manage-contact-points/integrations/configure-jira.md

Co-authored-by: Pepe Cano <825430+ppcano@users.noreply.github.com>

* Update docs/sources/alerting/configure-notifications/manage-contact-points/integrations/configure-jira.md

Co-authored-by: Pepe Cano <825430+ppcano@users.noreply.github.com>

* Update docs/sources/alerting/configure-notifications/manage-contact-points/integrations/configure-jira.md

Co-authored-by: Pepe Cano <825430+ppcano@users.noreply.github.com>

* pretty, prettier, prettiest

* Update docs/sources/alerting/configure-notifications/manage-contact-points/integrations/configure-jira.md

Co-authored-by: Pepe Cano <825430+ppcano@users.noreply.github.com>

* Update configure-jira.md

prettier

---------

Co-authored-by: Pepe Cano <825430+ppcano@users.noreply.github.com>
2025-03-18 15:33:24 -05:00
c5b48285b6 Update roles and permissions doc to include support note (#102327)
add content from support request
2025-03-18 08:30:24 -04:00
b649c8fcd0 Update User API doc to include Cloud info/link (#102330)
* added content per support ticket

* clarified sentece
2025-03-18 08:29:06 -04:00
afb058c40a Fix URL rendering typo (#102346)
* Fix URL rendering typo

* run prettier

---------

Co-authored-by: Irene Rodriguez <irene.rodriguez@grafana.com>
2025-03-18 11:42:25 +01:00
07024c9bac Prometheus: Enable prometheusRunQueriesInParallel feature toggle by default (#102127)
enable prometheusRunQueriesInParallel by default
2025-03-17 22:13:59 +01:00
f2518a2c45 Chore: Promote pluginsDetailsRightPanel to private preview (#102211)
promote FeatureStagePrivatePreview to private preview
2025-03-17 10:49:51 +01:00
0961de396e docs>getting-started>prometheus (#102182)
* docs>getting-started>prometheus

* get started page highlight

* spelling

* formatting

* drilldown instead of explore

* node_exporter spelling bypass

* spelling bypass

* metrics support

* typo

* all pretty, no pity

* applied suggestions

* all pretty, no pity2
2025-03-14 21:57:01 +01:00