@italia/radio 0.1.0-alpha.2 → 1.0.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -131,16 +131,6 @@
131
131
  },
132
132
  "privacy": "private"
133
133
  },
134
- {
135
- "kind": "field",
136
- "name": "_validationTriggered",
137
- "type": {
138
- "text": "boolean"
139
- },
140
- "privacy": "private",
141
- "default": "false",
142
- "description": "Track if validation has been triggered (via reportValidity or setCustomValidity)\nARIA best practice: don't show aria-invalid until user attempts submission"
143
- },
144
134
  {
145
135
  "kind": "field",
146
136
  "name": "rovingTabindex",
@@ -299,7 +289,7 @@
299
289
  ],
300
290
  "events": [
301
291
  {
302
- "name": "change",
292
+ "name": "it-change",
303
293
  "type": {
304
294
  "text": "Event"
305
295
  }
@@ -674,7 +664,7 @@
674
664
  {
675
665
  "kind": "variable",
676
666
  "name": "meta",
677
- "default": "{ title: 'Componenti/Form/Radio', tags: ['autodocs'], component: 'it-radio-group', args: { id: '', name: 'gruppo1', // @ts-ignore these are docs disabled: false, supportText: '', grouped: false, inline: false, form: '', customValidation: false, validityMessage: '', required: false, }, argTypes: { id: { control: 'text', description: 'ID del campo', }, name: { control: 'text', description: 'Nome del campo. I radio dello stesso gruppo devono avere lo stesso name.', }, grouped: { control: 'boolean', type: 'boolean', description: 'Se il radio-group deve avere i suoi elementi raggruppati visivamente', table: { defaultValue: { summary: 'false' } }, }, // @ts-ignore these are docs disabled: { control: 'boolean', type: 'boolean', description: \"Se il gruppo di radio è disabilitato. Per l'omonimo attributo del componente it-radio, vedi la sezione dedicata\", table: { defaultValue: { summary: 'false' } }, }, inline: { control: 'boolean', type: 'boolean', description: 'Se il radio-group deve avere i suoi elementi visualizzati in linea', table: { defaultValue: { summary: 'false' } }, }, supportText: { name: 'support-text', control: 'text', description: 'Testo di supporto per un singolo componente it-radio', }, form: { control: 'text', description: \"ID html del form a cui è associato il componente it-radio-group, se non si trova all'interno di una form \", }, customValidation: { name: 'custom-validation', control: 'boolean', type: 'boolean', table: { defaultValue: { summary: 'false' } }, description: 'Se la validazione del radio group è fatta esternamente (lato server o con plugin js - validazione custom), impostare questo attributo a `true`.', }, validityMessage: { name: 'validity-message', control: 'text', description: \"Messaggio da mostrare quando il radio group è invalido nel caso di validazione esterna (validazione custom). Se impostato a '' (stringa vuota) il campo viene considerato valido.\", }, required: { control: 'boolean', type: 'boolean', description: 'Se il radio group è obbligatorio', table: { defaultValue: { summary: 'false' } }, }, }, parameters: { docs: { description: { component: ` <Description>Radio button accessibili e personalizzabili.</Description> Il componente \\`<it-radio-group>\\` permette di raggruppare una serie di \\`<it-radio>\\`, gestendo la selezione di un solo elemento alla volta.\\n Ogni \\`<it-radio>\\` all'interno del gruppo deve avere un valore unico nell'attributo \\`value\\`. <div class=\"callout callout-success\"><div class=\"callout-inner\"><div class=\"callout-title\"><span class=\"text\">Accessibilità</span></div> <p> Il componente implementa completamente le specifiche ARIA per i gruppi di radio button: \\`<it-radio-group>\\` gestisce automaticamente gli attributi \\`role=\"radiogroup\"\\` e \\`aria-labelledby\\`, mentre ogni \\`<it-radio>\\` riceve gli attributi \\`role=\"radio\"\\`, \\`aria-checked\\` e \\`aria-disabled\\` in base al proprio stato.</p> <p> A causa delle limitazioni architetturali dei Web Components e del Shadow DOM, non è possibile utilizzare il meccanismo nativo HTML basato su \\`<fieldset>\\` e \\`<legend>\\`. Questo approccio, pur essendo standard, presenta notevoli problematiche di compatibilità cross-browser con gli screen reader: test approfonditi hanno dimostrato comportamenti inconsistenti tra diverse combinazioni di browser, sistemi operativi e tecnologie assistive. In alcuni casi la \\`<legend>\\` non viene annunciata, in altri il gruppo non viene riconosciuto come tale, mentre in altri ancora mancano informazioni sulla posizione delle opzioni all'interno del gruppo. Per superare queste limitazioni e garantire un'esperienza uniforme e accessibile su tutte le piattaforme, il componente richiede che la label del gruppo venga fornita tramite lo slot \\`label\\`, assicurando così la corretta associazione semantica anche all'interno dello Shadow DOM.</p> <p>L'implementazione si conforma al pattern \"Radio Group\" definito nelle [WAI-ARIA Authoring Practices](https://www.w3.org/WAI/ARIA/apg/patterns/radio/examples/radio/), adottando la gestione della tastiera e degli stati prevista dalle linee guida di accessibilità. Questo approccio garantisce che le tecnologie assistive, in particolare gli screen reader, comunichino correttamente la posizione di ogni opzione nel gruppo (es. \"1 di 3\", \"2 di 3\", \"3 di 3\"), migliorando significativamente l'esperienza utente per le persone con disabilità. </p></div></div> `, }, }, }, } satisfies Meta<RadioProps>"
667
+ "default": "{ title: 'Componenti/Form/Radio', tags: ['autodocs', 'beta', 'a11y-ok', 'web-component'], component: 'it-radio-group', args: { id: '', name: 'gruppo1', // @ts-ignore these are docs disabled: false, supportText: '', grouped: false, inline: false, form: '', customValidation: false, validityMessage: '', required: false, }, argTypes: { id: { control: 'text', description: 'ID del campo', }, name: { control: 'text', description: 'Nome del campo. I radio dello stesso gruppo devono avere lo stesso name.', }, grouped: { control: 'boolean', type: 'boolean', description: 'Se il radio-group deve avere i suoi elementi raggruppati visivamente', table: { defaultValue: { summary: 'false' } }, }, // @ts-ignore these are docs disabled: { control: 'boolean', type: 'boolean', description: \"Se il gruppo di radio è disabilitato. Per l'omonimo attributo del componente it-radio, vedi la sezione dedicata\", table: { defaultValue: { summary: 'false' } }, }, inline: { control: 'boolean', type: 'boolean', description: 'Se il radio-group deve avere i suoi elementi visualizzati in linea', table: { defaultValue: { summary: 'false' } }, }, supportText: { name: 'support-text', control: 'text', description: 'Testo di supporto per un singolo componente it-radio', }, form: { control: 'text', description: \"ID html del form a cui è associato il componente it-radio-group, se non si trova all'interno di una form \", }, customValidation: { name: 'custom-validation', control: 'boolean', type: 'boolean', table: { defaultValue: { summary: 'false' } }, description: 'Se la validazione del radio group è fatta esternamente (lato server o con plugin js - validazione custom), impostare questo attributo a `true`.', }, validityMessage: { name: 'validity-message', control: 'text', description: \"Messaggio da mostrare quando il radio group è invalido nel caso di validazione esterna (validazione custom). Se impostato a '' (stringa vuota) il campo viene considerato valido.\", }, required: { control: 'boolean', type: 'boolean', description: 'Se il radio group è obbligatorio', table: { defaultValue: { summary: 'false' } }, }, }, parameters: { docs: { description: { component: ` <Description>Radio button accessibili e personalizzabili.</Description> Il componente \\`<it-radio-group>\\` permette di raggruppare una serie di \\`<it-radio>\\`, gestendo la selezione di un solo elemento alla volta.\\n Ogni \\`<it-radio>\\` all'interno del gruppo deve avere un valore unico nell'attributo \\`value\\`. <div class=\"callout callout-success\"><div class=\"callout-inner\"><div class=\"callout-title\"><span class=\"text\">Accessibilità</span></div> <p> Il componente implementa completamente le specifiche ARIA per i gruppi di radio button: \\`<it-radio-group>\\` gestisce automaticamente gli attributi \\`role=\"radiogroup\"\\` e \\`aria-labelledby\\`, mentre ogni \\`<it-radio>\\` riceve gli attributi \\`role=\"radio\"\\`, \\`aria-checked\\` e \\`aria-disabled\\` in base al proprio stato.</p> <p> A causa delle limitazioni architetturali dei Web Components e del Shadow DOM, non è possibile utilizzare il meccanismo nativo HTML basato su \\`<fieldset>\\` e \\`<legend>\\`. Questo approccio, pur essendo standard, presenta notevoli problematiche di compatibilità cross-browser con gli screen reader: test approfonditi hanno dimostrato comportamenti inconsistenti tra diverse combinazioni di browser, sistemi operativi e tecnologie assistive. In alcuni casi la \\`<legend>\\` non viene annunciata, in altri il gruppo non viene riconosciuto come tale, mentre in altri ancora mancano informazioni sulla posizione delle opzioni all'interno del gruppo. Per superare queste limitazioni e garantire un'esperienza uniforme e accessibile su tutte le piattaforme, il componente richiede che l'etichetta del gruppo venga fornita tramite lo slot \\`label\\`, assicurando così la corretta associazione semantica anche all'interno dello Shadow DOM.</p> <p>L'implementazione si conforma al pattern \"Radio Group\" definito nelle [WAI-ARIA Authoring Practices](https://www.w3.org/WAI/ARIA/apg/patterns/radio/examples/radio/), adottando la gestione della tastiera e degli stati prevista dalle linee guida di accessibilità. Questo approccio garantisce che le tecnologie assistive, in particolare gli screen reader, comunichino correttamente la posizione di ogni opzione nel gruppo (es. \"1 di 3\", \"2 di 3\", \"3 di 3\"), migliorando significativamente l'esperienza utente per le persone con disabilità. </p></div></div> `, }, }, }, } satisfies Meta<RadioProps>"
678
668
  },
679
669
  {
680
670
  "kind": "variable",
@@ -690,7 +680,7 @@
690
680
  "type": {
691
681
  "text": "Story"
692
682
  },
693
- "default": "{ name: 'Personalizzazione degli stili', tags: ['!dev'], parameters: { viewMode: 'docs', docs: { canvas: { hidden: true, sourceState: 'none' }, description: { story: ` Per la personalizzazione degli stili del componente \\`<it-radio>\\` si può usare il selettore \\`::part\\` con i seguenti valori: | Part | Descrizione | |------|-------------| | \\`input\\` | Il contenitore dell'input nascosto | | \\`button\\` | Il cerchio del radio button visibile | | \\`input-wrapper\\` | Il wrapper principale che contiene il radio control e il testo di supporto | | \\`radio-control\\` | Il contenitore che racchiude il button e la label | | \\`label\\` | La label del radio button | [Vedi qui la guida dettagliata](/docs/personalizzazione-degli-stili--documentazione#selettore-part). Esempio di personalizzazione: \\`\\`\\`css it-radio::part(button) { border-color: #0066cc; } it-radio::part(label) { font-weight: bold; color: #333; } \\`\\`\\` `, }, }, }, render: () => html`<div class=\"hide-preview\"></div>`, }"
683
+ "default": "{ name: 'Personalizzazione degli stili', tags: ['!dev'], parameters: { viewMode: 'docs', docs: { canvas: { hidden: true, sourceState: 'none' }, description: { story: ` Per la personalizzazione degli stili del componente \\`<it-radio>\\` si può usare il selettore \\`::part\\` con i seguenti valori: | Part | Descrizione | |------|-------------| | \\`input\\` | Il contenitore dell'input nascosto | | \\`button\\` | Il cerchio del radio button visibile | | \\`input-wrapper\\` | Il wrapper principale che contiene il radio control e il testo di supporto | | \\`radio-control\\` | Il contenitore che racchiude il button e la label | | \\`label\\` | L'etichetta del radio button | [Vedi qui la guida dettagliata](/docs/personalizzazione-degli-stili--documentazione#selettore-part). Esempio di personalizzazione: \\`\\`\\`css it-radio::part(button) { border-color: #0066cc; } it-radio::part(label) { font-weight: bold; color: #333; } \\`\\`\\` `, }, }, }, render: () => html`<div class=\"hide-preview\"></div>`, }"
694
684
  },
695
685
  {
696
686
  "kind": "variable",
@@ -698,7 +688,7 @@
698
688
  "type": {
699
689
  "text": "Story"
700
690
  },
701
- "default": "{ ...meta, name: 'Utilizzo', tags: ['!dev'], parameters: { viewMode: 'docs', docs: { canvas: { hidden: true, sourceState: 'none' }, description: { story: ` Il componente \\`<it-radio>\\` deve essere sempre utilizzato all'interno di un \\`<it-radio-group>\\` e richiede obbligatoriamente: - Un **attributo \\`value\\`** univoco per identificare l'opzione - Una **label definita tramite slot** \\`<span slot=\"label\">Testo della label</span>\\` #### Proprietà principali | Proprietà | Tipo | Descrizione | |-----------|------|-------------| | \\`value\\` | \\`string\\` | Valore univoco del radio button (obbligatorio) | | \\`disabled\\` | \\`boolean\\` | Se \\`true\\`, disabilita il singolo radio button | | \\`support-text\\` | \\`string\\` | Testo di supporto visualizzato sotto la label (obbligatorio) | `, }, }, }, render: () => html`<div class=\"hide-preview\"></div>`, }"
691
+ "default": "{ ...meta, name: 'Utilizzo', tags: ['!dev'], parameters: { viewMode: 'docs', docs: { canvas: { hidden: true, sourceState: 'none' }, description: { story: ` Il componente \\`<it-radio>\\` deve essere sempre utilizzato all'interno di un \\`<it-radio-group>\\` e richiede obbligatoriamente: - Un **attributo \\`value\\`** univoco per identificare l'opzione - Una **etichetta definita tramite slot** \\`<span slot=\"label\">Testo dell'etichetta</span>\\` #### Proprietà principali | Proprietà | Tipo | Descrizione | |-----------|------|-------------| | \\`value\\` | \\`string\\` | Valore univoco del radio button (obbligatorio) | | \\`disabled\\` | \\`boolean\\` | Se \\`true\\`, disabilita il singolo radio button | | \\`support-text\\` | \\`string\\` | Testo di supporto visualizzato sotto l'etichetta (obbligatorio) | `, }, }, }, render: () => html`<div class=\"hide-preview\"></div>`, }"
702
692
  },
703
693
  {
704
694
  "kind": "variable",
@@ -706,7 +696,7 @@
706
696
  "type": {
707
697
  "text": "Story"
708
698
  },
709
- "default": "{ ...meta, name: 'Definizione della Label', parameters: { docs: { description: { story: ` Sia \\`<it-radio-group>\\` che \\`<it-radio>\\` espongono uno slot \\`label\\` per definire le rispettive etichette. La label del gruppo \\`<it-radio-group>\\` viene definita tramite lo slot \\`label\\` dell'elemento \\`<it-radio-group>\\` e identifica l'intero gruppo di radio button. È possibile utilizzare HTML all'interno dello slot per creare label formattate. Ogni \\`<it-radio>\\` richiede obbligatoriamente una label definita tramite il proprio slot \\`label\\`. La label identifica la singola opzione all'interno del gruppo. È possibile utilizzare anche HTML all'interno dello slot per creare label più complesse con formattazione o altri elementi. `, }, }, }, render: (params) => html` <it-radio-group name=\"gruppo-label\"> <span slot=\"label\">Gruppo con label formattate</span> ${renderComponent({ ...params, id: 'radio-label1', label: 'Label semplice', value: 'opzione1', })} <it-radio id=\"radio-label2\" value=\"opzione2\"> <span slot=\"label\"><strong>Label</strong> con <em>formattazione</em></span> </it-radio> <it-radio id=\"radio-label3\" value=\"opzione3\"> <span slot=\"label\">Label semplice</span> </it-radio> </it-radio-group> `, }"
699
+ "default": "{ ...meta, name: \"Definizione dell'etichetta\", parameters: { docs: { description: { story: ` Sia \\`<it-radio-group>\\` che \\`<it-radio>\\` espongono uno slot \\`label\\` per definire le rispettive etichette. L'etichetta del gruppo \\`<it-radio-group>\\` viene definita tramite lo slot \\`label\\` dell'elemento \\`<it-radio-group>\\` e identifica l'intero gruppo di radio button. È possibile utilizzare HTML all'interno dello slot per creare etichette formattate. Ogni \\`<it-radio>\\` richiede obbligatoriamente un'etichetta definita tramite il proprio slot \\`label\\`. L'etichetta identifica la singola opzione all'interno del gruppo. È possibile utilizzare anche HTML all'interno dello slot per creare etichette più complesse con formattazione o altri elementi. `, }, }, }, render: (params) => html` <it-radio-group name=\"gruppo-label\"> <span slot=\"label\">Gruppo con label formattate</span> ${renderComponent({ ...params, id: 'radio-label1', label: 'Etichetta semplice', value: 'opzione1', })} <it-radio id=\"radio-label2\" value=\"opzione2\"> <span slot=\"label\"><strong>Etichetta</strong> con <em>formattazione</em></span> </it-radio> <it-radio id=\"radio-label3\" value=\"opzione3\"> <span slot=\"label\">Etichetta semplice</span> </it-radio> </it-radio-group> `, }"
710
700
  },
711
701
  {
712
702
  "kind": "variable",
@@ -730,7 +720,7 @@
730
720
  "type": {
731
721
  "text": "Story"
732
722
  },
733
- "default": "{ ...meta, name: 'Radio disabilitati', parameters: { docs: { description: { story: ` #### Radio singolo disabilitato Aggiungi l'attributo \\`disabled\\` ad un singolo \\`<it-radio>\\` per disabilitare quell'opzione. #### Gruppo intero disabilitato Se invece intendi disabilitare l'intero gruppo, aggiungi l'attributo \\`disabled\\` a \\`<it-radio-group>\\`. In questo modo tutti i radio al suo interno risulteranno disabilitati automaticamente. `, }, }, }, render: (params) => html` <div class=\"row\"> <div class=\"col-12 col-md-6\"> <it-radio-group name=\"gruppo-alcuni-disabled\" value=\"opzione1\"> <span slot=\"label\">Esempio con alcuni disabilitati</span> ${renderComponent({ ...params, id: 'radio-disabled1', label: 'Radio selezionato e disabilitato', value: 'opzione1', disabled: true, })} ${renderComponent({ ...params, id: 'radio-disabled2', label: 'Radio disabilitato', name: 'gruppo-disabled', value: 'opzione2', disabled: true, })} ${renderComponent({ ...params, id: 'radio-disabled3', label: 'Radio abilitato', name: 'gruppo-disabled', value: 'opzione3', })} </it-radio-group> </div> <div class=\"col-12 col-md-6\"> <it-radio-group name=\"gruppo-tutti-disabled\" value=\"opzione2\" disabled> <span slot=\"label\">Esempio con tutti disabilitati</span> ${renderComponent({ ...params, id: 'radio-disabled4', label: 'Radio selezionato e disabilitato', value: 'opzione1', })} ${renderComponent({ ...params, id: 'radio-disabled5', label: 'Radio disabilitato', value: 'opzione2', })} ${renderComponent({ ...params, id: 'radio-disabled6', label: 'Radio abilitato', value: 'opzione3', })} </it-radio-group> </div> </div> </div> `, }"
723
+ "default": "{ ...meta, name: 'Stato disabilitato', parameters: { docs: { description: { story: ` #### Radio singolo disabilitato Aggiungi l'attributo \\`disabled\\` ad un singolo \\`<it-radio>\\` per disabilitare quell'opzione. #### Gruppo di radio disabilitato Se invece intendi disabilitare l'intero gruppo, aggiungi l'attributo \\`disabled\\` a \\`<it-radio-group>\\`. In questo modo tutti i radio al suo interno risulteranno disabilitati automaticamente. `, }, }, }, render: (params) => html` <div class=\"row\"> <div class=\"col-12 col-md-6\"> <it-radio-group name=\"gruppo-alcuni-disabled\" value=\"opzione1\"> <span slot=\"label\">Esempio con alcuni disabilitati</span> ${renderComponent({ ...params, id: 'radio-disabled1', label: 'Radio selezionato e disabilitato', value: 'opzione1', disabled: true, })} ${renderComponent({ ...params, id: 'radio-disabled2', label: 'Radio disabilitato', name: 'gruppo-disabled', value: 'opzione2', disabled: true, })} ${renderComponent({ ...params, id: 'radio-disabled3', label: 'Radio abilitato', name: 'gruppo-disabled', value: 'opzione3', })} </it-radio-group> </div> <div class=\"col-12 col-md-6\"> <it-radio-group name=\"gruppo-tutti-disabled\" value=\"opzione2\" disabled> <span slot=\"label\">Esempio con tutti disabilitati</span> ${renderComponent({ ...params, id: 'radio-disabled4', label: 'Radio selezionato e disabilitato', value: 'opzione1', })} ${renderComponent({ ...params, id: 'radio-disabled5', label: 'Radio disabilitato', value: 'opzione2', })} ${renderComponent({ ...params, id: 'radio-disabled6', label: 'Radio abilitato', value: 'opzione3', })} </it-radio-group> </div> </div> </div> `, }"
734
724
  },
735
725
  {
736
726
  "kind": "variable",
@@ -746,7 +736,7 @@
746
736
  "type": {
747
737
  "text": "Story"
748
738
  },
749
- "default": "{ name: 'Validazione e gestione degli errori', parameters: { docs: { description: { story: ` Se non è stata impostata la validazione custom tramite l'attributo \\`custom-validation\\`, e sono stati impostati attributi come \\`required\\`, viene effettuata una validazione interna utilizzando la validazione nativa del browser. Verranno mostrati i messaggi di errore nativi, e i componenti \\`<it-radio-group>\\` e \\`<it-radio>\\` riceveranno l'attributo \\`aria-invalid=\"true\"\\` quando non validi. \\`\\`\\`html <form> <it-radio-group name=\"scelta\" required> <span slot=\"label\">Seleziona un'opzione (obbligatorio)</span> <it-radio value=\"si\"> <span slot=\"label\">Sì, accetto</span> </it-radio> <it-radio value=\"no\"> <span slot=\"label\">No, non accetto</span> </it-radio> </it-radio-group> <button type=\"submit\">Invia</button> </form> \\`\\`\\` <br/> ### Personalizzazione dei messaggi di errore E' possibile personalizzare alcuni dei messaggi di errore di validazione, traducendo le seguenti stringhe tramite l'[utility di internazionalizzazione](/docs/i18n-internazionalizzazione--documentazione): <ul> <li>\\`validityRequired\\`: messaggio che viene mostrato quando il radio group è obbligatorio e nessuna opzione è stata selezionata</li> </ul> Non esistono altre possibili validazioni native per questo tipo di input. Per validazioni custom dovrai fornire i tuoi messaggi di errore. `, }, }, }, render: () => html` <form id=\"demo-form\"> <it-radio-group name=\"scelta\" required> <span slot=\"label\">Esempio con validazione</span> <it-radio value=\"si\"> <span slot=\"label\">Sì, accetto</span> </it-radio> <it-radio value=\"no\"> <span slot=\"label\">No, non accetto</span> </it-radio> <it-radio value=\"forse\"> <span slot=\"label\">Forse</span> </it-radio> </it-radio-group> <button type=\"submit\" class=\"btn btn-primary mt-3\">Invia</button> <p class=\"form-text mt-2\">Prova a inviare il form senza selezionare nulla per vedere la validazione.</p> </form> `, }"
739
+ "default": "{ name: 'Validazione e gestione degli errori', parameters: { docs: { description: { story: ` Se non è stata impostata la validazione custom tramite l'attributo \\`custom-validation\\`, e sono stati impostati attributi come \\`required\\`, viene effettuata una validazione interna utilizzando la validazione nativa del browser. Verranno mostrati i messaggi di errore nativi, e i componenti \\`<it-radio-group>\\` e \\`<it-radio>\\` riceveranno l'attributo \\`aria-invalid=\"true\"\\` quando non validi. \\`\\`\\`html <form> <it-radio-group name=\"scelta\" required> <span slot=\"label\">Seleziona un'opzione (obbligatorio)</span> <it-radio value=\"si\"> <span slot=\"label\">Sì, accetto</span> </it-radio> <it-radio value=\"no\"> <span slot=\"label\">No, non accetto</span> </it-radio> </it-radio-group> <it-button type=\"submit\" variant=\"primary\">Invia</it-button> </form> \\`\\`\\` <br/> ### Personalizzazione dei messaggi di errore E' possibile personalizzare alcuni dei messaggi di errore di validazione, traducendo le seguenti stringhe tramite l'[utility di internazionalizzazione](/docs/i18n-internazionalizzazione--documentazione): <ul> <li>\\`validityRequired\\`: messaggio che viene mostrato quando il radio group è obbligatorio e nessuna opzione è stata selezionata</li> </ul> Non esistono altre possibili validazioni native per questo tipo di input. Per validazioni custom dovrai fornire i tuoi messaggi di errore. `, }, }, }, render: () => html` <form id=\"demo-form\"> <it-radio-group name=\"scelta\" required> <span slot=\"label\">Esempio con validazione</span> <it-radio value=\"si\"> <span slot=\"label\">Sì, accetto</span> </it-radio> <it-radio value=\"no\"> <span slot=\"label\">No, non accetto</span> </it-radio> <it-radio value=\"forse\"> <span slot=\"label\">Forse</span> </it-radio> </it-radio-group> <it-button type=\"submit\" class=\"mt-3\" variant=\"primary\">Invia</it-button> <p class=\"form-text mt-2\">Prova a inviare il form senza selezionare nulla per vedere la validazione.</p> </form> `, }"
750
740
  },
751
741
  {
752
742
  "kind": "variable",
package/dist/src/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  export { ItRadio } from './it-radio.js';
2
2
  export { ItRadioGroup } from './it-radio-group.js';
3
- import '../form-control-CdxVvcex.js';
3
+ import '../index-BDMo2_H7.js';
4
4
  import 'lit/directive.js';
5
- import 'lit/decorators.js';
6
5
  import 'lit';
6
+ import 'lit/decorators.js';
7
7
  import 'lit/directives/when.js';
8
8
  import 'lit/directives/if-defined.js';
9
9
  //# sourceMappingURL=index.js.map
@@ -40,11 +40,6 @@ export declare class ItRadioGroup extends FormControl {
40
40
  */
41
41
  private _radios;
42
42
  private _label;
43
- /**
44
- * Track if validation has been triggered (via reportValidity or setCustomValidity)
45
- * ARIA best practice: don't show aria-invalid until user attempts submission
46
- */
47
- private _validationTriggered;
48
43
  /**
49
44
  * Roving tabindex controller for keyboard navigation
50
45
  */
@@ -1 +1 @@
1
- {"version":3,"file":"it-radio-group.d.ts","sourceRoot":"","sources":["../../src/it-radio-group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,cAAc,EAAE,MAAM,KAAK,CAAC;AAE3C,OAAO,EAAE,WAAW,EAAmD,MAAM,iBAAiB,CAAC;AAC/F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C;;;;;;GAMG;AACH,qBACa,YAAa,SAAQ,WAAW;IAC3C,MAAM,CAAC,MAAM,+BAAU;IAEvB,MAAM,CAAC,cAAc,UAAQ;IAE7B;;OAEG;IAEH,IAAI,SAAM;IAEV;;OAEG;IAEH,KAAK,SAAM;IAEX;;OAEG;IAEH,QAAQ,UAAS;IAEjB;;OAEG;IAEH,QAAQ,UAAS;IAEjB;;OAEG;IAEH,OAAO,UAAS;IAEhB;;OAEG;IAEH,MAAM,UAAS;IAEf;;OAEG;IAEH,OAAO,CAAC,OAAO,CAAa;IAG5B,OAAO,CAAC,MAAM,CAAiB;IAE/B;;;OAGG;IAEH,OAAO,CAAC,oBAAoB,CAAS;IAErC;;OAEG;IACH,OAAO,CAAC,cAAc,CAKnB;IAEH;;OAEG;IACH,OAAO,CAAC,eAAe,CAOpB;IAEH;;OAEG;IACH,IAAa,QAAQ,IAAI,aAAa,CAgBrC;IAED;;OAEG;IACM,aAAa,IAAI,OAAO;IAOjC;;OAEG;IACM,cAAc,IAAI,OAAO;IAQlC,kFAAkF;IAClE,iBAAiB,CAAC,OAAO,EAAE,MAAM;cAa9B,wBAAwB;IAS3C,OAAO,CAAC,mBAAmB;IAkB3B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA4ChC,iBAAiB;IAMjB,YAAY;YAQE,YAAY;IAc1B,oBAAoB;IAIpB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAa5B;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,GAAG,YAAY,GAAG,UAAU,GAAG,IAAI;IAuCnF;;OAEG;IACH,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI;IAO9D;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwC1B;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAiB/B,OAAO,CAAC,OAAO,EAAE,cAAc;IA2B/B;;OAEG;IACH,OAAO,CAAC,iBAAiB,CAKvB;IAEF,OAAO,CAAC,sBAAsB,CAI5B;IAEF;;OAEG;IACH,MAAM;CAmBP;AAGD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,gBAAgB,EAAE,YAAY,CAAC;KAChC;CACF"}
1
+ {"version":3,"file":"it-radio-group.d.ts","sourceRoot":"","sources":["../../src/it-radio-group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,cAAc,EAAE,MAAM,KAAK,CAAC;AAE3C,OAAO,EAAE,WAAW,EAAmD,MAAM,iBAAiB,CAAC;AAC/F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C;;;;;;GAMG;AACH,qBACa,YAAa,SAAQ,WAAW;IAC3C,MAAM,CAAC,MAAM,+BAAU;IAEvB,MAAM,CAAC,cAAc,UAAQ;IAE7B;;OAEG;IAEH,IAAI,SAAM;IAEV;;OAEG;IAEH,KAAK,SAAM;IAEX;;OAEG;IAEH,QAAQ,UAAS;IAEjB;;OAEG;IAEH,QAAQ,UAAS;IAEjB;;OAEG;IAEH,OAAO,UAAS;IAEhB;;OAEG;IAEH,MAAM,UAAS;IAEf;;OAEG;IAEH,OAAO,CAAC,OAAO,CAAa;IAG5B,OAAO,CAAC,MAAM,CAAiB;IAE/B;;OAEG;IACH,OAAO,CAAC,cAAc,CAKnB;IAEH;;OAEG;IACH,OAAO,CAAC,eAAe,CAOpB;IAEH;;OAEG;IACH,IAAa,QAAQ,IAAI,aAAa,CAgBrC;IAED;;OAEG;IACM,aAAa,IAAI,OAAO;IAOjC;;OAEG;IACM,cAAc,IAAI,OAAO;IAOlC,kFAAkF;IAClE,iBAAiB,CAAC,OAAO,EAAE,MAAM;cAU9B,wBAAwB;IAS3C,OAAO,CAAC,mBAAmB;IAkB3B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA4ChC,iBAAiB;IAMjB,YAAY;YAQE,YAAY;IAc1B,oBAAoB;IAIpB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAa5B;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,GAAG,YAAY,GAAG,UAAU,GAAG,IAAI;IAuCnF;;OAEG;IACH,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI;IAO9D;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwC1B;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAiB/B,OAAO,CAAC,OAAO,EAAE,cAAc;IA2B/B;;OAEG;IACH,OAAO,CAAC,iBAAiB,CAKvB;IAEF,OAAO,CAAC,sBAAsB,CAI5B;IAEF;;OAEG;IACH,MAAM;CAkBP;AAGD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,gBAAgB,EAAE,YAAY,CAAC;KAChC;CACF"}
@@ -1,6 +1,6 @@
1
- import { _ as __decorate, a as __metadata, F as FormControl, b as FormControlController } from '../form-control-CdxVvcex.js';
1
+ import { _ as __decorate, a as __metadata, F as FormControl, b as FormControlController } from '../index-BDMo2_H7.js';
2
2
  import { css, html } from 'lit';
3
- import { property, queryAssignedElements, state, customElement } from 'lit/decorators.js';
3
+ import { property, queryAssignedElements, customElement } from 'lit/decorators.js';
4
4
  import 'lit/directive.js';
5
5
 
6
6
  /**
@@ -332,11 +332,6 @@ a:hover {
332
332
  color: var(--bs-color-link-hover);
333
333
  }
334
334
 
335
- a:not([href]):not([class]), a:not([href]):not([class]):hover {
336
- color: inherit;
337
- text-decoration: none;
338
- }
339
-
340
335
  pre,
341
336
  code,
342
337
  kbd,
@@ -1288,14 +1283,8 @@ select.just-validate-success-field {
1288
1283
  gap: var(--bs-spacing-s);
1289
1284
  }
1290
1285
 
1291
- .just-validate-success-field ::slotted(it-radio) {
1292
- --it-radio-label-color: var(--bs-color-text-success);
1293
- }
1294
-
1295
- .just-validate-success-field {
1296
- padding: 0 !important;
1297
- border: none !important;
1298
- background-image: none !important;
1286
+ .form-feedaback {
1287
+ font-weight: bold;
1299
1288
  }`;
1300
1289
 
1301
1290
  /**
@@ -1332,11 +1321,6 @@ let ItRadioGroup = class ItRadioGroup extends FormControl {
1332
1321
  * Whether the radios are displayed inline (horizontally) or stacked (vertically)
1333
1322
  */
1334
1323
  this.inline = false;
1335
- /**
1336
- * Track if validation has been triggered (via reportValidity or setCustomValidity)
1337
- * ARIA best practice: don't show aria-invalid until user attempts submission
1338
- */
1339
- this._validationTriggered = false;
1340
1324
  /**
1341
1325
  * Roving tabindex controller for keyboard navigation
1342
1326
  */
@@ -1405,7 +1389,6 @@ let ItRadioGroup = class ItRadioGroup extends FormControl {
1405
1389
  * Override: Report validity for radio group
1406
1390
  */
1407
1391
  reportValidity() {
1408
- this._validationTriggered = true; // Mark that validation has been attempted
1409
1392
  const isValid = this.checkValidity();
1410
1393
  this.handleValidationMessages();
1411
1394
  this._updateInvalidState();
@@ -1415,9 +1398,6 @@ let ItRadioGroup = class ItRadioGroup extends FormControl {
1415
1398
  setCustomValidity(message) {
1416
1399
  // Only trigger validation state if message is non-empty (actual error)
1417
1400
  // Empty message during init or after correction should not trigger invalid state initially
1418
- if (message && message.length > 0) {
1419
- this._validationTriggered = true;
1420
- }
1421
1401
  this.validationMessage = message;
1422
1402
  this.formControlController.updateValidity();
1423
1403
  // Update aria-invalid on group and children immediately
@@ -1435,7 +1415,7 @@ let ItRadioGroup = class ItRadioGroup extends FormControl {
1435
1415
  }
1436
1416
  _updateInvalidState() {
1437
1417
  // Only show aria-invalid if validation has been triggered (ARIA best practice)
1438
- if (!this._validationTriggered) {
1418
+ if (!this.formControlController.submittedOnce) {
1439
1419
  return;
1440
1420
  }
1441
1421
  const invalid = this.checkValidity() === false || !!this.validationMessage;
@@ -1469,7 +1449,7 @@ let ItRadioGroup = class ItRadioGroup extends FormControl {
1469
1449
  }
1470
1450
  // Update message content and attributes
1471
1451
  messageEl.id = messageId;
1472
- messageEl.className = 'invalid-feedback form-feedback form-text form-feedback just-validate-error-label';
1452
+ messageEl.className = 'form-feedback just-validate-error-label';
1473
1453
  messageEl.setAttribute('role', 'alert');
1474
1454
  messageEl.removeAttribute('hidden');
1475
1455
  const labelText = this._label?.[0]?.textContent || '';
@@ -1556,7 +1536,7 @@ let ItRadioGroup = class ItRadioGroup extends FormControl {
1556
1536
  }
1557
1537
  });
1558
1538
  // If validation was already triggered, update state after selection
1559
- if (this._validationTriggered) {
1539
+ if (this.formControlController.submittedOnce) {
1560
1540
  // For native validation, clear error if now valid
1561
1541
  if (!this.customValidation) {
1562
1542
  this.handleValidationMessages();
@@ -1647,9 +1627,9 @@ let ItRadioGroup = class ItRadioGroup extends FormControl {
1647
1627
  // Update radios when value or name changes
1648
1628
  if (changed.has('value')) {
1649
1629
  this._updateRadiosState();
1650
- this.dispatchEvent(new Event('change', { bubbles: true }));
1630
+ this.dispatchEvent(new Event('it-change', { bubbles: true }));
1651
1631
  // Re-validate after value change (for native validation) only if validation was already triggered
1652
- if (!this.customValidation && this._validationTriggered) {
1632
+ if (!this.customValidation && this.formControlController.submittedOnce) {
1653
1633
  this.handleValidationMessages();
1654
1634
  this._updateInvalidState();
1655
1635
  }
@@ -1671,7 +1651,7 @@ let ItRadioGroup = class ItRadioGroup extends FormControl {
1671
1651
  render() {
1672
1652
  const validityMessage = this.validationMessage;
1673
1653
  const invalid = validityMessage?.length > 0 || (!this.customValidation && this?.checkValidity() === false);
1674
- const groupWrapperClasses = this.composeClass('it-radio-group', 'it-form__control', this.inline && !this.grouped ? 'it-radio-group-inline' : '', this.grouped && !this.inline ? 'it-radio-group-stacked' : '', invalid ? 'is-invalid' : '', !invalid && this._touched ? 'just-validate-success-field' : '');
1654
+ const groupWrapperClasses = this.composeClass('it-radio-group', 'it-form__control', this.inline && !this.grouped ? 'it-radio-group-inline' : '', this.grouped && !this.inline ? 'it-radio-group-stacked' : '', invalid ? 'is-invalid' : '');
1675
1655
  return html `<slot name="label" @slotchange=${this._handleLabelSlotChange}></slot>
1676
1656
  <div class=${groupWrapperClasses}>
1677
1657
  <slot @slotchange=${this._handleSlotChange}></slot>
@@ -1713,10 +1693,6 @@ __decorate([
1713
1693
  queryAssignedElements({ slot: 'label' }),
1714
1694
  __metadata("design:type", Array)
1715
1695
  ], ItRadioGroup.prototype, "_label", void 0);
1716
- __decorate([
1717
- state(),
1718
- __metadata("design:type", Object)
1719
- ], ItRadioGroup.prototype, "_validationTriggered", void 0);
1720
1696
  ItRadioGroup = __decorate([
1721
1697
  customElement('it-radio-group')
1722
1698
  ], ItRadioGroup);
@@ -1 +1 @@
1
- {"version":3,"file":"it-radio-group.js","sources":["../../../globals/dist/src/controllers/roving-tabindex-controller.js","../../../src/it-radio-group.ts"],"sourcesContent":["/**\n * Roving Tabindex Controller\n *\n * Implements the ARIA roving tabindex pattern for keyboard navigation.\n * See: https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/#kbd_roving_tabindex\n *\n * Usage:\n * ```ts\n * private rovingTabindex = new RovingTabindexController(this, {\n * getItems: () => Array.from(this.querySelectorAll('my-item')),\n * onSelect: (item) => this.selectItem(item),\n * });\n * ```\n */\nexport class RovingTabindexController {\n constructor(host, config) {\n this.host = host;\n this.config = {\n wrap: true,\n direction: 'both',\n selectOnFocus: false,\n skipItem: (item) => item.hasAttribute('disabled') || item.disabled === true,\n ...config,\n };\n host.addController(this);\n }\n // eslint-disable-next-line class-methods-use-this\n hostConnected() {\n // Controller is ready when host connects\n }\n // eslint-disable-next-line class-methods-use-this\n hostDisconnected() {\n // Cleanup if needed\n }\n /**\n * Update tabindex values for all items\n * @param activeIndex - Index of the item that should be tabbable (default: 0 or first non-disabled)\n */\n updateTabindices(activeIndex) {\n const items = this.config.getItems();\n if (!items || items.length === 0) {\n return;\n }\n // Find the active index\n let targetIndex = activeIndex ?? 0;\n // If no active index specified, use first non-disabled item\n if (activeIndex === undefined) {\n targetIndex = items.findIndex((item) => !this.config.skipItem(item));\n if (targetIndex === -1) {\n targetIndex = 0; // Fallback to first item if all disabled\n }\n }\n // Set tabindex for all items\n items.forEach((item, index) => {\n const itemElement = item;\n if (this.config.skipItem(itemElement)) {\n // eslint-disable-next-line no-param-reassign\n itemElement.tabIndex = -1;\n }\n else {\n // eslint-disable-next-line no-param-reassign\n itemElement.tabIndex = index === targetIndex ? 0 : -1;\n }\n });\n }\n /**\n * Handle keyboard navigation\n * @param currentItem - The currently focused item\n * @param event - The keyboard event\n * @returns true if the event was handled, false otherwise\n */\n handleKeydown(currentItem, event) {\n const { direction } = this.config;\n const { key } = event;\n // Determine if this key should be handled based on direction\n const isVertical = key === 'ArrowUp' || key === 'ArrowDown';\n const isHorizontal = key === 'ArrowLeft' || key === 'ArrowRight';\n const isHome = key === 'Home';\n const isEnd = key === 'End';\n const shouldHandle = isHome ||\n isEnd ||\n (direction === 'both' && (isVertical || isHorizontal)) ||\n (direction === 'vertical' && isVertical) ||\n (direction === 'horizontal' && isHorizontal);\n if (!shouldHandle) {\n return false;\n }\n // Prevent default behavior (page scrolling)\n event.preventDefault();\n const items = this.config.getItems();\n const currentIndex = items.indexOf(currentItem);\n if (currentIndex === -1) {\n return false;\n }\n let nextIndex = currentIndex;\n // Handle Home/End keys\n if (isHome) {\n nextIndex = 0;\n }\n else if (isEnd) {\n nextIndex = items.length - 1;\n }\n else {\n // Handle arrow keys\n const isNext = key === 'ArrowDown' || key === 'ArrowRight';\n const isPrev = key === 'ArrowUp' || key === 'ArrowLeft';\n if (isNext) {\n nextIndex = this.getNextIndex(items, currentIndex, 1);\n }\n else if (isPrev) {\n nextIndex = this.getNextIndex(items, currentIndex, -1);\n }\n }\n // Skip disabled items\n nextIndex = this.findNextValidIndex(items, nextIndex, nextIndex > currentIndex ? 1 : -1);\n if (nextIndex !== -1 && nextIndex !== currentIndex) {\n const nextItem = items[nextIndex];\n // Update tabindices\n this.updateTabindices(nextIndex);\n // Focus the next item\n nextItem.focus();\n // Optionally select/activate the item\n if (this.config.selectOnFocus && this.config.onSelect) {\n this.config.onSelect(nextItem, event);\n }\n return true;\n }\n return false;\n }\n /**\n * Get the next index based on direction\n */\n getNextIndex(items, currentIndex, direction) {\n const { wrap } = this.config;\n let nextIndex = currentIndex + direction;\n if (wrap) {\n // Wrap around\n if (nextIndex < 0) {\n nextIndex = items.length - 1;\n }\n else if (nextIndex >= items.length) {\n nextIndex = 0;\n }\n }\n else {\n // Clamp to bounds\n nextIndex = Math.max(0, Math.min(items.length - 1, nextIndex));\n }\n return nextIndex;\n }\n /**\n * Find the next valid (non-disabled) index\n */\n findNextValidIndex(items, startIndex, direction) {\n const maxAttempts = items.length;\n let attempts = 0;\n let index = startIndex;\n while (attempts < maxAttempts) {\n if (!this.config.skipItem(items[index])) {\n return index;\n }\n index = this.getNextIndex(items, index, direction);\n attempts += 1;\n }\n // All items are disabled\n return -1;\n }\n /**\n * Set focus to a specific item\n */\n focusItem(item) {\n const items = this.config.getItems();\n const index = items.indexOf(item);\n if (index !== -1) {\n this.updateTabindices(index);\n item.focus();\n }\n }\n /**\n * Set focus to the first non-disabled item\n */\n focusFirst() {\n const items = this.config.getItems();\n const firstValidIndex = this.findNextValidIndex(items, 0, 1);\n if (firstValidIndex !== -1) {\n this.focusItem(items[firstValidIndex]);\n }\n }\n /**\n * Set focus to the last non-disabled item\n */\n focusLast() {\n const items = this.config.getItems();\n const lastValidIndex = this.findNextValidIndex(items, items.length - 1, -1);\n if (lastValidIndex !== -1) {\n this.focusItem(items[lastValidIndex]);\n }\n }\n}\n//# sourceMappingURL=roving-tabindex-controller.js.map","import { html, PropertyValues } from 'lit';\nimport { customElement, property, queryAssignedElements, state } from 'lit/decorators.js';\nimport { FormControl, FormControlController, RovingTabindexController } from '@italia/globals';\nimport type { ItRadio } from '@italia/radio';\nimport styles from './radio-group.scss';\n\n/**\n * Radio group component - manages a collection of radio buttons\n *\n * @element it-radio-group\n * @slot - Contains the `<it-radio>` elements\n *\n */\n@customElement('it-radio-group')\nexport class ItRadioGroup extends FormControl {\n static styles = styles;\n\n static formAssociated = true;\n\n /**\n * The name of the radio group, used for form submission\n */\n @property({ type: String })\n name = '';\n\n /**\n * The currently selected value\n */\n @property({ type: String, reflect: true })\n value = '';\n\n /**\n * Whether the radio group is disabled\n */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /**\n * Whether a selection is required\n */\n @property({ type: Boolean, reflect: true })\n required = false;\n\n /**\n * Optional prop for visual styling of grouped radios (borders between radios)\n */\n @property({ type: Boolean, reflect: true })\n grouped = false;\n\n /**\n * Whether the radios are displayed inline (horizontally) or stacked (vertically)\n */\n @property({ type: Boolean, reflect: true })\n inline = false;\n\n /**\n * Get all slotted radio buttons\n */\n @queryAssignedElements()\n private _radios!: ItRadio[];\n\n @queryAssignedElements({ slot: 'label' })\n private _label!: HTMLElement[];\n\n /**\n * Track if validation has been triggered (via reportValidity or setCustomValidity)\n * ARIA best practice: don't show aria-invalid until user attempts submission\n */\n @state()\n private _validationTriggered = false;\n\n /**\n * Roving tabindex controller for keyboard navigation\n */\n private rovingTabindex = new RovingTabindexController<ItRadio>(this, {\n getItems: () => this._radios,\n onSelect: (radio, event) => this.selectRadio(radio, event),\n direction: 'both',\n selectOnFocus: true,\n });\n\n /**\n * Form control integration\n */\n private _formController = new FormControlController(this as any, {\n value: () => this.value,\n // disabled: () => this.disabled,\n setValue: (control: FormControl, value: unknown) => {\n const radioGroup = control as ItRadioGroup;\n radioGroup.value = value as string;\n },\n });\n\n /**\n * Override: Custom validity check for radio group\n */\n override get validity(): ValidityState {\n // Fallback: create a custom ValidityState-like object\n const valid = !this.required || !!this.value;\n return {\n valid,\n valueMissing: this.required && !this.value,\n typeMismatch: false,\n patternMismatch: false,\n tooLong: false,\n tooShort: false,\n rangeUnderflow: false,\n rangeOverflow: false,\n stepMismatch: false,\n badInput: false,\n customError: false,\n } as ValidityState;\n }\n\n /**\n * Override: Check validity for radio group\n */\n override checkValidity(): boolean {\n if (this.required && !this.value) {\n return false;\n }\n return true;\n }\n\n /**\n * Override: Report validity for radio group\n */\n override reportValidity(): boolean {\n this._validationTriggered = true; // Mark that validation has been attempted\n const isValid = this.checkValidity();\n this.handleValidationMessages();\n this._updateInvalidState();\n return isValid;\n }\n\n /** Sets a custom validation message. Pass an empty string to restore validity. */\n public override setCustomValidity(message: string) {\n // Only trigger validation state if message is non-empty (actual error)\n // Empty message during init or after correction should not trigger invalid state initially\n if (message && message.length > 0) {\n this._validationTriggered = true;\n }\n\n this.validationMessage = message;\n this.formControlController.updateValidity();\n // Update aria-invalid on group and children immediately\n this._updateInvalidState();\n }\n\n protected override handleValidationMessages() {\n const _v = this.validity;\n if (!this.customValidation) {\n if (_v.valueMissing) {\n this.setCustomValidity(this.$t('validityRequired'));\n } else this.setCustomValidity('');\n }\n }\n\n private _updateInvalidState() {\n // Only show aria-invalid if validation has been triggered (ARIA best practice)\n if (!this._validationTriggered) {\n return;\n }\n\n const invalid = this.checkValidity() === false || !!this.validationMessage;\n if (invalid) this.setAttribute('aria-invalid', 'true');\n else this.removeAttribute('aria-invalid');\n this._radios?.forEach((r) => {\n if (invalid) r.setAttribute('aria-invalid', 'true');\n else r.removeAttribute('aria-invalid');\n });\n\n // Update validation message in light DOM\n this._updateValidationMessage();\n }\n\n /**\n * Update validation message in light DOM (for aria-describedby cross-boundary support)\n */\n private _updateValidationMessage() {\n const validityMessage = this.validationMessage;\n const messageId = `invalid-feedback-${this._id}`;\n\n // Find or create validation message element in light DOM\n let messageEl = this.querySelector(`[slot=\"validation-message\"]`);\n\n if (validityMessage && validityMessage.length > 0) {\n // Create message element if it doesn't exist\n if (!messageEl) {\n messageEl = document.createElement('div');\n messageEl.setAttribute('slot', 'validation-message');\n this.appendChild(messageEl);\n }\n\n // Update message content and attributes\n messageEl.id = messageId;\n messageEl.className = 'invalid-feedback form-feedback form-text form-feedback just-validate-error-label';\n messageEl.setAttribute('role', 'alert');\n messageEl.removeAttribute('hidden');\n\n const labelText = this._label?.[0]?.textContent || '';\n messageEl.innerHTML = `<span class=\"visually-hidden\">${labelText}: </span>${validityMessage}`;\n\n // Update aria-describedby on host\n const existingDescribedBy = this._ariaAttributes['aria-describedby'] || '';\n const ariaDescribedBy = existingDescribedBy ? `${existingDescribedBy} ${messageId}` : messageId;\n this.setAttribute('aria-describedby', ariaDescribedBy);\n } else {\n // Remove message element if validation passed\n if (messageEl) {\n messageEl.remove();\n }\n\n // Update aria-describedby (remove message id)\n const existingDescribedBy = this._ariaAttributes['aria-describedby'] || '';\n if (existingDescribedBy) {\n this.setAttribute('aria-describedby', existingDescribedBy);\n } else {\n this.removeAttribute('aria-describedby');\n }\n }\n }\n\n connectedCallback() {\n super.connectedCallback?.();\n this._handleReady();\n this.setAttribute('role', 'radiogroup');\n }\n\n firstUpdated() {\n const checkedRadio = this.querySelector<ItRadio>('it-radio[checked]');\n if (checkedRadio) {\n this.value = checkedRadio.value;\n }\n this.updateRadios();\n }\n\n private async updateRadios() {\n if (!this.hasUpdated) {\n // Initial validation has to happen after the initial render to allow\n // the buttons to be queries from the rendered <slot> element\n await this.updateComplete;\n }\n const radios = this.querySelectorAll<ItRadio>('it-radio');\n // eslint-disable-next-line no-return-assign, no-param-reassign\n radios.forEach((r) => {\n // eslint-disable-next-line no-param-reassign\n r.checked = r.value === this.value;\n });\n }\n\n disconnectedCallback() {\n super.disconnectedCallback?.();\n }\n\n /**\n * Sync group value from checked radio (initialization)\n */\n private _syncValueFromRadios() {\n if (!this._radios) {\n return;\n }\n\n // Find the first checked radio\n const checkedRadio = this._radios.find((r) => r.checked);\n if (checkedRadio) {\n // Sync the group value from the checked radio\n this.value = checkedRadio.value;\n }\n }\n\n /**\n * PUBLIC API: Called by radio buttons to select themselves\n */\n selectRadio(radio: ItRadio, event: KeyboardEvent | PointerEvent | MouseEvent): void {\n if (radio.disabled || this.disabled) {\n return;\n }\n\n this.value = radio.value;\n\n // Uncheck other radios using their public API\n this._radios.forEach((r) => {\n if (r !== radio) {\n // eslint-disable-next-line no-param-reassign\n r.checked = false;\n } else {\n // eslint-disable-next-line no-param-reassign\n r.checked = true;\n }\n });\n\n // If validation was already triggered, update state after selection\n if (this._validationTriggered) {\n // For native validation, clear error if now valid\n if (!this.customValidation) {\n this.handleValidationMessages();\n this._updateInvalidState();\n }\n // For custom validation (JustValidate), the external validator will call setCustomValidity\n // but we still update the state based on current validationMessage\n else {\n this._updateInvalidState();\n }\n }\n\n if (event.type === 'click' || event.type === 'pointerdown') {\n this._handleClick(event);\n } else {\n this._handleChange(event);\n }\n }\n\n /**\n * PUBLIC API: Handle keyboard navigation from radio buttons\n */\n handleRadioKeyDown(radio: ItRadio, event: KeyboardEvent): void {\n // Delegate to roving tabindex controller\n const handled = this.rovingTabindex.handleKeydown(radio, event);\n if (handled) this._handleFocus(event);\n else this._handleBlur(event);\n }\n\n /**\n * Synchronize radio button states with group state\n */\n private _updateRadiosState() {\n if (!this._radios || this._radios.length === 0) {\n return;\n }\n\n this._radios.forEach((radio) => {\n // Set checked state based on value\n // eslint-disable-next-line no-param-reassign\n radio.checked = radio.value === this.value;\n\n // Sync disabled state from group to radios\n // Note: We don't override individual radio's disabled state\n // If the group is disabled, all radios should be disabled\n // But individual radios can be disabled independently\n if (this.disabled) {\n // eslint-disable-next-line no-param-reassign\n radio.disabled = true;\n }\n });\n\n // Update tabindex using roving tabindex controller\n // Priority: checked and enabled > first enabled > 0\n let tabbableIndex = 0;\n\n // First, try to find a checked radio that is not disabled\n const checkedEnabledIndex = this._radios.findIndex((r) => r.checked && !r.disabled);\n if (checkedEnabledIndex >= 0) {\n tabbableIndex = checkedEnabledIndex;\n } else {\n // If no checked enabled radio, find the first enabled radio\n const firstEnabledIndex = this._radios.findIndex((r) => !r.disabled);\n if (firstEnabledIndex >= 0) {\n tabbableIndex = firstEnabledIndex;\n }\n // If all radios are disabled, tabbableIndex stays 0 (but controller will set all to -1)\n }\n\n this.rovingTabindex.updateTabindices(tabbableIndex);\n }\n\n /**\n * Sync group state (name, grouped, inline, required) to child radios\n * This replaces the need for requestUpdate() calls\n */\n private _syncGroupStateToRadios() {\n if (!this._radios || this._radios.length === 0) {\n return;\n }\n\n const groupState = {\n name: this.name,\n grouped: this.grouped,\n inline: this.inline,\n required: this.required,\n };\n\n this._radios.forEach((radio) => {\n radio.syncFromGroup(groupState);\n });\n }\n\n updated(changed: PropertyValues) {\n super.updated(changed);\n\n // Update radios when value or name changes\n if (changed.has('value')) {\n this._updateRadiosState();\n this.dispatchEvent(new Event('change', { bubbles: true }));\n // Re-validate after value change (for native validation) only if validation was already triggered\n if (!this.customValidation && this._validationTriggered) {\n this.handleValidationMessages();\n this._updateInvalidState();\n }\n }\n\n // If validation message changed, update aria-invalid on group and children\n if (changed.has('validationMessage')) {\n this._updateInvalidState();\n }\n\n // If relevant group properties changed, sync to child radios\n const relevant = ['grouped', 'inline', 'name', 'required', 'disabled'];\n const hasChanged = Array.from(changed.keys()).some((k) => relevant.includes(String(k)));\n if (hasChanged && this._radios?.length) {\n this._syncGroupStateToRadios();\n }\n }\n\n /**\n * Handle slot changes (when radios are added/removed)\n */\n private _handleSlotChange = () => {\n this._syncValueFromRadios();\n this._updateRadiosState();\n // Sync group state to newly added radios\n this._syncGroupStateToRadios();\n };\n\n private _handleLabelSlotChange = () => {\n const labelId = this.generateId('it-radio-group-label');\n this._label[0]?.setAttribute('id', labelId);\n this.setAttribute('aria-labelledby', labelId);\n };\n\n /**\n * Render the component\n */\n render() {\n const validityMessage = this.validationMessage;\n const invalid = validityMessage?.length > 0 || (!this.customValidation && this?.checkValidity() === false);\n\n const groupWrapperClasses = this.composeClass(\n 'it-radio-group',\n 'it-form__control',\n this.inline && !this.grouped ? 'it-radio-group-inline' : '',\n this.grouped && !this.inline ? 'it-radio-group-stacked' : '',\n invalid ? 'is-invalid' : '',\n !invalid && this._touched ? 'just-validate-success-field' : '',\n );\n\n return html`<slot name=\"label\" @slotchange=${this._handleLabelSlotChange}></slot>\n <div class=${groupWrapperClasses}>\n <slot @slotchange=${this._handleSlotChange}></slot>\n </div>\n <slot name=\"validation-message\"></slot>`;\n }\n}\n\n// Declare custom element\ndeclare global {\n interface HTMLElementTagNameMap {\n 'it-radio-group': ItRadioGroup;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"it-radio-group.js","sources":["../../../globals/dist/src/controllers/roving-tabindex-controller.js","../../../src/it-radio-group.ts"],"sourcesContent":["/**\n * Roving Tabindex Controller\n *\n * Implements the ARIA roving tabindex pattern for keyboard navigation.\n * See: https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/#kbd_roving_tabindex\n *\n * Usage:\n * ```ts\n * private rovingTabindex = new RovingTabindexController(this, {\n * getItems: () => Array.from(this.querySelectorAll('my-item')),\n * onSelect: (item) => this.selectItem(item),\n * });\n * ```\n */\nexport class RovingTabindexController {\n constructor(host, config) {\n this.host = host;\n this.config = {\n wrap: true,\n direction: 'both',\n selectOnFocus: false,\n skipItem: (item) => item.hasAttribute('disabled') || item.disabled === true,\n ...config,\n };\n host.addController(this);\n }\n // eslint-disable-next-line class-methods-use-this\n hostConnected() {\n // Controller is ready when host connects\n }\n // eslint-disable-next-line class-methods-use-this\n hostDisconnected() {\n // Cleanup if needed\n }\n /**\n * Update tabindex values for all items\n * @param activeIndex - Index of the item that should be tabbable (default: 0 or first non-disabled)\n */\n updateTabindices(activeIndex) {\n const items = this.config.getItems();\n if (!items || items.length === 0) {\n return;\n }\n // Find the active index\n let targetIndex = activeIndex ?? 0;\n // If no active index specified, use first non-disabled item\n if (activeIndex === undefined) {\n targetIndex = items.findIndex((item) => !this.config.skipItem(item));\n if (targetIndex === -1) {\n targetIndex = 0; // Fallback to first item if all disabled\n }\n }\n // Set tabindex for all items\n items.forEach((item, index) => {\n const itemElement = item;\n if (this.config.skipItem(itemElement)) {\n // eslint-disable-next-line no-param-reassign\n itemElement.tabIndex = -1;\n }\n else {\n // eslint-disable-next-line no-param-reassign\n itemElement.tabIndex = index === targetIndex ? 0 : -1;\n }\n });\n }\n /**\n * Handle keyboard navigation\n * @param currentItem - The currently focused item\n * @param event - The keyboard event\n * @returns true if the event was handled, false otherwise\n */\n handleKeydown(currentItem, event) {\n const { direction } = this.config;\n const { key } = event;\n // Determine if this key should be handled based on direction\n const isVertical = key === 'ArrowUp' || key === 'ArrowDown';\n const isHorizontal = key === 'ArrowLeft' || key === 'ArrowRight';\n const isHome = key === 'Home';\n const isEnd = key === 'End';\n const shouldHandle = isHome ||\n isEnd ||\n (direction === 'both' && (isVertical || isHorizontal)) ||\n (direction === 'vertical' && isVertical) ||\n (direction === 'horizontal' && isHorizontal);\n if (!shouldHandle) {\n return false;\n }\n // Prevent default behavior (page scrolling)\n event.preventDefault();\n const items = this.config.getItems();\n const currentIndex = items.indexOf(currentItem);\n if (currentIndex === -1) {\n return false;\n }\n let nextIndex = currentIndex;\n // Handle Home/End keys\n if (isHome) {\n nextIndex = 0;\n }\n else if (isEnd) {\n nextIndex = items.length - 1;\n }\n else {\n // Handle arrow keys\n const isNext = key === 'ArrowDown' || key === 'ArrowRight';\n const isPrev = key === 'ArrowUp' || key === 'ArrowLeft';\n if (isNext) {\n nextIndex = this.getNextIndex(items, currentIndex, 1);\n }\n else if (isPrev) {\n nextIndex = this.getNextIndex(items, currentIndex, -1);\n }\n }\n // Skip disabled items\n nextIndex = this.findNextValidIndex(items, nextIndex, nextIndex > currentIndex ? 1 : -1);\n if (nextIndex !== -1 && nextIndex !== currentIndex) {\n const nextItem = items[nextIndex];\n // Update tabindices\n this.updateTabindices(nextIndex);\n // Focus the next item\n nextItem.focus();\n // Optionally select/activate the item\n if (this.config.selectOnFocus && this.config.onSelect) {\n this.config.onSelect(nextItem, event);\n }\n return true;\n }\n return false;\n }\n /**\n * Get the next index based on direction\n */\n getNextIndex(items, currentIndex, direction) {\n const { wrap } = this.config;\n let nextIndex = currentIndex + direction;\n if (wrap) {\n // Wrap around\n if (nextIndex < 0) {\n nextIndex = items.length - 1;\n }\n else if (nextIndex >= items.length) {\n nextIndex = 0;\n }\n }\n else {\n // Clamp to bounds\n nextIndex = Math.max(0, Math.min(items.length - 1, nextIndex));\n }\n return nextIndex;\n }\n /**\n * Find the next valid (non-disabled) index\n */\n findNextValidIndex(items, startIndex, direction) {\n const maxAttempts = items.length;\n let attempts = 0;\n let index = startIndex;\n while (attempts < maxAttempts) {\n if (!this.config.skipItem(items[index])) {\n return index;\n }\n index = this.getNextIndex(items, index, direction);\n attempts += 1;\n }\n // All items are disabled\n return -1;\n }\n /**\n * Set focus to a specific item\n */\n focusItem(item) {\n const items = this.config.getItems();\n const index = items.indexOf(item);\n if (index !== -1) {\n this.updateTabindices(index);\n item.focus();\n }\n }\n /**\n * Set focus to the first non-disabled item\n */\n focusFirst() {\n const items = this.config.getItems();\n const firstValidIndex = this.findNextValidIndex(items, 0, 1);\n if (firstValidIndex !== -1) {\n this.focusItem(items[firstValidIndex]);\n }\n }\n /**\n * Set focus to the last non-disabled item\n */\n focusLast() {\n const items = this.config.getItems();\n const lastValidIndex = this.findNextValidIndex(items, items.length - 1, -1);\n if (lastValidIndex !== -1) {\n this.focusItem(items[lastValidIndex]);\n }\n }\n}\n//# sourceMappingURL=roving-tabindex-controller.js.map","import { html, PropertyValues } from 'lit';\nimport { customElement, property, queryAssignedElements } from 'lit/decorators.js';\nimport { FormControl, FormControlController, RovingTabindexController } from '@italia/globals';\nimport type { ItRadio } from '@italia/radio';\nimport styles from './radio-group.scss';\n\n/**\n * Radio group component - manages a collection of radio buttons\n *\n * @element it-radio-group\n * @slot - Contains the `<it-radio>` elements\n *\n */\n@customElement('it-radio-group')\nexport class ItRadioGroup extends FormControl {\n static styles = styles;\n\n static formAssociated = true;\n\n /**\n * The name of the radio group, used for form submission\n */\n @property({ type: String })\n name = '';\n\n /**\n * The currently selected value\n */\n @property({ type: String, reflect: true })\n value = '';\n\n /**\n * Whether the radio group is disabled\n */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /**\n * Whether a selection is required\n */\n @property({ type: Boolean, reflect: true })\n required = false;\n\n /**\n * Optional prop for visual styling of grouped radios (borders between radios)\n */\n @property({ type: Boolean, reflect: true })\n grouped = false;\n\n /**\n * Whether the radios are displayed inline (horizontally) or stacked (vertically)\n */\n @property({ type: Boolean, reflect: true })\n inline = false;\n\n /**\n * Get all slotted radio buttons\n */\n @queryAssignedElements()\n private _radios!: ItRadio[];\n\n @queryAssignedElements({ slot: 'label' })\n private _label!: HTMLElement[];\n\n /**\n * Roving tabindex controller for keyboard navigation\n */\n private rovingTabindex = new RovingTabindexController<ItRadio>(this, {\n getItems: () => this._radios,\n onSelect: (radio, event) => this.selectRadio(radio, event),\n direction: 'both',\n selectOnFocus: true,\n });\n\n /**\n * Form control integration\n */\n private _formController = new FormControlController(this as any, {\n value: () => this.value,\n // disabled: () => this.disabled,\n setValue: (control: FormControl, value: unknown) => {\n const radioGroup = control as ItRadioGroup;\n radioGroup.value = value as string;\n },\n });\n\n /**\n * Override: Custom validity check for radio group\n */\n override get validity(): ValidityState {\n // Fallback: create a custom ValidityState-like object\n const valid = !this.required || !!this.value;\n return {\n valid,\n valueMissing: this.required && !this.value,\n typeMismatch: false,\n patternMismatch: false,\n tooLong: false,\n tooShort: false,\n rangeUnderflow: false,\n rangeOverflow: false,\n stepMismatch: false,\n badInput: false,\n customError: false,\n } as ValidityState;\n }\n\n /**\n * Override: Check validity for radio group\n */\n override checkValidity(): boolean {\n if (this.required && !this.value) {\n return false;\n }\n return true;\n }\n\n /**\n * Override: Report validity for radio group\n */\n override reportValidity(): boolean {\n const isValid = this.checkValidity();\n this.handleValidationMessages();\n this._updateInvalidState();\n return isValid;\n }\n\n /** Sets a custom validation message. Pass an empty string to restore validity. */\n public override setCustomValidity(message: string) {\n // Only trigger validation state if message is non-empty (actual error)\n // Empty message during init or after correction should not trigger invalid state initially\n\n this.validationMessage = message;\n this.formControlController.updateValidity();\n // Update aria-invalid on group and children immediately\n this._updateInvalidState();\n }\n\n protected override handleValidationMessages() {\n const _v = this.validity;\n if (!this.customValidation) {\n if (_v.valueMissing) {\n this.setCustomValidity(this.$t('validityRequired'));\n } else this.setCustomValidity('');\n }\n }\n\n private _updateInvalidState() {\n // Only show aria-invalid if validation has been triggered (ARIA best practice)\n if (!this.formControlController.submittedOnce) {\n return;\n }\n\n const invalid = this.checkValidity() === false || !!this.validationMessage;\n if (invalid) this.setAttribute('aria-invalid', 'true');\n else this.removeAttribute('aria-invalid');\n this._radios?.forEach((r) => {\n if (invalid) r.setAttribute('aria-invalid', 'true');\n else r.removeAttribute('aria-invalid');\n });\n\n // Update validation message in light DOM\n this._updateValidationMessage();\n }\n\n /**\n * Update validation message in light DOM (for aria-describedby cross-boundary support)\n */\n private _updateValidationMessage() {\n const validityMessage = this.validationMessage;\n const messageId = `invalid-feedback-${this._id}`;\n\n // Find or create validation message element in light DOM\n let messageEl = this.querySelector(`[slot=\"validation-message\"]`);\n\n if (validityMessage && validityMessage.length > 0) {\n // Create message element if it doesn't exist\n if (!messageEl) {\n messageEl = document.createElement('div');\n messageEl.setAttribute('slot', 'validation-message');\n this.appendChild(messageEl);\n }\n\n // Update message content and attributes\n messageEl.id = messageId;\n messageEl.className = 'form-feedback just-validate-error-label';\n messageEl.setAttribute('role', 'alert');\n messageEl.removeAttribute('hidden');\n\n const labelText = this._label?.[0]?.textContent || '';\n messageEl.innerHTML = `<span class=\"visually-hidden\">${labelText}: </span>${validityMessage}`;\n\n // Update aria-describedby on host\n const existingDescribedBy = this._ariaAttributes['aria-describedby'] || '';\n const ariaDescribedBy = existingDescribedBy ? `${existingDescribedBy} ${messageId}` : messageId;\n this.setAttribute('aria-describedby', ariaDescribedBy);\n } else {\n // Remove message element if validation passed\n if (messageEl) {\n messageEl.remove();\n }\n\n // Update aria-describedby (remove message id)\n const existingDescribedBy = this._ariaAttributes['aria-describedby'] || '';\n if (existingDescribedBy) {\n this.setAttribute('aria-describedby', existingDescribedBy);\n } else {\n this.removeAttribute('aria-describedby');\n }\n }\n }\n\n connectedCallback() {\n super.connectedCallback?.();\n this._handleReady();\n this.setAttribute('role', 'radiogroup');\n }\n\n firstUpdated() {\n const checkedRadio = this.querySelector<ItRadio>('it-radio[checked]');\n if (checkedRadio) {\n this.value = checkedRadio.value;\n }\n this.updateRadios();\n }\n\n private async updateRadios() {\n if (!this.hasUpdated) {\n // Initial validation has to happen after the initial render to allow\n // the buttons to be queries from the rendered <slot> element\n await this.updateComplete;\n }\n const radios = this.querySelectorAll<ItRadio>('it-radio');\n // eslint-disable-next-line no-return-assign, no-param-reassign\n radios.forEach((r) => {\n // eslint-disable-next-line no-param-reassign\n r.checked = r.value === this.value;\n });\n }\n\n disconnectedCallback() {\n super.disconnectedCallback?.();\n }\n\n /**\n * Sync group value from checked radio (initialization)\n */\n private _syncValueFromRadios() {\n if (!this._radios) {\n return;\n }\n\n // Find the first checked radio\n const checkedRadio = this._radios.find((r) => r.checked);\n if (checkedRadio) {\n // Sync the group value from the checked radio\n this.value = checkedRadio.value;\n }\n }\n\n /**\n * PUBLIC API: Called by radio buttons to select themselves\n */\n selectRadio(radio: ItRadio, event: KeyboardEvent | PointerEvent | MouseEvent): void {\n if (radio.disabled || this.disabled) {\n return;\n }\n\n this.value = radio.value;\n\n // Uncheck other radios using their public API\n this._radios.forEach((r) => {\n if (r !== radio) {\n // eslint-disable-next-line no-param-reassign\n r.checked = false;\n } else {\n // eslint-disable-next-line no-param-reassign\n r.checked = true;\n }\n });\n\n // If validation was already triggered, update state after selection\n if (this.formControlController.submittedOnce) {\n // For native validation, clear error if now valid\n if (!this.customValidation) {\n this.handleValidationMessages();\n this._updateInvalidState();\n }\n // For custom validation (JustValidate), the external validator will call setCustomValidity\n // but we still update the state based on current validationMessage\n else {\n this._updateInvalidState();\n }\n }\n\n if (event.type === 'click' || event.type === 'pointerdown') {\n this._handleClick(event);\n } else {\n this._handleChange(event);\n }\n }\n\n /**\n * PUBLIC API: Handle keyboard navigation from radio buttons\n */\n handleRadioKeyDown(radio: ItRadio, event: KeyboardEvent): void {\n // Delegate to roving tabindex controller\n const handled = this.rovingTabindex.handleKeydown(radio, event);\n if (handled) this._handleFocus(event);\n else this._handleBlur(event);\n }\n\n /**\n * Synchronize radio button states with group state\n */\n private _updateRadiosState() {\n if (!this._radios || this._radios.length === 0) {\n return;\n }\n\n this._radios.forEach((radio) => {\n // Set checked state based on value\n // eslint-disable-next-line no-param-reassign\n radio.checked = radio.value === this.value;\n\n // Sync disabled state from group to radios\n // Note: We don't override individual radio's disabled state\n // If the group is disabled, all radios should be disabled\n // But individual radios can be disabled independently\n if (this.disabled) {\n // eslint-disable-next-line no-param-reassign\n radio.disabled = true;\n }\n });\n\n // Update tabindex using roving tabindex controller\n // Priority: checked and enabled > first enabled > 0\n let tabbableIndex = 0;\n\n // First, try to find a checked radio that is not disabled\n const checkedEnabledIndex = this._radios.findIndex((r) => r.checked && !r.disabled);\n if (checkedEnabledIndex >= 0) {\n tabbableIndex = checkedEnabledIndex;\n } else {\n // If no checked enabled radio, find the first enabled radio\n const firstEnabledIndex = this._radios.findIndex((r) => !r.disabled);\n if (firstEnabledIndex >= 0) {\n tabbableIndex = firstEnabledIndex;\n }\n // If all radios are disabled, tabbableIndex stays 0 (but controller will set all to -1)\n }\n\n this.rovingTabindex.updateTabindices(tabbableIndex);\n }\n\n /**\n * Sync group state (name, grouped, inline, required) to child radios\n * This replaces the need for requestUpdate() calls\n */\n private _syncGroupStateToRadios() {\n if (!this._radios || this._radios.length === 0) {\n return;\n }\n\n const groupState = {\n name: this.name,\n grouped: this.grouped,\n inline: this.inline,\n required: this.required,\n };\n\n this._radios.forEach((radio) => {\n radio.syncFromGroup(groupState);\n });\n }\n\n updated(changed: PropertyValues) {\n super.updated(changed);\n\n // Update radios when value or name changes\n if (changed.has('value')) {\n this._updateRadiosState();\n this.dispatchEvent(new Event('it-change', { bubbles: true }));\n // Re-validate after value change (for native validation) only if validation was already triggered\n if (!this.customValidation && this.formControlController.submittedOnce) {\n this.handleValidationMessages();\n this._updateInvalidState();\n }\n }\n\n // If validation message changed, update aria-invalid on group and children\n if (changed.has('validationMessage')) {\n this._updateInvalidState();\n }\n\n // If relevant group properties changed, sync to child radios\n const relevant = ['grouped', 'inline', 'name', 'required', 'disabled'];\n const hasChanged = Array.from(changed.keys()).some((k) => relevant.includes(String(k)));\n if (hasChanged && this._radios?.length) {\n this._syncGroupStateToRadios();\n }\n }\n\n /**\n * Handle slot changes (when radios are added/removed)\n */\n private _handleSlotChange = () => {\n this._syncValueFromRadios();\n this._updateRadiosState();\n // Sync group state to newly added radios\n this._syncGroupStateToRadios();\n };\n\n private _handleLabelSlotChange = () => {\n const labelId = this.generateId('it-radio-group-label');\n this._label[0]?.setAttribute('id', labelId);\n this.setAttribute('aria-labelledby', labelId);\n };\n\n /**\n * Render the component\n */\n render() {\n const validityMessage = this.validationMessage;\n const invalid = validityMessage?.length > 0 || (!this.customValidation && this?.checkValidity() === false);\n\n const groupWrapperClasses = this.composeClass(\n 'it-radio-group',\n 'it-form__control',\n this.inline && !this.grouped ? 'it-radio-group-inline' : '',\n this.grouped && !this.inline ? 'it-radio-group-stacked' : '',\n invalid ? 'is-invalid' : '',\n );\n\n return html`<slot name=\"label\" @slotchange=${this._handleLabelSlotChange}></slot>\n <div class=${groupWrapperClasses}>\n <slot @slotchange=${this._handleSlotChange}></slot>\n </div>\n <slot name=\"validation-message\"></slot>`;\n }\n}\n\n// Declare custom element\ndeclare global {\n interface HTMLElementTagNameMap {\n 'it-radio-group': ItRadioGroup;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { _ as __decorate, a as __metadata, B as BaseComponent } from '../form-control-CdxVvcex.js';
1
+ import { _ as __decorate, a as __metadata, B as BaseComponent } from '../index-BDMo2_H7.js';
2
2
  import { css, html } from 'lit';
3
3
  import { property, state, queryAssignedElements, customElement } from 'lit/decorators.js';
4
4
  import { when } from 'lit/directives/when.js';
@@ -135,11 +135,6 @@ a:hover {
135
135
  color: var(--bs-color-link-hover);
136
136
  }
137
137
 
138
- a:not([href]):not([class]), a:not([href]):not([class]):hover {
139
- color: inherit;
140
- text-decoration: none;
141
- }
142
-
143
138
  pre,
144
139
  code,
145
140
  kbd,
@@ -1 +1 @@
1
- {"version":3,"file":"it-radio.js","sources":["../../../src/it-radio.ts"],"sourcesContent":["import { BaseComponent } from '@italia/globals';\nimport { html } from 'lit';\nimport { customElement, property, queryAssignedElements, state } from 'lit/decorators.js';\nimport { when } from 'lit/directives/when.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { type ItRadioGroup } from '@italia/radio';\n\nimport styles from './radio.scss';\n\n@customElement('it-radio')\nexport class ItRadio extends BaseComponent {\n static styles = styles;\n\n /** The radio's value attribute */\n @property({ type: String, reflect: true })\n value = '';\n\n /** Whether the radio is disabled */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /** Draws the radio in a checked state. */\n @property({ type: Boolean, reflect: true })\n checked = false;\n\n /** The input's help text. */\n @property({ type: String, attribute: 'support-text' })\n supportText = '';\n\n /**\n * Internal reactive state synced from group\n * These replace the old getters that read from this.group\n */\n @state()\n private _name = '';\n\n @state()\n private _grouped = false;\n\n @state()\n private _required = false;\n\n @state()\n private _inline = false;\n\n @queryAssignedElements({ slot: 'label' })\n labelElements!: HTMLElement[];\n\n get label(): string {\n if (this.labelElements.length > 0) {\n return this.labelElements[0].innerText.trim();\n }\n return '';\n }\n\n get group(): ItRadioGroup | null {\n return this.closest('it-radio-group');\n }\n\n // Public getters now read from internal state (reactive)\n get name(): string {\n return this._name || this.group?.name || '';\n }\n\n get grouped(): boolean {\n return this._grouped;\n }\n\n get required(): boolean {\n return this._required;\n }\n\n get inline(): boolean {\n return this._inline;\n }\n\n get invalid(): boolean {\n // Read aria-invalid explicitly from the group: only the string \"true\" should be considered invalid\n const aria = this.group?.getAttribute ? this.group.getAttribute('aria-invalid') : null;\n return aria === 'true';\n }\n\n /**\n * PUBLIC API: Called by group to sync state\n * This replaces the need for requestUpdate() calls\n */\n syncFromGroup(groupState: { name?: string; grouped?: boolean; required?: boolean; inline?: boolean }): void {\n if (groupState.name !== undefined) this._name = groupState.name;\n if (groupState.grouped !== undefined) this._grouped = groupState.grouped;\n if (groupState.required !== undefined) this._required = groupState.required;\n if (groupState.inline !== undefined) this._inline = groupState.inline;\n }\n /**\n * Activate the radio via the group's public API\n */\n\n private activate(event: KeyboardEvent | PointerEvent | MouseEvent): void {\n if (this.checked || this.disabled) {\n return;\n }\n\n // Use the group's public API if available\n if (this.group) {\n this.group.selectRadio(this, event);\n } else {\n // Fallback if no group (shouldn't happen in normal usage)\n this.checked = true;\n }\n }\n\n /**\n * Handle keyup for Space key\n */\n private handleKeyup = (event: KeyboardEvent): void => {\n if (event.code === 'Space') {\n event.preventDefault();\n this.activate(event);\n }\n };\n\n /**\n * Handle keydown - delegate arrow keys to the group\n */\n private handleKeydown = (event: KeyboardEvent): void => {\n // Prevent Space from scrolling the page\n if (event.code === 'Space') {\n event.preventDefault();\n return;\n }\n\n // Let Tab and Shift+Tab work normally for navigation\n if (event.key === 'Tab') {\n this.group?.handleRadioKeyDown(this, event);\n return;\n }\n\n // Only prevent default for arrow keys (to prevent page scrolling)\n if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(event.key)) {\n event.preventDefault();\n }\n\n // Delegate keyboard navigation to the group's public API\n this.group?.handleRadioKeyDown(this, event);\n };\n\n /**\n * Handle click on the host\n */\n private handleClick = (event: PointerEvent | MouseEvent): void => {\n this.activate(event);\n };\n\n override connectedCallback() {\n super.connectedCallback?.();\n\n // Set role on host for screen reader context\n this.setAttribute('role', 'radio');\n\n // Set initial tabindex if not already set (roving tabindex will be managed by group)\n if (!this.hasAttribute('tabindex')) {\n this.tabIndex = 0;\n }\n\n // Add event listeners on host\n this.addEventListener('click', this.handleClick);\n this.addEventListener('keydown', this.handleKeydown, { capture: true });\n this.addEventListener('keyup', this.handleKeyup, { capture: true });\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback?.();\n this.removeEventListener('click', this.handleClick);\n this.removeEventListener('keydown', this.handleKeydown, { capture: true });\n this.removeEventListener('keyup', this.handleKeyup, { capture: true });\n }\n\n override updated(changedProperties: Map<string | number | symbol, unknown>) {\n super.updated?.(changedProperties);\n\n // Update ARIA attributes on host\n if (changedProperties.has('checked')) {\n this.setAttribute('aria-checked', this.checked ? 'true' : 'false');\n }\n\n if (changedProperties.has('disabled')) {\n if (this.disabled) {\n this.setAttribute('aria-disabled', 'true');\n } else {\n this.removeAttribute('aria-disabled');\n }\n }\n\n // Sync name attribute from internal state\n if (changedProperties.has('_name')) {\n if (this._name) {\n this.setAttribute('name', this._name);\n } else {\n this.removeAttribute('name');\n }\n }\n\n // Sync aria-required from internal state\n if (changedProperties.has('_required')) {\n if (this._required) {\n this.setAttribute('aria-required', 'true');\n } else {\n this.removeAttribute('aria-required');\n }\n }\n\n // logger\n if (!this.label) {\n this.logger.warn(`Label is required to ensure accessibility. Please, define a label for <it-radio/> .`);\n }\n }\n\n /**\n * Render internal structure (like Spectrum)\n * Just visual elements, no role/aria/events here (they're on the host)\n */\n // eslint-disable-next-line class-methods-use-this\n private _renderInput() {\n // Render visual elements like Spectrum does\n // #input = container, #button = visual circle\n const inputRender = html`\n <div id=\"input\" part=\"input\"></div>\n <span id=\"button\" part=\"button\" class=\"form-check-input\"></span>\n `;\n\n return inputRender;\n }\n\n // Render the UI as a function of component state\n override render() {\n const supportTextId = `${this._id}-support-text`;\n\n const supportTextRender = html` ${when(\n this.supportText,\n () =>\n html`<slot name=\"helpText\"><small class=\"form-text\" id=\"${supportTextId}\">${this.supportText}</small></slot>`,\n )}`;\n\n const wrapperClasses = this.composeClass(\n 'form-check',\n this.inline && !this.grouped ? 'form-check-inline' : '',\n this.grouped && !this.inline ? 'form-check-group' : '',\n );\n const ariaDescribedBy = this.composeClass(\n this.supportText?.length > 0 ? supportTextId : '',\n this._ariaAttributes['aria-describedby']?.length > 0 ? this._ariaAttributes['aria-describedby'] : '',\n );\n const controlClasses = this.composeClass('radio-control', this.grouped ? 'radio-control-grouped' : '');\n const labelClasses = this.composeClass('radio-control-label', this.disabled ? 'disabled' : '');\n\n return html`\n <div class=\"${wrapperClasses}\" part=\"input-wrapper\" aria-describedby=\"${ifDefined(ariaDescribedBy || undefined)}\">\n <div id=\"radio-control\" part=\"radio-control\" class=\"${controlClasses}\">\n ${this._renderInput()}\n <span part=\"label\" class=\"${labelClasses}\"><slot name=\"label\">${this.label}</slot></span>\n </div>\n ${supportTextRender}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'it-radio': ItRadio;\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
1
+ {"version":3,"file":"it-radio.js","sources":["../../../src/it-radio.ts"],"sourcesContent":["import { BaseComponent } from '@italia/globals';\nimport { html } from 'lit';\nimport { customElement, property, queryAssignedElements, state } from 'lit/decorators.js';\nimport { when } from 'lit/directives/when.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { type ItRadioGroup } from '@italia/radio';\n\nimport styles from './radio.scss';\n\n@customElement('it-radio')\nexport class ItRadio extends BaseComponent {\n static styles = styles;\n\n /** The radio's value attribute */\n @property({ type: String, reflect: true })\n value = '';\n\n /** Whether the radio is disabled */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /** Draws the radio in a checked state. */\n @property({ type: Boolean, reflect: true })\n checked = false;\n\n /** The input's help text. */\n @property({ type: String, attribute: 'support-text' })\n supportText = '';\n\n /**\n * Internal reactive state synced from group\n * These replace the old getters that read from this.group\n */\n @state()\n private _name = '';\n\n @state()\n private _grouped = false;\n\n @state()\n private _required = false;\n\n @state()\n private _inline = false;\n\n @queryAssignedElements({ slot: 'label' })\n labelElements!: HTMLElement[];\n\n get label(): string {\n if (this.labelElements.length > 0) {\n return this.labelElements[0].innerText.trim();\n }\n return '';\n }\n\n get group(): ItRadioGroup | null {\n return this.closest('it-radio-group');\n }\n\n // Public getters now read from internal state (reactive)\n get name(): string {\n return this._name || this.group?.name || '';\n }\n\n get grouped(): boolean {\n return this._grouped;\n }\n\n get required(): boolean {\n return this._required;\n }\n\n get inline(): boolean {\n return this._inline;\n }\n\n get invalid(): boolean {\n // Read aria-invalid explicitly from the group: only the string \"true\" should be considered invalid\n const aria = this.group?.getAttribute ? this.group.getAttribute('aria-invalid') : null;\n return aria === 'true';\n }\n\n /**\n * PUBLIC API: Called by group to sync state\n * This replaces the need for requestUpdate() calls\n */\n syncFromGroup(groupState: { name?: string; grouped?: boolean; required?: boolean; inline?: boolean }): void {\n if (groupState.name !== undefined) this._name = groupState.name;\n if (groupState.grouped !== undefined) this._grouped = groupState.grouped;\n if (groupState.required !== undefined) this._required = groupState.required;\n if (groupState.inline !== undefined) this._inline = groupState.inline;\n }\n /**\n * Activate the radio via the group's public API\n */\n\n private activate(event: KeyboardEvent | PointerEvent | MouseEvent): void {\n if (this.checked || this.disabled) {\n return;\n }\n\n // Use the group's public API if available\n if (this.group) {\n this.group.selectRadio(this, event);\n } else {\n // Fallback if no group (shouldn't happen in normal usage)\n this.checked = true;\n }\n }\n\n /**\n * Handle keyup for Space key\n */\n private handleKeyup = (event: KeyboardEvent): void => {\n if (event.code === 'Space') {\n event.preventDefault();\n this.activate(event);\n }\n };\n\n /**\n * Handle keydown - delegate arrow keys to the group\n */\n private handleKeydown = (event: KeyboardEvent): void => {\n // Prevent Space from scrolling the page\n if (event.code === 'Space') {\n event.preventDefault();\n return;\n }\n\n // Let Tab and Shift+Tab work normally for navigation\n if (event.key === 'Tab') {\n this.group?.handleRadioKeyDown(this, event);\n return;\n }\n\n // Only prevent default for arrow keys (to prevent page scrolling)\n if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(event.key)) {\n event.preventDefault();\n }\n\n // Delegate keyboard navigation to the group's public API\n this.group?.handleRadioKeyDown(this, event);\n };\n\n /**\n * Handle click on the host\n */\n private handleClick = (event: PointerEvent | MouseEvent): void => {\n this.activate(event);\n };\n\n override connectedCallback() {\n super.connectedCallback?.();\n\n // Set role on host for screen reader context\n this.setAttribute('role', 'radio');\n\n // Set initial tabindex if not already set (roving tabindex will be managed by group)\n if (!this.hasAttribute('tabindex')) {\n this.tabIndex = 0;\n }\n\n // Add event listeners on host\n this.addEventListener('click', this.handleClick);\n this.addEventListener('keydown', this.handleKeydown, { capture: true });\n this.addEventListener('keyup', this.handleKeyup, { capture: true });\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback?.();\n this.removeEventListener('click', this.handleClick);\n this.removeEventListener('keydown', this.handleKeydown, { capture: true });\n this.removeEventListener('keyup', this.handleKeyup, { capture: true });\n }\n\n override updated(changedProperties: Map<string | number | symbol, unknown>) {\n super.updated?.(changedProperties);\n\n // Update ARIA attributes on host\n if (changedProperties.has('checked')) {\n this.setAttribute('aria-checked', this.checked ? 'true' : 'false');\n }\n\n if (changedProperties.has('disabled')) {\n if (this.disabled) {\n this.setAttribute('aria-disabled', 'true');\n } else {\n this.removeAttribute('aria-disabled');\n }\n }\n\n // Sync name attribute from internal state\n if (changedProperties.has('_name')) {\n if (this._name) {\n this.setAttribute('name', this._name);\n } else {\n this.removeAttribute('name');\n }\n }\n\n // Sync aria-required from internal state\n if (changedProperties.has('_required')) {\n if (this._required) {\n this.setAttribute('aria-required', 'true');\n } else {\n this.removeAttribute('aria-required');\n }\n }\n\n // logger\n if (!this.label) {\n this.logger.warn(`Label is required to ensure accessibility. Please, define a label for <it-radio/> .`);\n }\n }\n\n /**\n * Render internal structure (like Spectrum)\n * Just visual elements, no role/aria/events here (they're on the host)\n */\n // eslint-disable-next-line class-methods-use-this\n private _renderInput() {\n // Render visual elements like Spectrum does\n // #input = container, #button = visual circle\n const inputRender = html`\n <div id=\"input\" part=\"input\"></div>\n <span id=\"button\" part=\"button\" class=\"form-check-input\"></span>\n `;\n\n return inputRender;\n }\n\n // Render the UI as a function of component state\n override render() {\n const supportTextId = `${this._id}-support-text`;\n\n const supportTextRender = html` ${when(\n this.supportText,\n () =>\n html`<slot name=\"helpText\"><small class=\"form-text\" id=\"${supportTextId}\">${this.supportText}</small></slot>`,\n )}`;\n\n const wrapperClasses = this.composeClass(\n 'form-check',\n this.inline && !this.grouped ? 'form-check-inline' : '',\n this.grouped && !this.inline ? 'form-check-group' : '',\n );\n const ariaDescribedBy = this.composeClass(\n this.supportText?.length > 0 ? supportTextId : '',\n this._ariaAttributes['aria-describedby']?.length > 0 ? this._ariaAttributes['aria-describedby'] : '',\n );\n const controlClasses = this.composeClass('radio-control', this.grouped ? 'radio-control-grouped' : '');\n const labelClasses = this.composeClass('radio-control-label', this.disabled ? 'disabled' : '');\n\n return html`\n <div class=\"${wrapperClasses}\" part=\"input-wrapper\" aria-describedby=\"${ifDefined(ariaDescribedBy || undefined)}\">\n <div id=\"radio-control\" part=\"radio-control\" class=\"${controlClasses}\">\n ${this._renderInput()}\n <span part=\"label\" class=\"${labelClasses}\"><slot name=\"label\">${this.label}</slot></span>\n </div>\n ${supportTextRender}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'it-radio': ItRadio;\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@italia/radio",
3
3
  "description": "Web component it-radio del Design system .italia",
4
- "version": "0.1.0-alpha.2",
4
+ "version": "1.0.0-alpha.4",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -34,9 +34,9 @@
34
34
  "custom-elements.json"
35
35
  ],
36
36
  "dependencies": {
37
- "bootstrap-italia": "github:italia/bootstrap-italia#5ca55d534319deb559e1860fb0bc121113a78ebf",
37
+ "bootstrap-italia": "github:italia/bootstrap-italia#ba6eddb24194f44d1080deb24701e0603457d176",
38
38
  "lit": "^3.3.0",
39
- "@italia/globals": "^0.1.0-alpha.2"
39
+ "@italia/globals": "^1.0.0-alpha.4"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@custom-elements-manifest/analyzer": "^0.10.3",