@govbr-ds/webcomponents 2.0.0-next.46 → 2.0.0-next.47

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.
Files changed (112) hide show
  1. package/dist/cjs/br-avatar.cjs.entry.js +1 -1
  2. package/dist/cjs/br-avatar.cjs.entry.js.map +1 -1
  3. package/dist/cjs/br-avatar.entry.cjs.js.map +1 -1
  4. package/dist/cjs/br-button.br-icon.entry.cjs.js.map +1 -1
  5. package/dist/cjs/br-button_2.cjs.entry.js +1 -1
  6. package/dist/cjs/br-button_2.cjs.entry.js.map +1 -1
  7. package/dist/cjs/br-switch.cjs.entry.js +28 -2
  8. package/dist/cjs/br-switch.cjs.entry.js.map +1 -1
  9. package/dist/cjs/br-switch.entry.cjs.js.map +1 -1
  10. package/dist/cjs/br-tag.cjs.entry.js +151 -13
  11. package/dist/cjs/br-tag.cjs.entry.js.map +1 -1
  12. package/dist/cjs/br-tag.entry.cjs.js.map +1 -1
  13. package/dist/cjs/br-textarea.cjs.entry.js +32 -5
  14. package/dist/cjs/br-textarea.cjs.entry.js.map +1 -1
  15. package/dist/cjs/br-textarea.entry.cjs.js.map +1 -1
  16. package/dist/cjs/br-tooltip.cjs.entry.js +1 -1
  17. package/dist/cjs/br-upload.cjs.entry.js +15 -23
  18. package/dist/cjs/br-upload.cjs.entry.js.map +1 -1
  19. package/dist/cjs/br-upload.entry.cjs.js.map +1 -1
  20. package/dist/cjs/loader.cjs.js +1 -1
  21. package/dist/cjs/webcomponents.cjs.js +1 -1
  22. package/dist/collection/components/avatar/avatar.js +1 -1
  23. package/dist/collection/components/avatar/avatar.js.map +1 -1
  24. package/dist/collection/components/button/button.js +1 -1
  25. package/dist/collection/components/button/button.js.map +1 -1
  26. package/dist/collection/components/switch/switch.css +1 -1
  27. package/dist/collection/components/switch/switch.js +27 -1
  28. package/dist/collection/components/switch/switch.js.map +1 -1
  29. package/dist/collection/components/tag/tag.css +1 -1
  30. package/dist/collection/components/tag/tag.js +192 -14
  31. package/dist/collection/components/tag/tag.js.map +1 -1
  32. package/dist/collection/components/textarea/textarea.js +51 -5
  33. package/dist/collection/components/textarea/textarea.js.map +1 -1
  34. package/dist/collection/components/tooltip/tooltip.js +1 -1
  35. package/dist/collection/components/upload/upload.js +46 -30
  36. package/dist/collection/components/upload/upload.js.map +1 -1
  37. package/dist/components/br-avatar.js +3 -2
  38. package/dist/components/br-avatar.js.map +1 -1
  39. package/dist/components/br-breadcrumb.js +1 -1
  40. package/dist/components/br-button.js +4 -4
  41. package/dist/components/br-footer-social.js +1 -1
  42. package/dist/components/br-input.js +3 -3
  43. package/dist/components/br-message.js +1 -1
  44. package/dist/components/br-select.js +2 -2
  45. package/dist/components/br-step-item.js +1 -1
  46. package/dist/components/br-switch.js +35 -11
  47. package/dist/components/br-switch.js.map +1 -1
  48. package/dist/components/br-tag.js +166 -51
  49. package/dist/components/br-tag.js.map +1 -1
  50. package/dist/components/br-textarea.js +42 -15
  51. package/dist/components/br-textarea.js.map +1 -1
  52. package/dist/components/br-tooltip.js +15 -15
  53. package/dist/components/br-upload.js +56 -58
  54. package/dist/components/br-upload.js.map +1 -1
  55. package/dist/components/{p-DZhiQXGc.js → p-Bjt1OWm8.js} +3 -3
  56. package/dist/components/{p-ssSt5UuQ.js → p-Brhs7qAd.js} +6 -7
  57. package/dist/components/p-Brhs7qAd.js.map +1 -0
  58. package/dist/custom-elements.json +273 -9
  59. package/dist/esm/br-avatar.entry.js +1 -1
  60. package/dist/esm/br-avatar.entry.js.map +1 -1
  61. package/dist/esm/br-button.br-icon.entry.js.map +1 -1
  62. package/dist/esm/br-button_2.entry.js +1 -1
  63. package/dist/esm/br-button_2.entry.js.map +1 -1
  64. package/dist/esm/br-switch.entry.js +28 -2
  65. package/dist/esm/br-switch.entry.js.map +1 -1
  66. package/dist/esm/br-tag.entry.js +151 -13
  67. package/dist/esm/br-tag.entry.js.map +1 -1
  68. package/dist/esm/br-textarea.entry.js +32 -5
  69. package/dist/esm/br-textarea.entry.js.map +1 -1
  70. package/dist/esm/br-tooltip.entry.js +1 -1
  71. package/dist/esm/br-upload.entry.js +15 -23
  72. package/dist/esm/br-upload.entry.js.map +1 -1
  73. package/dist/esm/loader.js +1 -1
  74. package/dist/esm/webcomponents.js +1 -1
  75. package/dist/hydrate/index.js +239 -50
  76. package/dist/hydrate/index.mjs +239 -50
  77. package/dist/types/components/switch/switch.d.ts +8 -3
  78. package/dist/types/components/tag/tag.d.ts +45 -3
  79. package/dist/types/components/textarea/textarea.d.ts +18 -0
  80. package/dist/types/components/upload/upload.d.ts +14 -4
  81. package/dist/types/components.d.ts +40 -6
  82. package/dist/webcomponents/br-avatar.entry.esm.js.map +1 -1
  83. package/dist/webcomponents/br-button.br-icon.entry.esm.js.map +1 -1
  84. package/dist/webcomponents/br-switch.entry.esm.js.map +1 -1
  85. package/dist/webcomponents/br-tag.entry.esm.js.map +1 -1
  86. package/dist/webcomponents/br-textarea.entry.esm.js.map +1 -1
  87. package/dist/webcomponents/br-upload.entry.esm.js.map +1 -1
  88. package/dist/webcomponents/{p-fa0aeb0f.entry.js → p-3f18e20a.entry.js} +5 -6
  89. package/dist/webcomponents/p-3f18e20a.entry.js.map +1 -0
  90. package/dist/webcomponents/{p-8b15dfc8.entry.js → p-6dba4bb1.entry.js} +10 -10
  91. package/dist/webcomponents/{p-df6e707a.entry.js → p-7251c80f.entry.js} +4 -3
  92. package/dist/webcomponents/p-7251c80f.entry.js.map +1 -0
  93. package/dist/webcomponents/{p-24f6adad.entry.js → p-73794ac8.entry.js} +42 -16
  94. package/dist/webcomponents/p-73794ac8.entry.js.map +1 -0
  95. package/dist/webcomponents/{p-abf81334.entry.js → p-82dec3b6.entry.js} +36 -12
  96. package/dist/webcomponents/p-82dec3b6.entry.js.map +1 -0
  97. package/dist/webcomponents/{p-a802ca08.entry.js → p-861b8ebf.entry.js} +55 -58
  98. package/dist/webcomponents/p-861b8ebf.entry.js.map +1 -0
  99. package/dist/webcomponents/{p-761f7798.entry.js → p-d3463d4a.entry.js} +161 -48
  100. package/dist/webcomponents/p-d3463d4a.entry.js.map +1 -0
  101. package/dist/webcomponents/webcomponents.esm.js +1 -1
  102. package/dist/webcomponents.html-custom-data.json +15 -3
  103. package/package.json +1 -1
  104. package/dist/components/p-ssSt5UuQ.js.map +0 -1
  105. package/dist/webcomponents/p-24f6adad.entry.js.map +0 -1
  106. package/dist/webcomponents/p-761f7798.entry.js.map +0 -1
  107. package/dist/webcomponents/p-a802ca08.entry.js.map +0 -1
  108. package/dist/webcomponents/p-abf81334.entry.js.map +0 -1
  109. package/dist/webcomponents/p-df6e707a.entry.js.map +0 -1
  110. package/dist/webcomponents/p-fa0aeb0f.entry.js.map +0 -1
  111. /package/dist/components/{p-DZhiQXGc.js.map → p-Bjt1OWm8.js.map} +0 -0
  112. /package/dist/webcomponents/{p-8b15dfc8.entry.js.map → p-6dba4bb1.entry.js.map} +0 -0
@@ -7570,6 +7570,17 @@
7570
7570
  }
7571
7571
  }
7572
7572
  },
7573
+ {
7574
+ "kind": "method",
7575
+ "name": "getAccessibilityLabel",
7576
+ "privacy": "private",
7577
+ "return": {
7578
+ "type": {
7579
+ "text": "string"
7580
+ }
7581
+ },
7582
+ "description": "Determina o texto a ser usado para acessibilidade quando não há label visível"
7583
+ },
7573
7584
  {
7574
7585
  "kind": "field",
7575
7586
  "name": "handleCheckedChange",
@@ -7585,6 +7596,17 @@
7585
7596
  "name": "toggleChecked",
7586
7597
  "description": "Inverte o valor da prop `checked`"
7587
7598
  },
7599
+ {
7600
+ "kind": "method",
7601
+ "name": "hasVisibleText",
7602
+ "privacy": "private",
7603
+ "return": {
7604
+ "type": {
7605
+ "text": "boolean"
7606
+ }
7607
+ },
7608
+ "description": "Verifica se o componente tem texto visível (via slot ou label)"
7609
+ },
7588
7610
  {
7589
7611
  "kind": "method",
7590
7612
  "name": "getCssClassMap",
@@ -8859,7 +8881,7 @@
8859
8881
  "type": {
8860
8882
  "text": "'small' | 'medium' | 'large'"
8861
8883
  },
8862
- "default": "DENSITY_SMALL",
8884
+ "default": "DENSITY_MEDIUM",
8863
8885
  "description": "A propriedade 'density' permite definir a densidade do componente.\nAceita valores como 'small', 'medium' e 'large', e é refletida no DOM."
8864
8886
  },
8865
8887
  {
@@ -8878,7 +8900,7 @@
8878
8900
  "text": "boolean"
8879
8901
  },
8880
8902
  "default": "false",
8881
- "description": "Status deve ser exibido."
8903
+ "description": "Transforma a tag em um indicador de status, com aparência circular.\nÉ flexível podendo ser utilizado com label ou apenas a superfície circular (informação é transmitida por meio de cores)."
8882
8904
  },
8883
8905
  {
8884
8906
  "kind": "field",
@@ -8907,6 +8929,24 @@
8907
8929
  "default": "false",
8908
8930
  "description": "Tag deve estar desabilitado."
8909
8931
  },
8932
+ {
8933
+ "kind": "field",
8934
+ "name": "ariaLabel",
8935
+ "type": {
8936
+ "text": "string"
8937
+ },
8938
+ "default": "null",
8939
+ "description": "Rótulo personalizado para leitores de tela.\nQuando fornecido, substitui completamente o texto visível para usuários de leitores de tela.\nÚtil quando o texto visível não é suficientemente descritivo (ex: ícones, abreviações)."
8940
+ },
8941
+ {
8942
+ "kind": "field",
8943
+ "name": "ariaDescribedby",
8944
+ "type": {
8945
+ "text": "string"
8946
+ },
8947
+ "default": "null",
8948
+ "description": "ID do elemento que fornece descrição adicional da tag.\nReferencia um elemento na página que contém informações complementares sobre a tag.\nA descrição é lida após o conteúdo principal, fornecendo contexto extra aos usuários de leitores de tela.\nExemplo: aria-describedby=\"help-status\" onde existe <div id=\"help-status\">Aguardando aprovação</div>"
8949
+ },
8910
8950
  {
8911
8951
  "kind": "field",
8912
8952
  "name": "selectedClassValue",
@@ -8952,6 +8992,72 @@
8952
8992
  }
8953
8993
  ]
8954
8994
  },
8995
+ {
8996
+ "kind": "method",
8997
+ "name": "handleCheckedChange",
8998
+ "parameters": [
8999
+ {
9000
+ "name": "event",
9001
+ "type": {
9002
+ "text": "CustomEvent"
9003
+ }
9004
+ }
9005
+ ]
9006
+ },
9007
+ {
9008
+ "kind": "field",
9009
+ "name": "handleKeyDown",
9010
+ "privacy": "private",
9011
+ "description": "Permite navegação por teclado (setas) entre tags do tipo radio (seleção unica).\nFunciona apenas quando 'interactionSelect' é true e 'multiple' é false.\nIgnora tags desabilitadas.",
9012
+ "parameters": [
9013
+ {
9014
+ "description": "Evento de teclado",
9015
+ "name": "event"
9016
+ }
9017
+ ]
9018
+ },
9019
+ {
9020
+ "kind": "method",
9021
+ "name": "selectNextRadio",
9022
+ "privacy": "private"
9023
+ },
9024
+ {
9025
+ "kind": "method",
9026
+ "name": "selectPreviousRadio",
9027
+ "privacy": "private"
9028
+ },
9029
+ {
9030
+ "kind": "method",
9031
+ "name": "selectRadioByStep",
9032
+ "privacy": "private",
9033
+ "parameters": [
9034
+ {
9035
+ "name": "step",
9036
+ "type": {
9037
+ "text": "number"
9038
+ }
9039
+ }
9040
+ ]
9041
+ },
9042
+ {
9043
+ "kind": "method",
9044
+ "name": "selectRadioByIndex",
9045
+ "privacy": "private",
9046
+ "parameters": [
9047
+ {
9048
+ "name": "radios",
9049
+ "type": {
9050
+ "text": "HTMLElement[]"
9051
+ }
9052
+ },
9053
+ {
9054
+ "name": "index",
9055
+ "type": {
9056
+ "text": "number"
9057
+ }
9058
+ }
9059
+ ]
9060
+ },
8955
9061
  {
8956
9062
  "kind": "method",
8957
9063
  "name": "getCssClassMap",
@@ -8962,6 +9068,81 @@
8962
9068
  }
8963
9069
  }
8964
9070
  },
9071
+ {
9072
+ "kind": "method",
9073
+ "name": "getTagAttributes",
9074
+ "privacy": "private"
9075
+ },
9076
+ {
9077
+ "kind": "method",
9078
+ "name": "getAriaDescribedBy",
9079
+ "privacy": "private",
9080
+ "return": {
9081
+ "type": {
9082
+ "text": "string | null"
9083
+ }
9084
+ }
9085
+ },
9086
+ {
9087
+ "kind": "method",
9088
+ "name": "hasContent",
9089
+ "privacy": "private",
9090
+ "return": {
9091
+ "type": {
9092
+ "text": "boolean"
9093
+ }
9094
+ },
9095
+ "parameters": [
9096
+ {
9097
+ "name": "value",
9098
+ "type": {
9099
+ "text": "string"
9100
+ },
9101
+ "description": "String a ser verificada"
9102
+ }
9103
+ ],
9104
+ "description": "Verifica se uma string possui conteúdo válido (não vazia após remover espaços em branco)."
9105
+ },
9106
+ {
9107
+ "kind": "method",
9108
+ "name": "getAriaLabel",
9109
+ "privacy": "private",
9110
+ "return": {
9111
+ "type": {
9112
+ "text": "string | null"
9113
+ }
9114
+ }
9115
+ },
9116
+ {
9117
+ "kind": "method",
9118
+ "name": "getRole",
9119
+ "privacy": "private",
9120
+ "return": {
9121
+ "type": {
9122
+ "text": "string | null"
9123
+ }
9124
+ }
9125
+ },
9126
+ {
9127
+ "kind": "method",
9128
+ "name": "getAriaChecked",
9129
+ "privacy": "private",
9130
+ "return": {
9131
+ "type": {
9132
+ "text": "string | null"
9133
+ }
9134
+ }
9135
+ },
9136
+ {
9137
+ "kind": "method",
9138
+ "name": "getAriaDisabled",
9139
+ "privacy": "private",
9140
+ "return": {
9141
+ "type": {
9142
+ "text": "string | null"
9143
+ }
9144
+ }
9145
+ },
8965
9146
  {
8966
9147
  "kind": "method",
8967
9148
  "name": "renderIcon",
@@ -8999,16 +9180,32 @@
8999
9180
  },
9000
9181
  {
9001
9182
  "kind": "method",
9002
- "name": "handleCheckedChange",
9183
+ "name": "renderMainTagContent",
9184
+ "privacy": "private"
9185
+ },
9186
+ {
9187
+ "kind": "method",
9188
+ "name": "renderStatusLayout",
9189
+ "privacy": "private",
9003
9190
  "parameters": [
9004
9191
  {
9005
- "name": "event",
9192
+ "name": "content",
9006
9193
  "type": {
9007
- "text": "CustomEvent"
9194
+ "text": "JSX.Element"
9008
9195
  }
9009
9196
  }
9010
9197
  ]
9011
9198
  },
9199
+ {
9200
+ "kind": "field",
9201
+ "name": "handleInputChange",
9202
+ "privacy": "private"
9203
+ },
9204
+ {
9205
+ "kind": "method",
9206
+ "name": "renderInteractionSelectTag",
9207
+ "privacy": "private"
9208
+ },
9012
9209
  {
9013
9210
  "kind": "method",
9014
9211
  "name": "render"
@@ -9105,6 +9302,20 @@
9105
9302
  "type": {
9106
9303
  "text": "boolean"
9107
9304
  }
9305
+ },
9306
+ {
9307
+ "name": "aria-label",
9308
+ "fieldName": "ariaLabel",
9309
+ "type": {
9310
+ "text": "string"
9311
+ }
9312
+ },
9313
+ {
9314
+ "name": "aria-describedby",
9315
+ "fieldName": "ariaDescribedby",
9316
+ "type": {
9317
+ "text": "string"
9318
+ }
9108
9319
  }
9109
9320
  ],
9110
9321
  "tagName": "br-tag",
@@ -9192,6 +9403,14 @@
9192
9403
  },
9193
9404
  "description": "Texto exibido dentro do input quando está vazio, fornecendo uma dica ou sugestão ao usuário."
9194
9405
  },
9406
+ {
9407
+ "kind": "field",
9408
+ "name": "ariaLabel",
9409
+ "type": {
9410
+ "text": "string"
9411
+ },
9412
+ "description": "Texto alternativo para acessibilidade quando não há label visível.\nFornece um rótulo para tecnologias assistivas sem exibir visualmente."
9413
+ },
9195
9414
  {
9196
9415
  "kind": "field",
9197
9416
  "name": "customId",
@@ -9285,6 +9504,28 @@
9285
9504
  ],
9286
9505
  "description": "Define um novo valor para o textarea."
9287
9506
  },
9507
+ {
9508
+ "kind": "method",
9509
+ "name": "getDescribedBy",
9510
+ "privacy": "private",
9511
+ "return": {
9512
+ "type": {
9513
+ "text": "string"
9514
+ }
9515
+ },
9516
+ "description": "Retorna os ids para o atributo aria-describedby do textarea"
9517
+ },
9518
+ {
9519
+ "kind": "method",
9520
+ "name": "getAccessibilityLabel",
9521
+ "privacy": "private",
9522
+ "return": {
9523
+ "type": {
9524
+ "text": "string"
9525
+ }
9526
+ },
9527
+ "description": "Determina o texto a ser usado para acessibilidade quando não há label\nOrdem de prioridade:\n - aria-label do elemento host\n - propriedade ariaLabel do componente\n - placeholder\n - texto padrão (\"Campo de texto\")"
9528
+ },
9288
9529
  {
9289
9530
  "kind": "method",
9290
9531
  "name": "getCssClassMap",
@@ -9322,6 +9563,13 @@
9322
9563
  "text": "string"
9323
9564
  }
9324
9565
  },
9566
+ {
9567
+ "name": "aria-label",
9568
+ "fieldName": "ariaLabel",
9569
+ "type": {
9570
+ "text": "string"
9571
+ }
9572
+ },
9325
9573
  {
9326
9574
  "name": "custom-id",
9327
9575
  "fieldName": "customId",
@@ -9906,11 +10154,20 @@
9906
10154
  "name": "Upload",
9907
10155
  "slots": [
9908
10156
  {
9909
- "description": "Descrição do slot",
10157
+ "description": "Texto personalizado para o botão de upload. Se não fornecido, será exibido \"Selecione o arquivo\" como texto padrão. Use este slot para personalizar o texto do botão de acordo com o contexto do upload, por exemplo: \"Anexar documentos\", \"Enviar imagens\", etc.",
9910
10158
  "name": "default"
9911
10159
  }
9912
10160
  ],
9913
10161
  "members": [
10162
+ {
10163
+ "kind": "field",
10164
+ "name": "customId",
10165
+ "type": {
10166
+ "text": "string"
10167
+ },
10168
+ "default": "`br-upload-${uploadId++}`",
10169
+ "description": "Identificador único.\nCaso não seja fornecido, um ID gerado automaticamente será usado."
10170
+ },
9914
10171
  {
9915
10172
  "kind": "field",
9916
10173
  "name": "el",
@@ -9935,7 +10192,7 @@
9935
10192
  "text": "string"
9936
10193
  },
9937
10194
  "default": "'Envio de arquivo'",
9938
- "description": "Texto descritivo do campo de upload.\nEste é o texto que é mostrado no label do textarea."
10195
+ "description": "Rótulo principal do campo de upload.\nEste texto ajuda usuários de leitores de tela a identificarem o propósito do upload.\nExemplos: \"Anexar comprovante\", \"Enviar foto do documento\"."
9939
10196
  },
9940
10197
  {
9941
10198
  "kind": "field",
@@ -9968,7 +10225,7 @@
9968
10225
  "kind": "field",
9969
10226
  "name": "state",
9970
10227
  "type": {
9971
- "text": "string"
10228
+ "text": "'info' | 'warning' | 'danger' | 'success'"
9972
10229
  },
9973
10230
  "description": "Define o estado visual da mensagem.\nOs possíveis valores são:\n- 'info': Mensagem informativa.\n- 'warning': Mensagem de aviso.\n- 'danger': Mensagem de erro ou alerta.\n- 'success': Mensagem de sucesso.\nO valor padrão é 'info'."
9974
10231
  },
@@ -10084,6 +10341,13 @@
10084
10341
  }
10085
10342
  ],
10086
10343
  "attributes": [
10344
+ {
10345
+ "name": "custom-id",
10346
+ "fieldName": "customId",
10347
+ "type": {
10348
+ "text": "string"
10349
+ }
10350
+ },
10087
10351
  {
10088
10352
  "name": "accept",
10089
10353
  "fieldName": "accept",
@@ -10109,7 +10373,7 @@
10109
10373
  "name": "state",
10110
10374
  "fieldName": "state",
10111
10375
  "type": {
10112
- "text": "string"
10376
+ "text": "'info' | 'warning' | 'danger' | 'success'"
10113
10377
  }
10114
10378
  },
10115
10379
  {
@@ -164,7 +164,7 @@ const Avatar = class {
164
164
  return this.renderIconAvatar();
165
165
  }
166
166
  render() {
167
- return (h(Host, { key: '3d8b630477fdf515967af256d99e8f73ac4e89b3' }, h("span", { key: '4da2e4630ba4197a46ffeedc5521c547fef21a1c', id: this.customId, class: this.getCssClassMap(), "aria-label": this.getAriaLabel() }, h("span", { key: '4801a24d8e48e24646a2c4060c07068a873c8e9a', class: this.getContentClasses() }, this.renderAvatar()))));
167
+ return (h(Host, { key: '3d8b630477fdf515967af256d99e8f73ac4e89b3' }, h("span", { key: '3e4ee93b9587e90bd4b04e33f04f565129c1fbb5', id: this.customId, class: this.getCssClassMap(), role: "img", "aria-label": this.getAriaLabel() }, h("span", { key: '33f6cb765e0b1ec7880085c4f268c94fdc6bb3d5', class: this.getContentClasses() }, this.renderAvatar()))));
168
168
  }
169
169
  get el() { return getElement(this); }
170
170
  static get watchers() { return {
@@ -1 +1 @@
1
- {"version":3,"file":"br-avatar.entry.js","sources":["../../packages/webcomponents/src/components/avatar/avatar.scss?tag=br-avatar&encapsulation=shadow","../../packages/webcomponents/src/components/avatar/avatar.tsx"],"sourcesContent":["@import \"~@govbr-ds/core/src/components/avatar/avatar\";\n\n:host {\n display: inline-block;\n --avatar-text-background-color: var(--blue-10);\n}\n\n.br-avatar .content.text-pure-0 {\n background-color: var(--avatar-text-background-color) !important;\n}\n\n.avatar-icon {\n margin-top: 0.39em;\n}\n","import { Component, Element, h, Host, Prop, State, Watch } from '@stencil/core'\n\nimport { CssClassMap } from '../../utils/interfaces'\n\n/**\n * Para uma descrição detalhada, consulte a [documentação do GovBR-DS](https://www.gov.br/ds/components/avatar?tab=designer).\n */\n@Component({\n tag: 'br-avatar',\n styleUrl: 'avatar.scss',\n shadow: true,\n})\nexport class Avatar {\n /**\n * Referência ao elemento host do componente.\n * Utilize esta propriedade para acessar e manipular o elemento do DOM associado ao componente.\n */\n @Element() el: HTMLBrAvatarElement\n\n /**\n * Ajusta a densidade, alterando o espaçamento interno para um visual mais compacto ou mais expandido.\n */\n @Prop({ mutable: true }) density: 'small' | 'medium' | 'large' = 'medium'\n\n /**\n * Identificador único.\n * Caso não seja fornecido, um ID gerado automaticamente será usado.\n */\n @Prop({ reflect: true }) readonly customId: string = `br-avatar-${avatarId++}`\n\n /**\n * URL da imagem a ser exibida no avatar do tipo 'fotográfico'.\n * Deve ser uma URL válida que aponta para a imagem desejada.\n */\n @Prop() readonly src: string\n\n /**\n * Texto alternativo (alt) associado à imagem do avatar. Essencial para acessibilidade.\n * Deve descrever de forma clara e concisa o conteúdo da imagem, por exemplo: \"Foto de perfil de João Silva\".\n */\n @Prop() readonly alt = 'Foto de perfil do usuário'\n\n /**\n * Força a exibição do ícone padrão, sobrescreve outras opções (texto ou imagem).\n * Útil para manter consistência visual ou quando se deseja um avatar neutro independente do conteúdo disponível.\n */\n @Prop() readonly isIconic: boolean = false\n\n /**\n * Conteúdo textual do avatar.\n * Apenas o primeiro caractere será exibido em maiúscula.\n */\n @Prop() readonly text: string\n\n /**\n * Define se o avatar está desabilitado\n */\n @Prop() readonly disabled = false\n\n /**\n * Cor de fundo personalizada para o avatar do tipo texto\n */\n @Prop() readonly textBackgroundColor: string\n\n @State() private hasError = false\n\n /**\n * Observa mudanças na propriedade density para validação e sincronização com atributo DOM.\n * Garante que apenas valores válidos sejam aceitos e atualiza o atributo no elemento host.\n */\n @Watch('density')\n handleDensityChange(newValue: 'small' | 'medium' | 'large') {\n if (!['small', 'medium', 'large'].includes(newValue)) {\n console.warn(`Valor inválido para density: ${newValue}. Usando 'medium'.`)\n this.density = 'medium'\n }\n this.el.setAttribute('density', this.density)\n }\n\n componentWillLoad() {\n this.handleDensityChange(this.density)\n this.setCustomBackgroundColor()\n }\n\n componentDidUpdate() {\n this.setCustomBackgroundColor()\n }\n\n /**\n * Gera um mapa de classes CSS com base nas propriedades do componente.\n * @returns {CssClassMap} Objeto contendo as classes CSS aplicadas.\n */\n private getCssClassMap(): CssClassMap {\n return {\n 'br-avatar': true,\n [this.density]: true,\n error: this.hasError,\n disabled: this.disabled,\n }\n }\n\n /**\n * Verifica se uma string possui conteúdo válido (não vazia após remover espaços em branco).\n * @param value - String a ser verificada\n * @returns {boolean} true se a string possui conteúdo\n */\n private hasContent(value: string): boolean {\n return value?.trim().length > 0\n }\n\n private readonly handleImageError = () => {\n this.hasError = true\n console.error(`Erro ao carregar imagem do avatar: ${this.src}`)\n }\n\n /**\n * Obtém as classes CSS para o elemento content.\n * @returns {string} Classes CSS do content\n */\n private getContentClasses(): string {\n if (this.hasContent(this.text) && !this.isIconic) {\n return 'content text-pure-0'\n }\n return 'content'\n }\n\n /**\n * Define a variável CSS para cor de fundo personalizada para o avatar texto.\n */\n private setCustomBackgroundColor() {\n if (this.hasContent(this.textBackgroundColor)) {\n this.el.style.setProperty('--avatar-text-background-color', this.textBackgroundColor)\n }\n }\n\n /**\n * Gera aria-label apropriado baseado no tipo de avatar\n * Prioriza aria-label do host, senão gera automaticamente\n */\n private getAriaLabel(): string {\n const hostAriaLabel = this.el.getAttribute('aria-label')\n if (this.hasContent(hostAriaLabel)) {\n return hostAriaLabel\n }\n\n if (this.hasContent(this.text) && !this.isIconic) {\n return `Avatar de ${this.text}`\n }\n\n if (this.hasContent(this.src) && !this.hasError) {\n return this.alt\n }\n\n return 'Avatar com ícone padrão de usuário'\n }\n\n /**\n * Obtém o valor do token do DS para altura do ícone\n */\n private getIconSize(): string {\n const tokenName = `--icon-size-${this.density === 'small' ? '2x' : this.density === 'medium' ? '5x' : '8x'}`\n return getComputedStyle(this.el).getPropertyValue(tokenName).trim()\n }\n\n /**\n * Obtém o valor do token do DS para largura do ícone (altura + 8px)\n */\n private getIconWidth(): string {\n const baseSize = this.getIconSize()\n const numericValue = parseInt(baseSize.replace('px', ''))\n return `${numericValue + 8}px`\n }\n\n /**\n * Renderiza o avatar do tipo 'letra/texto'.\n * Exibe a primeira letra do texto em maiúscula.\n */\n private renderTextAvatar() {\n return this.text[0].toUpperCase()\n }\n\n /**\n * Renderiza o avatar do tipo 'fotográfico/imagem'.\n * Exibe uma imagem carregada via URL.\n */\n private renderImageAvatar() {\n return <img src={this.src} alt={this.alt} loading=\"lazy\" onError={this.handleImageError} />\n }\n\n /**\n * Renderiza o avatar do tipo 'icônico'.\n * Exibe um ícone padrão (fa-solid:user) posicionado na base do avatar.\n */\n private renderIconAvatar() {\n return (\n <br-icon\n icon-name=\"fa-solid:user\"\n height={this.getIconSize()}\n width={this.getIconWidth()}\n aria-hidden=\"true\"\n class=\"avatar-icon\"\n ></br-icon>\n )\n }\n\n /**\n * Método principal de renderização do avatar.\n * Prioridade: isIconic > texto > imagem > ícone (padrão)\n */\n private renderAvatar() {\n if (this.isIconic) {\n return this.renderIconAvatar()\n }\n\n if (this.hasContent(this.text)) {\n return this.renderTextAvatar()\n }\n\n if (this.hasContent(this.src) && !this.hasError) {\n return this.renderImageAvatar()\n }\n\n return this.renderIconAvatar()\n }\n\n render() {\n return (\n <Host>\n <span id={this.customId} class={this.getCssClassMap()} aria-label={this.getAriaLabel()}>\n <span class={this.getContentClasses()}>{this.renderAvatar()}</span>\n </span>\n </Host>\n )\n }\n}\n\nlet avatarId = 0\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"br-avatar.entry.js","sources":["../../packages/webcomponents/src/components/avatar/avatar.scss?tag=br-avatar&encapsulation=shadow","../../packages/webcomponents/src/components/avatar/avatar.tsx"],"sourcesContent":["@import \"~@govbr-ds/core/src/components/avatar/avatar\";\n\n:host {\n display: inline-block;\n --avatar-text-background-color: var(--blue-10);\n}\n\n.br-avatar .content.text-pure-0 {\n background-color: var(--avatar-text-background-color) !important;\n}\n\n.avatar-icon {\n margin-top: 0.39em;\n}\n","import { Component, Element, h, Host, Prop, State, Watch } from '@stencil/core'\n\nimport { CssClassMap } from '../../utils/interfaces'\n\n/**\n * Para uma descrição detalhada, consulte a [documentação do GovBR-DS](https://www.gov.br/ds/components/avatar?tab=designer).\n */\n@Component({\n tag: 'br-avatar',\n styleUrl: 'avatar.scss',\n shadow: true,\n})\nexport class Avatar {\n /**\n * Referência ao elemento host do componente.\n * Utilize esta propriedade para acessar e manipular o elemento do DOM associado ao componente.\n */\n @Element() el: HTMLBrAvatarElement\n\n /**\n * Ajusta a densidade, alterando o espaçamento interno para um visual mais compacto ou mais expandido.\n */\n @Prop({ mutable: true }) density: 'small' | 'medium' | 'large' = 'medium'\n\n /**\n * Identificador único.\n * Caso não seja fornecido, um ID gerado automaticamente será usado.\n */\n @Prop({ reflect: true }) readonly customId: string = `br-avatar-${avatarId++}`\n\n /**\n * URL da imagem a ser exibida no avatar do tipo 'fotográfico'.\n * Deve ser uma URL válida que aponta para a imagem desejada.\n */\n @Prop() readonly src: string\n\n /**\n * Texto alternativo (alt) associado à imagem do avatar. Essencial para acessibilidade.\n * Deve descrever de forma clara e concisa o conteúdo da imagem, por exemplo: \"Foto de perfil de João Silva\".\n */\n @Prop() readonly alt = 'Foto de perfil do usuário'\n\n /**\n * Força a exibição do ícone padrão, sobrescreve outras opções (texto ou imagem).\n * Útil para manter consistência visual ou quando se deseja um avatar neutro independente do conteúdo disponível.\n */\n @Prop() readonly isIconic: boolean = false\n\n /**\n * Conteúdo textual do avatar.\n * Apenas o primeiro caractere será exibido em maiúscula.\n */\n @Prop() readonly text: string\n\n /**\n * Define se o avatar está desabilitado\n */\n @Prop() readonly disabled = false\n\n /**\n * Cor de fundo personalizada para o avatar do tipo texto\n */\n @Prop() readonly textBackgroundColor: string\n\n @State() private hasError = false\n\n /**\n * Observa mudanças na propriedade density para validação e sincronização com atributo DOM.\n * Garante que apenas valores válidos sejam aceitos e atualiza o atributo no elemento host.\n */\n @Watch('density')\n handleDensityChange(newValue: 'small' | 'medium' | 'large') {\n if (!['small', 'medium', 'large'].includes(newValue)) {\n console.warn(`Valor inválido para density: ${newValue}. Usando 'medium'.`)\n this.density = 'medium'\n }\n this.el.setAttribute('density', this.density)\n }\n\n componentWillLoad() {\n this.handleDensityChange(this.density)\n this.setCustomBackgroundColor()\n }\n\n componentDidUpdate() {\n this.setCustomBackgroundColor()\n }\n\n /**\n * Gera um mapa de classes CSS com base nas propriedades do componente.\n * @returns {CssClassMap} Objeto contendo as classes CSS aplicadas.\n */\n private getCssClassMap(): CssClassMap {\n return {\n 'br-avatar': true,\n [this.density]: true,\n error: this.hasError,\n disabled: this.disabled,\n }\n }\n\n /**\n * Verifica se uma string possui conteúdo válido (não vazia após remover espaços em branco).\n * @param value - String a ser verificada\n * @returns {boolean} true se a string possui conteúdo\n */\n private hasContent(value: string): boolean {\n return value?.trim().length > 0\n }\n\n private readonly handleImageError = () => {\n this.hasError = true\n console.error(`Erro ao carregar imagem do avatar: ${this.src}`)\n }\n\n /**\n * Obtém as classes CSS para o elemento content.\n * @returns {string} Classes CSS do content\n */\n private getContentClasses(): string {\n if (this.hasContent(this.text) && !this.isIconic) {\n return 'content text-pure-0'\n }\n return 'content'\n }\n\n /**\n * Define a variável CSS para cor de fundo personalizada para o avatar texto.\n */\n private setCustomBackgroundColor() {\n if (this.hasContent(this.textBackgroundColor)) {\n this.el.style.setProperty('--avatar-text-background-color', this.textBackgroundColor)\n }\n }\n\n /**\n * Gera aria-label apropriado baseado no tipo de avatar\n * Prioriza aria-label do host, senão gera automaticamente\n */\n private getAriaLabel(): string {\n const hostAriaLabel = this.el.getAttribute('aria-label')\n if (this.hasContent(hostAriaLabel)) {\n return hostAriaLabel\n }\n\n if (this.hasContent(this.text) && !this.isIconic) {\n return `Avatar de ${this.text}`\n }\n\n if (this.hasContent(this.src) && !this.hasError) {\n return this.alt\n }\n\n return 'Avatar com ícone padrão de usuário'\n }\n\n /**\n * Obtém o valor do token do DS para altura do ícone\n */\n private getIconSize(): string {\n const tokenName = `--icon-size-${this.density === 'small' ? '2x' : this.density === 'medium' ? '5x' : '8x'}`\n return getComputedStyle(this.el).getPropertyValue(tokenName).trim()\n }\n\n /**\n * Obtém o valor do token do DS para largura do ícone (altura + 8px)\n */\n private getIconWidth(): string {\n const baseSize = this.getIconSize()\n const numericValue = parseInt(baseSize.replace('px', ''))\n return `${numericValue + 8}px`\n }\n\n /**\n * Renderiza o avatar do tipo 'letra/texto'.\n * Exibe a primeira letra do texto em maiúscula.\n */\n private renderTextAvatar() {\n return this.text[0].toUpperCase()\n }\n\n /**\n * Renderiza o avatar do tipo 'fotográfico/imagem'.\n * Exibe uma imagem carregada via URL.\n */\n private renderImageAvatar() {\n return <img src={this.src} alt={this.alt} loading=\"lazy\" onError={this.handleImageError} />\n }\n\n /**\n * Renderiza o avatar do tipo 'icônico'.\n * Exibe um ícone padrão (fa-solid:user) posicionado na base do avatar.\n */\n private renderIconAvatar() {\n return (\n <br-icon\n icon-name=\"fa-solid:user\"\n height={this.getIconSize()}\n width={this.getIconWidth()}\n aria-hidden=\"true\"\n class=\"avatar-icon\"\n ></br-icon>\n )\n }\n\n /**\n * Método principal de renderização do avatar.\n * Prioridade: isIconic > texto > imagem > ícone (padrão)\n */\n private renderAvatar() {\n if (this.isIconic) {\n return this.renderIconAvatar()\n }\n\n if (this.hasContent(this.text)) {\n return this.renderTextAvatar()\n }\n\n if (this.hasContent(this.src) && !this.hasError) {\n return this.renderImageAvatar()\n }\n\n return this.renderIconAvatar()\n }\n\n render() {\n return (\n <Host>\n <span id={this.customId} class={this.getCssClassMap()} role=\"img\" aria-label={this.getAriaLabel()}>\n <span class={this.getContentClasses()}>{this.renderAvatar()}</span>\n </span>\n </Host>\n )\n }\n}\n\nlet avatarId = 0\n"],"names":[],"mappings":"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"}