@feugene/granularity 0.47.0 → 0.49.0

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 (123) hide show
  1. package/README.md +3 -3
  2. package/dist/chunks/{config-2vrOFn2f.js → config-AKpLyIGD.js} +2 -2
  3. package/dist/chunks/{config-2vrOFn2f.js.map → config-AKpLyIGD.js.map} +1 -1
  4. package/dist/chunks/config-BBtBQE3s.js +108 -0
  5. package/dist/chunks/config-BBtBQE3s.js.map +1 -0
  6. package/dist/chunks/{config-DeyT9dJl.js → config-Bs1HwUcx.js} +47 -4
  7. package/dist/chunks/{config-DeyT9dJl.js.map → config-Bs1HwUcx.js.map} +1 -1
  8. package/dist/chunks/{config-B3J0alyY.js → config-CzeZg2LO.js} +49 -4
  9. package/dist/chunks/config-CzeZg2LO.js.map +1 -0
  10. package/dist/chunks/{config-DCq4JySZ.js → config-D3HOuHDe.js} +1 -1
  11. package/dist/chunks/{config-DCq4JySZ.js.map → config-D3HOuHDe.js.map} +1 -1
  12. package/dist/chunks/{config-BscVxZR3.js → config-DF1ezU6y.js} +1 -1
  13. package/dist/chunks/{config-BscVxZR3.js.map → config-DF1ezU6y.js.map} +1 -1
  14. package/dist/chunks/config-MUkhktTP.js +267 -0
  15. package/dist/chunks/config-MUkhktTP.js.map +1 -0
  16. package/dist/chunks/{en-DjTnfTqM.js → en-CsQUoBS2.js} +14 -2
  17. package/dist/chunks/en-CsQUoBS2.js.map +1 -0
  18. package/dist/chunks/{es-Bc_t3FI8.js → es-9nbkPvdA.js} +14 -2
  19. package/dist/chunks/es-9nbkPvdA.js.map +1 -0
  20. package/dist/chunks/{es-DIFzSXSZ.js → es-DrUz5J6I.js} +3 -3
  21. package/dist/chunks/{es-DIFzSXSZ.js.map → es-DrUz5J6I.js.map} +1 -1
  22. package/dist/chunks/{generated-CQ4h6Ieq.js → generated-CxvC5O0V.js} +140 -0
  23. package/dist/chunks/{generated-CQ4h6Ieq.js.map → generated-CxvC5O0V.js.map} +1 -1
  24. package/dist/chunks/{grBadgeStyles-DV0DrAew.js → grBadgeStyles-D51AXbj5.js} +57 -1
  25. package/dist/chunks/grBadgeStyles-D51AXbj5.js.map +1 -0
  26. package/dist/chunks/{grChipStyles-DcDyxAL0.js → grChipStyles-CA9Wj1_E.js} +1 -1
  27. package/dist/chunks/{grChipStyles-DcDyxAL0.js.map → grChipStyles-CA9Wj1_E.js.map} +1 -1
  28. package/dist/chunks/{grTableStyles-uuMPSOBR.js → grTableStyles-DkQPMfx9.js} +16 -3
  29. package/dist/chunks/grTableStyles-DkQPMfx9.js.map +1 -0
  30. package/dist/chunks/{granular-provider-AKukmYva.js → granular-provider-B6xomapW.js} +8 -6
  31. package/dist/chunks/granular-provider-B6xomapW.js.map +1 -0
  32. package/dist/chunks/{ru-Bb-co59W.js → ru-88i1WG0b.js} +14 -2
  33. package/dist/chunks/ru-88i1WG0b.js.map +1 -0
  34. package/dist/chunks/{safelist-x8USecK8.js → safelist-CSfynUC1.js} +5 -1
  35. package/dist/chunks/safelist-CSfynUC1.js.map +1 -0
  36. package/dist/components/GrAutocomplete/chunks/{GrAutocomplete-C-uovdv8.js → GrAutocomplete-Chhw65pI.js} +2 -2
  37. package/dist/components/GrAutocomplete/chunks/{GrAutocomplete-C-uovdv8.js.map → GrAutocomplete-Chhw65pI.js.map} +1 -1
  38. package/dist/components/GrAutocomplete/index.js +1 -1
  39. package/dist/components/GrAvatar/chunks/{GrAvatar-dWEXiCJG.js → GrAvatar-Do5-C409.js} +12 -1
  40. package/dist/components/GrAvatar/chunks/GrAvatar-Do5-C409.js.map +1 -0
  41. package/dist/components/GrAvatar/index.js +2 -2
  42. package/dist/components/GrAvatar/themes/light.css +35 -0
  43. package/dist/components/GrBadge/chunks/GrBadge-C42KLyUD.js +71 -0
  44. package/dist/components/GrBadge/chunks/GrBadge-C42KLyUD.js.map +1 -0
  45. package/dist/components/GrBadge/index.js +3 -3
  46. package/dist/components/GrBadge/styles.css +1 -1
  47. package/dist/components/GrChip/chunks/{GrChip-CKqyzYcv.js → GrChip-DoyS1Dr4.js} +1 -1
  48. package/dist/components/GrChip/chunks/{GrChip-CKqyzYcv.js.map → GrChip-DoyS1Dr4.js.map} +1 -1
  49. package/dist/components/GrChip/index.js +2 -2
  50. package/dist/components/GrDataTable/chunks/{GrDataTable-Dp9Fp_P5.js → GrDataTable-DQxYYgQk.js} +438 -160
  51. package/dist/components/GrDataTable/chunks/GrDataTable-DQxYYgQk.js.map +1 -0
  52. package/dist/components/GrDataTable/index.js +2 -2
  53. package/dist/components/GrDataTable/themes/light.css +10 -0
  54. package/dist/components/GrInputTag/chunks/{GrInputTag-CO0YU-ok.js → GrInputTag-qnRdAZnn.js} +2 -2
  55. package/dist/components/GrInputTag/chunks/{GrInputTag-CO0YU-ok.js.map → GrInputTag-qnRdAZnn.js.map} +1 -1
  56. package/dist/components/GrInputTag/index.js +1 -1
  57. package/dist/components/GrOtpInput/chunks/GrOtpInput-B_Q-RDLw.js +419 -0
  58. package/dist/components/GrOtpInput/chunks/GrOtpInput-B_Q-RDLw.js.map +1 -0
  59. package/dist/components/GrOtpInput/index.js +3 -0
  60. package/dist/components/GrOtpInput/styles.css +1 -0
  61. package/dist/components/GrPagination/chunks/{GrPagination-BbaF5eXk.js → GrPagination-CMrLPzvL.js} +1 -1
  62. package/dist/components/GrPagination/chunks/{GrPagination-BbaF5eXk.js.map → GrPagination-CMrLPzvL.js.map} +1 -1
  63. package/dist/components/GrPagination/index.js +1 -1
  64. package/dist/components/GrSelect/chunks/{GrSelect-0iI4wdR_.js → GrSelect-DvSq-nV-.js} +2 -2
  65. package/dist/components/GrSelect/chunks/{GrSelect-0iI4wdR_.js.map → GrSelect-DvSq-nV-.js.map} +1 -1
  66. package/dist/components/GrSelect/index.js +1 -1
  67. package/dist/components/GrSwitch/chunks/{GrSwitch-CriHWT2A.js → GrSwitch-D7X42uIA.js} +61 -7
  68. package/dist/components/GrSwitch/chunks/GrSwitch-D7X42uIA.js.map +1 -0
  69. package/dist/components/GrSwitch/index.js +2 -2
  70. package/dist/components/GrTable/chunks/{GrTable-iwzHvlMC.js → GrTable-CKJ-HrsN.js} +1 -1
  71. package/dist/components/GrTable/chunks/{GrTable-iwzHvlMC.js.map → GrTable-CKJ-HrsN.js.map} +1 -1
  72. package/dist/components/GrTable/index.js +2 -2
  73. package/dist/granular-provider-node.js +1 -1
  74. package/dist/granular-provider.js +1 -1
  75. package/dist/i18n/all.js +1 -1
  76. package/dist/i18n/index.js +1 -1
  77. package/dist/index.js +20 -19
  78. package/dist/theme.js +1 -1
  79. package/dist/tokens.js +1 -1
  80. package/dist/types/components/GrAvatar/GrAvatar.vue.d.ts +11 -0
  81. package/dist/types/components/GrAvatar/defaults.d.ts +1 -0
  82. package/dist/types/components/GrAvatar/grAvatarStyles.d.ts +26 -1
  83. package/dist/types/components/GrBadge/GrBadge.vue.d.ts +15 -1
  84. package/dist/types/components/GrBadge/grBadgeStyles.d.ts +57 -0
  85. package/dist/types/components/GrBadge/index.d.ts +1 -1
  86. package/dist/types/components/GrDataTable/GrDataTable.vue.d.ts +59 -0
  87. package/dist/types/components/GrDataTable/composables/useDataTableExpansion.d.ts +46 -0
  88. package/dist/types/components/GrDataTable/grDataTableStyles.d.ts +23 -0
  89. package/dist/types/components/GrOtpInput/GrOtpInput.vue.d.ts +164 -0
  90. package/dist/types/components/GrOtpInput/config.d.ts +1 -0
  91. package/dist/types/components/GrOtpInput/defaults.d.ts +15 -0
  92. package/dist/types/components/GrOtpInput/grOtpInputStyles.d.ts +62 -0
  93. package/dist/types/components/GrOtpInput/index.d.ts +9 -0
  94. package/dist/types/components/GrOtpInput/otpValue.d.ts +71 -0
  95. package/dist/types/components/GrOtpInput/safelist.d.ts +7 -0
  96. package/dist/types/components/GrSwitch/GrSwitch.vue.d.ts +42 -4
  97. package/dist/types/components/GrSwitch/defaults.d.ts +2 -0
  98. package/dist/types/components/GrSwitch/grSwitchStyles.d.ts +129 -25
  99. package/dist/types/components/GrSwitch/index.d.ts +1 -1
  100. package/dist/types/components/GrSwitch/safelist.d.ts +4 -3
  101. package/dist/types/components/GrTable/grTableStyles.d.ts +16 -3
  102. package/dist/types/granular-provider/shared.d.ts +1 -0
  103. package/dist/types/i18n/messages/en.d.ts +20 -0
  104. package/dist/types/i18n/messages/es.d.ts +20 -0
  105. package/dist/types/i18n/messages/ru.d.ts +20 -0
  106. package/dist/types/index.d.ts +1 -0
  107. package/dist/web-types.json +329 -8
  108. package/package.json +5 -1
  109. package/dist/chunks/config-B3J0alyY.js.map +0 -1
  110. package/dist/chunks/config-Yy67uWHY.js +0 -140
  111. package/dist/chunks/config-Yy67uWHY.js.map +0 -1
  112. package/dist/chunks/en-DjTnfTqM.js.map +0 -1
  113. package/dist/chunks/es-Bc_t3FI8.js.map +0 -1
  114. package/dist/chunks/grBadgeStyles-DV0DrAew.js.map +0 -1
  115. package/dist/chunks/grTableStyles-uuMPSOBR.js.map +0 -1
  116. package/dist/chunks/granular-provider-AKukmYva.js.map +0 -1
  117. package/dist/chunks/ru-Bb-co59W.js.map +0 -1
  118. package/dist/chunks/safelist-x8USecK8.js.map +0 -1
  119. package/dist/components/GrAvatar/chunks/GrAvatar-dWEXiCJG.js.map +0 -1
  120. package/dist/components/GrBadge/chunks/GrBadge-DBeQXEir.js +0 -47
  121. package/dist/components/GrBadge/chunks/GrBadge-DBeQXEir.js.map +0 -1
  122. package/dist/components/GrDataTable/chunks/GrDataTable-Dp9Fp_P5.js.map +0 -1
  123. package/dist/components/GrSwitch/chunks/GrSwitch-CriHWT2A.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://raw.githubusercontent.com/JetBrains/web-types/master/schema/web-types.json",
3
3
  "name": "@feugene/granularity",
4
- "version": "0.47.0",
4
+ "version": "0.49.0",
5
5
  "framework": "vue",
6
6
  "js-types-syntax": "typescript",
7
7
  "description-markup": "markdown",
@@ -603,6 +603,15 @@
603
603
  "type": "GrAvatarShape | undefined"
604
604
  }
605
605
  },
606
+ {
607
+ "name": "autoColor",
608
+ "description": "Красить фон по имени: одинаковое имя всегда даёт одинаковый цвет. Выключен по умолчанию — серый аватар это осознанный нейтральный дефолт, а цветной может спорить с оформлением продукта. Палитру задаёт тема (`--gr-avatar-N-bg`/`-fg`), компонент только выбирает слот.",
609
+ "default": "undefined",
610
+ "value": {
611
+ "kind": "expression",
612
+ "type": "boolean | undefined"
613
+ }
614
+ },
606
615
  {
607
616
  "name": "status",
608
617
  "description": "Статус участника. Точка декоративна — рядом идёт скрытая подпись.",
@@ -658,6 +667,15 @@
658
667
  "kind": "expression",
659
668
  "type": "GrBadgeRadius | undefined"
660
669
  }
670
+ },
671
+ {
672
+ "name": "dot",
673
+ "description": "Точка-маркер перед подписью: «● Активен». Имя тона красит маркер отдельно от плашки — ради пары «тихая плашка + цветной маркер», из-за которой паттерн и существует. `true` берёт тон самого бейджа. На заливке (`dark`) маркер всегда цвета текста: тон там слился бы с подложкой, взятой из того же слоя.",
674
+ "default": "false",
675
+ "value": {
676
+ "kind": "expression",
677
+ "type": "boolean | GrBadgeDotTone | undefined"
678
+ }
661
679
  }
662
680
  ],
663
681
  "slots": [
@@ -704,20 +722,20 @@
704
722
  }
705
723
  },
706
724
  {
707
- "name": "value",
708
- "default": "undefined",
725
+ "name": "dot",
726
+ "description": "Точка вместо числа: чистая декорация, если не задан `ariaLabel`.",
727
+ "default": "false",
709
728
  "value": {
710
729
  "kind": "expression",
711
- "type": "string | number | undefined"
730
+ "type": "boolean | undefined"
712
731
  }
713
732
  },
714
733
  {
715
- "name": "dot",
716
- "description": "Точка вместо числа: чистая декорация, если не задан `ariaLabel`.",
717
- "default": "false",
734
+ "name": "value",
735
+ "default": "undefined",
718
736
  "value": {
719
737
  "kind": "expression",
720
- "type": "boolean | undefined"
738
+ "type": "string | number | undefined"
721
739
  }
722
740
  },
723
741
  {
@@ -3188,6 +3206,60 @@
3188
3206
  "kind": "expression",
3189
3207
  "type": "Record<string, number> | undefined"
3190
3208
  }
3209
+ },
3210
+ {
3211
+ "name": "expandable",
3212
+ "description": "Второй ярус строки: колонка с кнопкой раскрытия и блок подробностей под строкой. Содержимое рисует слот `#detail`.",
3213
+ "default": "false",
3214
+ "value": {
3215
+ "kind": "expression",
3216
+ "type": "boolean | undefined"
3217
+ }
3218
+ },
3219
+ {
3220
+ "name": "expandedKeys",
3221
+ "description": "Контролируемый список раскрытых ключей (`v-model:expandedKeys`).",
3222
+ "default": "undefined",
3223
+ "value": {
3224
+ "kind": "expression",
3225
+ "type": "(string | number)[] | undefined"
3226
+ }
3227
+ },
3228
+ {
3229
+ "name": "expandableRow",
3230
+ "description": "У какой строки есть второй ярус. Остальные кнопки не получают.",
3231
+ "default": "undefined",
3232
+ "value": {
3233
+ "kind": "expression",
3234
+ "type": "((row: TRow) => boolean) | undefined"
3235
+ }
3236
+ },
3237
+ {
3238
+ "name": "loadDetail",
3239
+ "description": "Подгрузка подробностей в момент раскрытия. Без неё содержимое берётся из самой строки. `signal` обязателен: строку сворачивают чаще, чем ждут.",
3240
+ "default": "undefined",
3241
+ "value": {
3242
+ "kind": "expression",
3243
+ "type": "((row: TRow, signal: AbortSignal) => Promise<unknown>) | undefined"
3244
+ }
3245
+ },
3246
+ {
3247
+ "name": "accordion",
3248
+ "description": "Раскрыта не больше одной строки.",
3249
+ "default": "false",
3250
+ "value": {
3251
+ "kind": "expression",
3252
+ "type": "boolean | undefined"
3253
+ }
3254
+ },
3255
+ {
3256
+ "name": "expandColumn",
3257
+ "description": "Рисовать ли служебную колонку с собственной кнопкой раскрытия. `false` — колонки нет, и раскрытием управляет разметка потребителя: слоты ячеек получают `expanded` и `toggleExpand`, чтобы кнопку можно было поставить в свой столбец действий рядом с остальными. Тогда `aria-expanded` и доступное имя ложатся на неё же — компоненту их вешать не на что.",
3258
+ "default": "true",
3259
+ "value": {
3260
+ "kind": "expression",
3261
+ "type": "boolean | undefined"
3262
+ }
3191
3263
  }
3192
3264
  ],
3193
3265
  "slots": [
@@ -3236,6 +3308,18 @@
3236
3308
  },
3237
3309
  {
3238
3310
  "name": "columnResize"
3311
+ },
3312
+ {
3313
+ "name": "update:expandedKeys"
3314
+ },
3315
+ {
3316
+ "name": "expand"
3317
+ },
3318
+ {
3319
+ "name": "collapse"
3320
+ },
3321
+ {
3322
+ "name": "detailLoadError"
3239
3323
  }
3240
3324
  ]
3241
3325
  }
@@ -7103,6 +7187,199 @@
7103
7187
  ]
7104
7188
  }
7105
7189
  },
7190
+ {
7191
+ "name": "GrOtpInput",
7192
+ "source": {
7193
+ "module": "@feugene/granularity/components/GrOtpInput",
7194
+ "symbol": "GrOtpInput"
7195
+ },
7196
+ "props": [
7197
+ {
7198
+ "name": "disabled",
7199
+ "default": "false",
7200
+ "value": {
7201
+ "kind": "expression",
7202
+ "type": "boolean | undefined"
7203
+ }
7204
+ },
7205
+ {
7206
+ "name": "length",
7207
+ "description": "Число ячеек.",
7208
+ "default": "undefined",
7209
+ "value": {
7210
+ "kind": "expression",
7211
+ "type": "number | undefined"
7212
+ }
7213
+ },
7214
+ {
7215
+ "name": "type",
7216
+ "description": "Допустимый алфавит и раскладка мобильной клавиатуры.",
7217
+ "default": "\"numeric\"",
7218
+ "value": {
7219
+ "kind": "expression",
7220
+ "type": "\"text\" | \"numeric\" | \"alphanumeric\" | undefined"
7221
+ }
7222
+ },
7223
+ {
7224
+ "name": "modelValue",
7225
+ "description": "Код целиком, без разделителей.",
7226
+ "default": "\"\"",
7227
+ "value": {
7228
+ "kind": "expression",
7229
+ "type": "string | undefined"
7230
+ }
7231
+ },
7232
+ {
7233
+ "name": "readonly",
7234
+ "default": "false",
7235
+ "value": {
7236
+ "kind": "expression",
7237
+ "type": "boolean | undefined"
7238
+ }
7239
+ },
7240
+ {
7241
+ "name": "invalid",
7242
+ "default": "false",
7243
+ "value": {
7244
+ "kind": "expression",
7245
+ "type": "boolean | undefined"
7246
+ }
7247
+ },
7248
+ {
7249
+ "name": "required",
7250
+ "default": "false",
7251
+ "value": {
7252
+ "kind": "expression",
7253
+ "type": "boolean | undefined"
7254
+ }
7255
+ },
7256
+ {
7257
+ "name": "size",
7258
+ "default": "undefined",
7259
+ "value": {
7260
+ "kind": "expression",
7261
+ "type": "\"xs\" | \"sm\" | \"md\" | \"lg\" | undefined"
7262
+ }
7263
+ },
7264
+ {
7265
+ "name": "placeholder",
7266
+ "description": "Знак в пустой ячейке.",
7267
+ "default": "\"\"",
7268
+ "value": {
7269
+ "kind": "expression",
7270
+ "type": "string | undefined"
7271
+ }
7272
+ },
7273
+ {
7274
+ "name": "ariaLabel",
7275
+ "default": "undefined",
7276
+ "value": {
7277
+ "kind": "expression",
7278
+ "type": "string | undefined"
7279
+ }
7280
+ },
7281
+ {
7282
+ "name": "name",
7283
+ "description": "Имя поля для нативной отправки формы.",
7284
+ "default": "undefined",
7285
+ "value": {
7286
+ "kind": "expression",
7287
+ "type": "string | undefined"
7288
+ }
7289
+ },
7290
+ {
7291
+ "name": "form",
7292
+ "description": "`id` формы, если поле лежит вне неё.",
7293
+ "default": "undefined",
7294
+ "value": {
7295
+ "kind": "expression",
7296
+ "type": "string | undefined"
7297
+ }
7298
+ },
7299
+ {
7300
+ "name": "pattern",
7301
+ "description": "Свой алфавит регуляркой на **один символ**. Перекрывает `type`.",
7302
+ "default": "undefined",
7303
+ "value": {
7304
+ "kind": "expression",
7305
+ "type": "string | undefined"
7306
+ }
7307
+ },
7308
+ {
7309
+ "name": "groups",
7310
+ "description": "Разбивка на группы: `[3, 3]` рисует `123 – 456`. Сумма обязана равняться `length`.",
7311
+ "default": "undefined",
7312
+ "value": {
7313
+ "kind": "expression",
7314
+ "type": "number[] | undefined"
7315
+ }
7316
+ },
7317
+ {
7318
+ "name": "masked",
7319
+ "description": "Точки вместо символов — сценарий PIN. На `modelValue` не влияет.",
7320
+ "default": "undefined",
7321
+ "value": {
7322
+ "kind": "expression",
7323
+ "type": "boolean | undefined"
7324
+ }
7325
+ },
7326
+ {
7327
+ "name": "autofocus",
7328
+ "default": "false",
7329
+ "value": {
7330
+ "kind": "expression",
7331
+ "type": "boolean | undefined"
7332
+ }
7333
+ },
7334
+ {
7335
+ "name": "oneTimeCode",
7336
+ "description": "`autocomplete=\"one-time-code\"`: код из SMS подставляется на iOS и macOS.",
7337
+ "default": "true",
7338
+ "value": {
7339
+ "kind": "expression",
7340
+ "type": "boolean | undefined"
7341
+ }
7342
+ },
7343
+ {
7344
+ "name": "webOtp",
7345
+ "description": "Приём кода из SMS на Android через WebOTP. Выключен: требует HTTPS и особого хвоста в тексте сообщения, который добавляет бэкенд.",
7346
+ "default": "false",
7347
+ "value": {
7348
+ "kind": "expression",
7349
+ "type": "boolean | undefined"
7350
+ }
7351
+ }
7352
+ ],
7353
+ "slots": [
7354
+ {
7355
+ "name": "cell",
7356
+ "description": "Своё оформление ячейки. Размер и рамку по-прежнему держит компонент."
7357
+ },
7358
+ {
7359
+ "name": "separator",
7360
+ "description": "Знак между группами. По умолчанию — тире."
7361
+ }
7362
+ ],
7363
+ "js": {
7364
+ "events": [
7365
+ {
7366
+ "name": "update:modelValue"
7367
+ },
7368
+ {
7369
+ "name": "change"
7370
+ },
7371
+ {
7372
+ "name": "focus"
7373
+ },
7374
+ {
7375
+ "name": "blur"
7376
+ },
7377
+ {
7378
+ "name": "complete"
7379
+ }
7380
+ ]
7381
+ }
7382
+ },
7106
7383
  {
7107
7384
  "name": "GrPagination",
7108
7385
  "source": {
@@ -10359,12 +10636,56 @@
10359
10636
  "kind": "expression",
10360
10637
  "type": "string | undefined"
10361
10638
  }
10639
+ },
10640
+ {
10641
+ "name": "showStateText",
10642
+ "description": "Подпись состояния внутри дорожки — на свободной от бегунка стороне. Помещается только на `md` и `lg`; на мелких ступенях не рисуется.",
10643
+ "default": "undefined",
10644
+ "value": {
10645
+ "kind": "expression",
10646
+ "type": "boolean | undefined"
10647
+ }
10648
+ },
10649
+ {
10650
+ "name": "checkedText",
10651
+ "description": "Текст включённого состояния. Без него — `gr.switch.on` из локали.",
10652
+ "default": "undefined",
10653
+ "value": {
10654
+ "kind": "expression",
10655
+ "type": "string | undefined"
10656
+ }
10657
+ },
10658
+ {
10659
+ "name": "uncheckedText",
10660
+ "description": "Текст выключенного состояния. Без него — `gr.switch.off` из локали.",
10661
+ "default": "undefined",
10662
+ "value": {
10663
+ "kind": "expression",
10664
+ "type": "string | undefined"
10665
+ }
10666
+ },
10667
+ {
10668
+ "name": "autoWidth",
10669
+ "description": "Дорожка растягивается под подпись, а ступень размера становится нижней границей ширины. Без `showStateText` смысла не имеет: тянуться не под что.",
10670
+ "default": "undefined",
10671
+ "value": {
10672
+ "kind": "expression",
10673
+ "type": "boolean | undefined"
10674
+ }
10362
10675
  }
10363
10676
  ],
10364
10677
  "slots": [
10365
10678
  {
10366
10679
  "name": "default",
10367
10680
  "description": "Подпись переключателя."
10681
+ },
10682
+ {
10683
+ "name": "checked-icon",
10684
+ "description": "Знак на бегунке во включённом состоянии — галочка, замок, что угодно. Размер задаёт обёртка по ступени `size`, поэтому содержимое слота тянется до неё: `class=\"h-full w-full\"`, как у `GrBadge` и `GrChip`. Знак декоративен — бегунок целиком `aria-hidden`, а состояние диктор берёт из `aria-checked`. Смысла, которого нет больше нигде, сюда класть нельзя."
10685
+ },
10686
+ {
10687
+ "name": "unchecked-icon",
10688
+ "description": "То же для выключенного состояния. Слоты независимы."
10368
10689
  }
10369
10690
  ],
10370
10691
  "js": {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@feugene/granularity",
3
3
  "description": "Granularity design system package with Vue 3 components, consumed via the `@feugene/unocss-preset-granular` preset.",
4
- "version": "0.47.0",
4
+ "version": "0.49.0",
5
5
  "license": "LicenseRef-Granularity-EUC-1.1",
6
6
  "author": {
7
7
  "name": "Evgeniy Fureev",
@@ -322,6 +322,10 @@
322
322
  "types": "./dist/types/components/GrNumberInput/index.d.ts",
323
323
  "import": "./dist/components/GrNumberInput/index.js"
324
324
  },
325
+ "./components/GrOtpInput": {
326
+ "types": "./dist/types/components/GrOtpInput/index.d.ts",
327
+ "import": "./dist/components/GrOtpInput/index.js"
328
+ },
325
329
  "./components/GrPagination": {
326
330
  "types": "./dist/types/components/GrPagination/index.d.ts",
327
331
  "import": "./dist/components/GrPagination/index.js"
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-B3J0alyY.js","names":[],"sources":["../../src/components/GrAvatar/grAvatarStyles.ts","../../src/components/GrAvatar/safelist.ts","../../src/components/GrAvatar/config.ts"],"sourcesContent":["export type GrAvatarShape = 'circle' | 'square'\n\n/** Статус участника. Точка декоративна — смысл несёт скрытая подпись. */\nexport const GR_AVATAR_STATUSES = ['online', 'offline', 'busy', 'away'] as const\nexport type GrAvatarStatus = typeof GR_AVATAR_STATUSES[number]\n\nexport const shapes: Record<GrAvatarShape, string> = {\n circle: 'rounded-[var(--gr-radius-full)]',\n square: 'rounded-[var(--gr-avatar-square-radius,10px)]',\n}\n\nexport const rootBaseClass = 'relative inline-flex shrink-0 items-center justify-center overflow-hidden border border-[var(--gr-brd)] bg-[var(--gr-muted)] text-[var(--gr-muted-fg)] font-700'\n\n/** Индикатор статуса: кольцо цветом фона отделяет точку от самого аватара. */\nexport const statusDotClass = 'absolute bottom-0 right-0 block h-1/4 w-1/4 min-h-2 min-w-2 rounded-[var(--gr-radius-full)] ring-2 ring-[var(--gr-bg)]'\n\nexport const statusToneClass: Record<GrAvatarStatus, string> = {\n online: 'bg-[var(--gr-success)]',\n offline: 'bg-[var(--gr-muted-fg)]',\n busy: 'bg-[var(--gr-danger)]',\n away: 'bg-[var(--gr-warning)]',\n}\n\n/**\n * Статус рисуется поверх картинки, поэтому у корня со статусом не может быть\n * `overflow-hidden` — точка обрезалась бы кругом. Скругление вместо этого\n * держит внутренняя обёртка изображения.\n */\nexport const rootStatusClass = 'overflow-visible'\n\n/**\n * Обёртка растянута на весь аватар, поэтому корневой `justify-center`\n * центрирует её саму, а не содержимое: центрирование обязано быть здесь.\n */\nexport const mediaClass = 'flex h-full w-full items-center justify-center'\n\n/**\n * Со статусом корень уходит в `overflow-visible`, чтобы не срезать точку, и\n * резать по форме становится некому — тогда это берёт на себя обёртка.\n */\nexport const mediaClipClass = 'overflow-hidden'\n\n/**\n * Размер бывает произвольным числом пикселей, поэтому кегль считается, а не\n * берётся картой по ступеням. Пол в 10px: у аватара 24px пропорциональные 8px\n * не читаются.\n */\nexport function avatarFontSizePx(sizePx: number): number {\n return Math.max(10, Math.round(sizePx / 3))\n}\n\nexport const groupBaseClass = 'inline-flex items-center'\n\n/** Перекрытие соседей: кольцо цветом фона отделяет аватары друг от друга. */\nexport const groupItemClass = '-ml-2 first:ml-0 ring-2 ring-[var(--gr-bg)]'\n\nexport const groupOverflowClass = 'inline-flex items-center justify-center bg-[var(--gr-muted)] text-[var(--gr-muted-fg)] font-700'\n\nexport function grAvatarClass(shape: GrAvatarShape): string {\n return [shapes[shape]].join(' ')\n}\n\n/**\n * Инициалы из имени: первые буквы двух первых слов. Вынесено чистой функцией —\n * тестируется без монтирования.\n */\nexport function initialsFrom(name: string): string {\n const words = name.trim().split(/\\s+/).filter(Boolean)\n if (words.length === 0)\n return ''\n\n return words\n .slice(0, 2)\n .map(word => [...word][0]?.toUpperCase() ?? '')\n .join('')\n}\n","import { splitClassTokens } from '../shared/classTokens'\nimport {\n groupBaseClass,\n groupItemClass,\n groupOverflowClass,\n mediaClass,\n mediaClipClass,\n rootBaseClass,\n rootStatusClass,\n shapes,\n statusDotClass,\n statusToneClass,\n} from './grAvatarStyles'\n\nexport const grAvatarClassTokens = {\n shapes: Object.values(shapes).flatMap(splitClassTokens),\n root: [...splitClassTokens(rootBaseClass), ...splitClassTokens(rootStatusClass)],\n media: [...splitClassTokens(mediaClass), ...splitClassTokens(mediaClipClass)],\n status: [\n ...splitClassTokens(statusDotClass),\n ...Object.values(statusToneClass).flatMap(splitClassTokens),\n ],\n group: [\n ...splitClassTokens(groupBaseClass),\n ...splitClassTokens(groupItemClass),\n ...splitClassTokens(groupOverflowClass),\n ],\n} as const\n\nexport const grAvatarSafelist = [...new Set([\n ...grAvatarClassTokens.shapes,\n ...grAvatarClassTokens.root,\n ...grAvatarClassTokens.media,\n ...grAvatarClassTokens.status,\n ...grAvatarClassTokens.group,\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grAvatarSafelist } from './safelist'\n\nexport const grAvatarConfig = defineGranularComponent(import.meta.url, {\n name: 'GrAvatar',\n dependencies: ['GrSkeleton'],\n safelist: grAvatarSafelist,\n})\n"],"mappings":";;;AAMA,IAAa,SAAwC;CACnD,QAAQ;CACR,QAAQ;AACV;AAEA,IAAa,gBAAgB;;AAG7B,IAAa,iBAAiB;AAE9B,IAAa,kBAAkD;CAC7D,QAAQ;CACR,SAAS;CACT,MAAM;CACN,MAAM;AACR;;;;;;AAOA,IAAa,kBAAkB;;;;;AAM/B,IAAa,aAAa;;;;;AAM1B,IAAa,iBAAiB;;;;;;AAO9B,SAAgB,iBAAiB,QAAwB;CACvD,OAAO,KAAK,IAAI,IAAI,KAAK,MAAM,SAAS,CAAC,CAAC;AAC5C;AAEA,IAAa,iBAAiB;;AAG9B,IAAa,iBAAiB;AAE9B,IAAa,qBAAqB;AAElC,SAAgB,cAAc,OAA8B;CAC1D,OAAO,CAAC,OAAO,MAAM,CAAC,CAAC,KAAK,GAAG;AACjC;;;;;AAMA,SAAgB,aAAa,MAAsB;CACjD,MAAM,QAAQ,KAAK,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,OAAO;CACrD,IAAI,MAAM,WAAW,GACnB,OAAO;CAET,OAAO,MACJ,MAAM,GAAG,CAAC,CAAC,CACX,KAAI,SAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,EAAE,YAAY,KAAK,EAAE,CAAC,CAC9C,KAAK,EAAE;AACZ;;;AC7DA,IAAa,sBAAsB;CACjC,QAAQ,OAAO,OAAO,MAAM,CAAC,CAAC,QAAQ,gBAAgB;CACtD,MAAM,CAAC,GAAG,iBAAiB,aAAa,GAAG,GAAG,iBAAiB,eAAe,CAAC;CAC/E,OAAO,CAAC,GAAG,iBAAiB,UAAU,GAAG,GAAG,iBAAiB,cAAc,CAAC;CAC5E,QAAQ,CACN,GAAG,iBAAiB,cAAc,GAClC,GAAG,OAAO,OAAO,eAAe,CAAC,CAAC,QAAQ,gBAAgB,CAC5D;CACA,OAAO;EACL,GAAG,iBAAiB,cAAc;EAClC,GAAG,iBAAiB,cAAc;EAClC,GAAG,iBAAiB,kBAAkB;CACxC;AACF;AAEA,IAAa,mBAAmB,CAAC,mBAAG,IAAI,IAAI;CAC1C,GAAG,oBAAoB;CACvB,GAAG,oBAAoB;CACvB,GAAG,oBAAoB;CACvB,GAAG,oBAAoB;CACvB,GAAG,oBAAoB;AACzB,CAAC,CAAC;;;AC/BF,IAAa,iBAAiB,wBAAwB,YAAY,KAAK;CACrE,MAAM;CACN,cAAc,CAAC,YAAY;CAC3B,UAAU;AACZ,CAAC"}
@@ -1,140 +0,0 @@
1
- import { n as splitClassTokens } from "./classTokens-8v2XC74x.js";
2
- import { defineGranularComponent } from "@feugene/unocss-preset-granular/contract";
3
- //#region src/components/GrSwitch/grSwitchStyles.ts
4
- var rootBase = "inline-flex items-center gap-2 select-none disabled:cursor-not-allowed";
5
- /** `start` разворачивает ряд, а не меняет порядок узлов: DOM-порядок читает диктор. */
6
- var rootLabelPositions = {
7
- start: "flex-row-reverse",
8
- end: ""
9
- };
10
- var trackBase = "relative inline-flex shrink-0 items-center rounded-[var(--gr-radius-full)] border border-[var(--gr-switch-track-brd)] transition-colors duration-[var(--gr-duration-fast)]";
11
- var trackSizes = {
12
- xs: "h-4 w-7",
13
- sm: "h-5 w-9",
14
- md: "h-6 w-11",
15
- lg: "h-7 w-14"
16
- };
17
- var thumbBase = "inline-flex shrink-0 items-center justify-center rounded-[var(--gr-radius-full)] bg-[var(--gr-card)] shadow-[var(--gr-shadow-1)] transition-transform duration-[var(--gr-duration-fast)]";
18
- var thumbSizes = {
19
- xs: "h-3 w-3",
20
- sm: "h-4 w-4",
21
- md: "h-5 w-5",
22
- lg: "h-6 w-6"
23
- };
24
- /** Спиннер загрузки живёт в бегунке, поэтому мельче его на ступень. */
25
- var thumbSpinnerSizes = {
26
- xs: "h-2 w-2",
27
- sm: "h-2.5 w-2.5",
28
- md: "h-3 w-3",
29
- lg: "h-4 w-4"
30
- };
31
- var thumbSpinnerBase = "animate-spin text-[var(--gr-muted-fg)]";
32
- /**
33
- * Сдвиг бегунка по горизонтали.
34
- *
35
- * Бегунок — обычный флекс-ребёнок дорожки, поэтому сдвиг отсчитывается от её
36
- * **content-box**, а он на 2px уже внешнего размера: рамка по 1px с каждой
37
- * стороны. Отсюда и весь расчёт.
38
- *
39
- * Зазор по вертикали задан геометрией и равен 1px на всех ступенях
40
- * (`(content-height − thumb) / 2`, дорожка центрирует бегунок сама). Значит и по
41
- * горизонтали он обязан быть 1px: иначе бегунок в покое выглядит вдавленным
42
- * внутрь, а в крайнем положении прижатым к краю — именно так и было, зазоры
43
- * расходились на 1–2px у `xs`, `sm` и `lg`.
44
- *
45
- * | ступень | дорожка | content | бегунок | покой | крайнее |
46
- * | --- | --- | --- | --- | --- | --- |
47
- * | `xs` | 28 | 26 | 12 | 1 | 13 |
48
- * | `sm` | 36 | 34 | 16 | 1 | 17 |
49
- * | `md` | 44 | 42 | 20 | 1 | 21 |
50
- * | `lg` | 56 | 54 | 24 | 1 | 29 |
51
- *
52
- * Крайнее положение — `content − thumb − зазор`. Гейт на эту арифметику живёт в
53
- * `__tests__/GrSwitch.test.ts`: он считает её заново из `trackSizes`/`thumbSizes`,
54
- * поэтому смена любой ступени размера сразу покажет разъехавшийся зазор.
55
- */
56
- var thumbTranslations = {
57
- xs: {
58
- checked: "translate-x-[13px]",
59
- unchecked: "translate-x-[1px]"
60
- },
61
- sm: {
62
- checked: "translate-x-[17px]",
63
- unchecked: "translate-x-[1px]"
64
- },
65
- md: {
66
- checked: "translate-x-[21px]",
67
- unchecked: "translate-x-[1px]"
68
- },
69
- lg: {
70
- checked: "translate-x-[29px]",
71
- unchecked: "translate-x-[1px]"
72
- }
73
- };
74
- var labelBase = "text-[var(--gr-muted-fg)]";
75
- /**
76
- * Недоступность гасится токеном, а не `opacity`: прозрачность разбавляет
77
- * выверенные на AA токены текста и роняет контраст подписи.
78
- */
79
- var labelDisabledClass = "text-[var(--gr-disabled-fg)]";
80
- var labelSizes = {
81
- xs: "text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]",
82
- sm: "text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]",
83
- md: "text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]",
84
- lg: "text-[length:var(--gr-text-base)] leading-[var(--gr-leading-base)]"
85
- };
86
- function grSwitchRootClass(labelPosition) {
87
- return [rootBase, rootLabelPositions[labelPosition]].filter(Boolean).join(" ");
88
- }
89
- function grSwitchTrackClass(size) {
90
- return [trackBase, trackSizes[size]].join(" ");
91
- }
92
- function grSwitchThumbClass(options) {
93
- return [
94
- thumbBase,
95
- thumbSizes[options.size],
96
- thumbTranslations[options.size][options.checked ? "checked" : "unchecked"]
97
- ].join(" ");
98
- }
99
- function grSwitchSpinnerClass(size) {
100
- return [thumbSpinnerBase, thumbSpinnerSizes[size]].join(" ");
101
- }
102
- function grSwitchLabelClass(size, disabled = false) {
103
- return [disabled ? labelDisabledClass : labelBase, labelSizes[size]].join(" ");
104
- }
105
- //#endregion
106
- //#region src/components/GrSwitch/safelist.ts
107
- var grSwitchClassTokens = {
108
- rootBase: splitClassTokens(rootBase),
109
- rootLabelPositions: Object.values(rootLabelPositions).flatMap(splitClassTokens),
110
- trackBase: splitClassTokens(trackBase),
111
- trackSizes: Object.values(trackSizes).flatMap(splitClassTokens),
112
- thumbBase: splitClassTokens(thumbBase),
113
- thumbSizes: Object.values(thumbSizes).flatMap(splitClassTokens),
114
- thumbSpinner: [...splitClassTokens(thumbSpinnerBase), ...Object.values(thumbSpinnerSizes).flatMap(splitClassTokens)],
115
- thumbTranslations: Object.values(thumbTranslations).flatMap(({ checked, unchecked }) => {
116
- return [...splitClassTokens(checked), ...splitClassTokens(unchecked)];
117
- }),
118
- labelBase: [...splitClassTokens(labelBase), ...splitClassTokens(labelDisabledClass)],
119
- labelSizes: Object.values(labelSizes).flatMap(splitClassTokens)
120
- };
121
- var grSwitchSafelist = [.../* @__PURE__ */ new Set([
122
- ...grSwitchClassTokens.rootBase,
123
- ...grSwitchClassTokens.rootLabelPositions,
124
- ...grSwitchClassTokens.trackBase,
125
- ...grSwitchClassTokens.trackSizes,
126
- ...grSwitchClassTokens.thumbBase,
127
- ...grSwitchClassTokens.thumbSizes,
128
- ...grSwitchClassTokens.thumbSpinner,
129
- ...grSwitchClassTokens.thumbTranslations,
130
- ...grSwitchClassTokens.labelBase,
131
- ...grSwitchClassTokens.labelSizes
132
- ])];
133
- //#endregion
134
- //#region src/components/GrSwitch/config.ts
135
- var grSwitchConfig = defineGranularComponent(import.meta.url, {
136
- name: "GrSwitch",
137
- safelist: grSwitchSafelist
138
- });
139
- //#endregion
140
- export { grSwitchSpinnerClass as a, grSwitchRootClass as i, grSwitchSafelist as n, grSwitchThumbClass as o, grSwitchLabelClass as r, grSwitchTrackClass as s, grSwitchConfig as t };
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-Yy67uWHY.js","names":[],"sources":["../../src/components/GrSwitch/grSwitchStyles.ts","../../src/components/GrSwitch/safelist.ts","../../src/components/GrSwitch/config.ts"],"sourcesContent":["import type { GrComponentSize } from '../shared/sizes'\n\nexport type GrSwitchSize = GrComponentSize\n\n/** Сторона подписи относительно дорожки — логическая, не физическая (RTL). */\nexport const GR_SWITCH_LABEL_POSITIONS = ['start', 'end'] as const\nexport type GrSwitchLabelPosition = typeof GR_SWITCH_LABEL_POSITIONS[number]\n\ntype GrSwitchThumbClassOptions = {\n checked: boolean\n size: GrSwitchSize\n}\n\nexport const rootBase = 'inline-flex items-center gap-2 select-none disabled:cursor-not-allowed'\n\n/** `start` разворачивает ряд, а не меняет порядок узлов: DOM-порядок читает диктор. */\nexport const rootLabelPositions: Record<GrSwitchLabelPosition, string> = {\n start: 'flex-row-reverse',\n end: '',\n}\n\nexport const trackBase\n = 'relative inline-flex shrink-0 items-center rounded-[var(--gr-radius-full)] border border-[var(--gr-switch-track-brd)] transition-colors duration-[var(--gr-duration-fast)]'\n\nexport const trackSizes: Record<GrSwitchSize, string> = {\n xs: 'h-4 w-7',\n sm: 'h-5 w-9',\n md: 'h-6 w-11',\n lg: 'h-7 w-14',\n}\n\nexport const thumbBase\n = 'inline-flex shrink-0 items-center justify-center rounded-[var(--gr-radius-full)] bg-[var(--gr-card)] shadow-[var(--gr-shadow-1)] transition-transform duration-[var(--gr-duration-fast)]'\n\nexport const thumbSizes: Record<GrSwitchSize, string> = {\n xs: 'h-3 w-3',\n sm: 'h-4 w-4',\n md: 'h-5 w-5',\n lg: 'h-6 w-6',\n}\n\n/** Спиннер загрузки живёт в бегунке, поэтому мельче его на ступень. */\nexport const thumbSpinnerSizes: Record<GrSwitchSize, string> = {\n xs: 'h-2 w-2',\n sm: 'h-2.5 w-2.5',\n md: 'h-3 w-3',\n lg: 'h-4 w-4',\n}\n\nexport const thumbSpinnerBase = 'animate-spin text-[var(--gr-muted-fg)]'\n\n/**\n * Сдвиг бегунка по горизонтали.\n *\n * Бегунок — обычный флекс-ребёнок дорожки, поэтому сдвиг отсчитывается от её\n * **content-box**, а он на 2px уже внешнего размера: рамка по 1px с каждой\n * стороны. Отсюда и весь расчёт.\n *\n * Зазор по вертикали задан геометрией и равен 1px на всех ступенях\n * (`(content-height − thumb) / 2`, дорожка центрирует бегунок сама). Значит и по\n * горизонтали он обязан быть 1px: иначе бегунок в покое выглядит вдавленным\n * внутрь, а в крайнем положении прижатым к краю — именно так и было, зазоры\n * расходились на 1–2px у `xs`, `sm` и `lg`.\n *\n * | ступень | дорожка | content | бегунок | покой | крайнее |\n * | --- | --- | --- | --- | --- | --- |\n * | `xs` | 28 | 26 | 12 | 1 | 13 |\n * | `sm` | 36 | 34 | 16 | 1 | 17 |\n * | `md` | 44 | 42 | 20 | 1 | 21 |\n * | `lg` | 56 | 54 | 24 | 1 | 29 |\n *\n * Крайнее положение — `content − thumb − зазор`. Гейт на эту арифметику живёт в\n * `__tests__/GrSwitch.test.ts`: он считает её заново из `trackSizes`/`thumbSizes`,\n * поэтому смена любой ступени размера сразу покажет разъехавшийся зазор.\n */\nexport const thumbTranslations: Record<GrSwitchSize, { checked: string, unchecked: string }> = {\n xs: {\n checked: 'translate-x-[13px]',\n unchecked: 'translate-x-[1px]',\n },\n sm: {\n checked: 'translate-x-[17px]',\n unchecked: 'translate-x-[1px]',\n },\n md: {\n checked: 'translate-x-[21px]',\n unchecked: 'translate-x-[1px]',\n },\n lg: {\n checked: 'translate-x-[29px]',\n unchecked: 'translate-x-[1px]',\n },\n}\n\nexport const labelBase = 'text-[var(--gr-muted-fg)]'\n\n/**\n * Недоступность гасится токеном, а не `opacity`: прозрачность разбавляет\n * выверенные на AA токены текста и роняет контраст подписи.\n */\nexport const labelDisabledClass = 'text-[var(--gr-disabled-fg)]'\n\nexport const labelSizes: Record<GrSwitchSize, string> = {\n xs: 'text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n sm: 'text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]',\n md: 'text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]',\n lg: 'text-[length:var(--gr-text-base)] leading-[var(--gr-leading-base)]',\n}\n\nexport function grSwitchRootClass(labelPosition: GrSwitchLabelPosition): string {\n return [rootBase, rootLabelPositions[labelPosition]].filter(Boolean).join(' ')\n}\n\nexport function grSwitchTrackClass(size: GrSwitchSize): string {\n return [trackBase, trackSizes[size]].join(' ')\n}\n\nexport function grSwitchThumbClass(options: GrSwitchThumbClassOptions): string {\n return [\n thumbBase,\n thumbSizes[options.size],\n thumbTranslations[options.size][options.checked ? 'checked' : 'unchecked'],\n ].join(' ')\n}\n\nexport function grSwitchSpinnerClass(size: GrSwitchSize): string {\n return [thumbSpinnerBase, thumbSpinnerSizes[size]].join(' ')\n}\n\nexport function grSwitchLabelClass(size: GrSwitchSize, disabled = false): string {\n return [disabled ? labelDisabledClass : labelBase, labelSizes[size]].join(' ')\n}\n","import { splitClassTokens } from '../shared/classTokens'\nimport {\n labelBase,\n labelDisabledClass,\n labelSizes,\n rootBase,\n rootLabelPositions,\n thumbBase,\n thumbSizes,\n thumbSpinnerBase,\n thumbSpinnerSizes,\n thumbTranslations,\n trackBase,\n trackSizes,\n} from './grSwitchStyles'\n\nexport const grSwitchClassTokens = {\n rootBase: splitClassTokens(rootBase),\n rootLabelPositions: Object.values(rootLabelPositions).flatMap(splitClassTokens),\n trackBase: splitClassTokens(trackBase),\n trackSizes: Object.values(trackSizes).flatMap(splitClassTokens),\n thumbBase: splitClassTokens(thumbBase),\n thumbSizes: Object.values(thumbSizes).flatMap(splitClassTokens),\n thumbSpinner: [\n ...splitClassTokens(thumbSpinnerBase),\n ...Object.values(thumbSpinnerSizes).flatMap(splitClassTokens),\n ],\n thumbTranslations: Object.values(thumbTranslations).flatMap(({ checked, unchecked }) => {\n return [...splitClassTokens(checked), ...splitClassTokens(unchecked)]\n }),\n labelBase: [...splitClassTokens(labelBase), ...splitClassTokens(labelDisabledClass)],\n labelSizes: Object.values(labelSizes).flatMap(splitClassTokens),\n} as const\n\nexport const grSwitchSafelist = [...new Set([\n ...grSwitchClassTokens.rootBase,\n ...grSwitchClassTokens.rootLabelPositions,\n ...grSwitchClassTokens.trackBase,\n ...grSwitchClassTokens.trackSizes,\n ...grSwitchClassTokens.thumbBase,\n ...grSwitchClassTokens.thumbSizes,\n ...grSwitchClassTokens.thumbSpinner,\n ...grSwitchClassTokens.thumbTranslations,\n ...grSwitchClassTokens.labelBase,\n ...grSwitchClassTokens.labelSizes,\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grSwitchSafelist } from './safelist'\n\nexport const grSwitchConfig = defineGranularComponent(import.meta.url, {\n name: 'GrSwitch',\n safelist: grSwitchSafelist,\n})\n"],"mappings":";;;AAaA,IAAa,WAAW;;AAGxB,IAAa,qBAA4D;CACvE,OAAO;CACP,KAAK;AACP;AAEA,IAAa,YACT;AAEJ,IAAa,aAA2C;CACtD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,YACT;AAEJ,IAAa,aAA2C;CACtD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,oBAAkD;CAC7D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;AA0BhC,IAAa,oBAAkF;CAC7F,IAAI;EACF,SAAS;EACT,WAAW;CACb;CACA,IAAI;EACF,SAAS;EACT,WAAW;CACb;CACA,IAAI;EACF,SAAS;EACT,WAAW;CACb;CACA,IAAI;EACF,SAAS;EACT,WAAW;CACb;AACF;AAEA,IAAa,YAAY;;;;;AAMzB,IAAa,qBAAqB;AAElC,IAAa,aAA2C;CACtD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,SAAgB,kBAAkB,eAA8C;CAC9E,OAAO,CAAC,UAAU,mBAAmB,cAAc,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;AAC/E;AAEA,SAAgB,mBAAmB,MAA4B;CAC7D,OAAO,CAAC,WAAW,WAAW,KAAK,CAAC,CAAC,KAAK,GAAG;AAC/C;AAEA,SAAgB,mBAAmB,SAA4C;CAC7E,OAAO;EACL;EACA,WAAW,QAAQ;EACnB,kBAAkB,QAAQ,KAAK,CAAC,QAAQ,UAAU,YAAY;CAChE,CAAC,CAAC,KAAK,GAAG;AACZ;AAEA,SAAgB,qBAAqB,MAA4B;CAC/D,OAAO,CAAC,kBAAkB,kBAAkB,KAAK,CAAC,CAAC,KAAK,GAAG;AAC7D;AAEA,SAAgB,mBAAmB,MAAoB,WAAW,OAAe;CAC/E,OAAO,CAAC,WAAW,qBAAqB,WAAW,WAAW,KAAK,CAAC,CAAC,KAAK,GAAG;AAC/E;;;ACnHA,IAAa,sBAAsB;CACjC,UAAU,iBAAiB,QAAQ;CACnC,oBAAoB,OAAO,OAAO,kBAAkB,CAAC,CAAC,QAAQ,gBAAgB;CAC9E,WAAW,iBAAiB,SAAS;CACrC,YAAY,OAAO,OAAO,UAAU,CAAC,CAAC,QAAQ,gBAAgB;CAC9D,WAAW,iBAAiB,SAAS;CACrC,YAAY,OAAO,OAAO,UAAU,CAAC,CAAC,QAAQ,gBAAgB;CAC9D,cAAc,CACZ,GAAG,iBAAiB,gBAAgB,GACpC,GAAG,OAAO,OAAO,iBAAiB,CAAC,CAAC,QAAQ,gBAAgB,CAC9D;CACA,mBAAmB,OAAO,OAAO,iBAAiB,CAAC,CAAC,SAAS,EAAE,SAAS,gBAAgB;EACtF,OAAO,CAAC,GAAG,iBAAiB,OAAO,GAAG,GAAG,iBAAiB,SAAS,CAAC;CACtE,CAAC;CACD,WAAW,CAAC,GAAG,iBAAiB,SAAS,GAAG,GAAG,iBAAiB,kBAAkB,CAAC;CACnF,YAAY,OAAO,OAAO,UAAU,CAAC,CAAC,QAAQ,gBAAgB;AAChE;AAEA,IAAa,mBAAmB,CAAC,mBAAG,IAAI,IAAI;CAC1C,GAAG,oBAAoB;CACvB,GAAG,oBAAoB;CACvB,GAAG,oBAAoB;CACvB,GAAG,oBAAoB;CACvB,GAAG,oBAAoB;CACvB,GAAG,oBAAoB;CACvB,GAAG,oBAAoB;CACvB,GAAG,oBAAoB;CACvB,GAAG,oBAAoB;CACvB,GAAG,oBAAoB;AACzB,CAAC,CAAC;;;ACzCF,IAAa,iBAAiB,wBAAwB,YAAY,KAAK;CACrE,MAAM;CACN,UAAU;AACZ,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"en-DjTnfTqM.js","names":[],"sources":["../../src/i18n/locales/en.json"],"sourcesContent":["{\n \"transfer\": {\n \"sourceTitle\": \"Available\",\n \"targetTitle\": \"Selected\",\n \"search\": \"Search\",\n \"toTarget\": \"Move to selected\",\n \"toSource\": \"Move back to available\",\n \"selectAll\": \"Select everything shown\",\n \"moveUp\": \"Move earlier\",\n \"moveDown\": \"Move later\",\n \"selected\": \"{count} of {total}\",\n \"shown\": \"Showing {shown} of {total}\",\n \"empty\": \"Nothing here yet\",\n \"emptyFiltered\": \"Nothing matches the search\",\n \"moved\": \"{count} moved to {list}\",\n \"reordered\": \"Position {position} of {count}\",\n \"reorderFiltered\": \"Reordering is off while a search is active\",\n \"cancelled\": \"Move cancelled\"\n },\n \"carousel\": {\n \"roledescription\": \"carousel\",\n \"slideRoledescription\": \"slide\",\n \"slidePosition\": \"{index} of {total}\",\n \"previous\": \"Previous slide\",\n \"next\": \"Next slide\",\n \"play\": \"Start automatic slide show\",\n \"pause\": \"Stop automatic slide show\",\n \"indicators\": \"Slides\",\n \"autoplayStopped\": \"Automatic slide show stopped\"\n },\n \"chip\": {\n \"remove\": \"Remove\",\n \"removeNamed\": \"Remove {label}\"\n },\n \"common\": {\n \"confirm\": \"Confirm\",\n \"cancel\": \"Cancel\",\n \"add\": \"Add\",\n \"clear\": \"Clear\",\n \"close\": \"Close\",\n \"stateSuccess\": \"Valid\",\n \"stateWarning\": \"Warning\"\n },\n \"loading\": {\n \"defaultText\": \"Loading...\"\n },\n \"steps\": {\n \"label\": \"Progress\",\n \"status\": \"Step {step} of {count}\",\n \"completed\": \"completed\",\n \"error\": \"has errors\"\n },\n \"treeSelect\": {\n \"filterPlaceholder\": \"Search…\",\n \"empty\": \"No data\",\n \"loading\": \"Loading…\"\n },\n \"badgeWrap\": {\n \"count\": \"{count} new\"\n },\n \"avatar\": {\n \"group\": \"People\",\n \"groupOverflow\": \"and {count} more\",\n \"status\": {\n \"online\": \"online\",\n \"offline\": \"offline\",\n \"busy\": \"busy\",\n \"away\": \"away\"\n }\n },\n \"tree\": {\n \"drag\": \"Drag\",\n \"expand\": \"Expand\",\n \"collapse\": \"Collapse\",\n \"moved\": \"Moved {label}\"\n },\n \"select\": {\n \"customValuePlaceholder\": \"Add value…\",\n \"addOption\": \"Add \\\"{value}\\\"\",\n \"clearOption\": \"None\",\n \"searchPlaceholder\": \"Search…\",\n \"loading\": \"Loading…\",\n \"noResults\": \"No results\",\n \"removeTag\": \"Remove {label}\"\n },\n \"dataTable\": {\n \"loading\": \"Loading…\",\n \"empty\": \"No data\",\n \"selectAll\": \"Select all rows\",\n \"selectRow\": \"Select row\",\n \"sortAsc\": \"Activate to sort ascending\",\n \"sortDesc\": \"Activate to sort descending\",\n \"sortNone\": \"Activate to remove sorting\",\n \"moveColumn\": \"Move column {label}\",\n \"columnMoved\": \"Column {label} moved to position {position} of {count}\",\n \"resizeColumn\": \"Width of column {label}\",\n \"columnResized\": \"Column {label} is {width} pixels wide\"\n },\n \"breadcrumbs\": {\n \"label\": \"Breadcrumb\",\n \"expand\": \"Show hidden path\"\n },\n \"autocomplete\": {\n \"loading\": \"Loading…\",\n \"noResults\": \"No results\",\n \"addOption\": \"Add \\\"{value}\\\"\",\n \"removeValue\": \"Remove {label}\",\n \"typeMore\": {\n \"one\": \"Type at least {n} character\",\n \"other\": \"Type at least {n} characters\"\n }\n },\n \"form\": {\n \"required\": \"This field is required\",\n \"min\": \"Minimum is {min}\",\n \"max\": \"Maximum is {max}\",\n \"len\": \"Length must be {len}\",\n \"pattern\": \"Invalid format\",\n \"email\": \"Enter a valid email\",\n \"url\": \"Enter a valid URL\",\n \"file\": \"Invalid file\",\n \"invalid\": \"Invalid value\",\n \"readonly\": \"Read only\",\n \"validating\": \"Checking…\"\n },\n \"dialog\": {\n \"confirm\": {\n \"title\": \"Confirm\"\n },\n \"prompt\": {\n \"title\": \"Prompt\",\n \"label\": \"Value\",\n \"required\": \"Enter a value.\"\n },\n \"ok\": \"OK\"\n },\n \"switch\": {\n \"loading\": \"Saving…\"\n },\n \"slider\": {\n \"min\": \"min\",\n \"max\": \"max\"\n },\n \"sidebar\": {\n \"expand\": \"Expand sidebar\",\n \"collapse\": \"Collapse sidebar\"\n },\n \"splitter\": {\n \"label\": \"Resize panels\"\n },\n \"statistic\": {\n \"trendUp\": \"Increase\",\n \"trendDown\": \"Decrease\",\n \"trendFlat\": \"No change\"\n },\n \"pagination\": {\n \"label\": \"Pagination\",\n \"pageSize\": \"Page size\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"page\": \"Page {n}\",\n \"first\": \"First page\",\n \"last\": \"Last page\",\n \"jumpTo\": \"Go to\",\n \"total\": \"{from}–{to} of {total}\",\n \"status\": \"Page {page} of {count}\"\n },\n \"navbar\": {\n \"openMenu\": \"Open menu\"\n },\n \"scrollSpy\": {\n \"label\": \"On this page\"\n },\n \"responseError\": {\n \"networkTitle\": \"No connection to the server\",\n \"networkMessage\": \"Check your internet connection and try again.\",\n \"abortedTitle\": \"Request cancelled\",\n \"abortedMessage\": \"The request was cancelled.\",\n \"validationTitle\": \"Check the data\",\n \"validationMessage\": \"The server returned a validation error. Fix the fields and try again.\",\n \"clientTitle\": \"Request error\",\n \"clientMessage\": \"The server rejected the request.\",\n \"serverTitle\": \"Server error\",\n \"serverMessage\": \"A server error occurred. Please try again.\",\n \"unknownTitle\": \"Something went wrong\",\n \"unknownMessage\": \"The operation could not be completed. Please try again.\",\n \"statusLabel\": \"HTTP {status}\",\n \"retryLabel\": \"Retry\",\n \"dismissLabel\": \"Dismiss\"\n },\n \"colors\": {\n \"neutral\": \"Neutral\",\n \"success\": \"Success\",\n \"warning\": \"Warning\",\n \"danger\": \"Danger\",\n \"info\": \"Info\",\n \"primary\": \"Primary\",\n \"slate\": \"Slate\",\n \"azure\": \"Azure\"\n },\n \"drawer\": {\n \"title\": \"Drawer\"\n },\n \"modal\": {\n \"title\": \"Dialog\"\n },\n \"numberInput\": {\n \"increase\": \"Increase\",\n \"decrease\": \"Decrease\"\n },\n \"toaster\": {\n \"dismiss\": \"Dismiss\",\n \"region\": \"Notifications\"\n },\n \"inputTag\": {\n \"removeTag\": \"Remove tag\",\n \"removeTagNamed\": \"Remove tag {tag}\",\n \"clearAll\": \"Clear all tags\",\n \"added\": \"Tag added: {tag}\",\n \"addedMany\": \"{count} tags added\",\n \"removed\": \"Tag removed: {tag}\",\n \"cleared\": \"All tags removed\",\n \"limitReached\": \"Tag limit reached\"\n },\n \"fileUpload\": {\n \"placeholder\": \"Drag files here or click to select\",\n \"progress\": \"Upload progress\",\n \"uploading\": \"Uploading…\",\n \"success\": \"Upload complete\",\n \"error\": \"Upload failed\",\n \"remove\": \"Remove {fileName}\",\n \"retry\": \"Retry upload\",\n \"retryFile\": \"Retry {fileName}\",\n \"abortFile\": \"Cancel upload of {fileName}\",\n \"statusPending\": \"Pending\",\n \"statusUploading\": \"Uploading\",\n \"statusSuccess\": \"Uploaded\",\n \"statusError\": \"Failed\"\n },\n \"formFile\": {\n \"upload\": \"Upload file\",\n \"change\": \"Change file\",\n \"remove\": \"Remove\",\n \"clearAll\": \"Clear all\",\n \"placeholder\": \"No files selected\",\n \"validateError\": \"Failed to validate dropped files\",\n \"removeFile\": \"Remove {fileName}\"\n },\n \"imageViewer\": {\n \"close\": \"Close image viewer\",\n \"prev\": \"Previous image\",\n \"next\": \"Next image\",\n \"zoomIn\": \"Zoom in\",\n \"zoomOut\": \"Zoom out\",\n \"resetZoom\": \"Reset zoom\",\n \"zoomToNatural\": \"Actual size (1:1)\",\n \"rotateLeft\": \"Rotate left\",\n \"rotateRight\": \"Rotate right\",\n \"download\": \"Download image\",\n \"empty\": \"No image\",\n \"label\": \"Image viewer\",\n \"position\": \"Image {index} of {total}\"\n },\n \"formErrorBanner\": {\n \"validationTitle\": \"Check the form fields\",\n \"validationMessage\": \"The server rejected the data. Fix the highlighted fields and try again.\",\n \"clientTitle\": \"Failed to save\",\n \"serverTitle\": \"Save error\",\n \"serverMessage\": \"Could not save the data. Please try again later.\"\n },\n \"uploadErrorBanner\": {\n \"networkTitle\": \"Failed to upload files\",\n \"networkMessage\": \"Check your connection and try again.\",\n \"validationTitle\": \"Files did not pass validation\",\n \"validationMessage\": \"Some of the files do not meet the requirements.\",\n \"serverTitle\": \"Upload error on the server\",\n \"serverMessage\": \"The server could not process the upload. Please try again.\"\n },\n \"input\": {\n \"clear\": \"Clear\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"limitReached\": \"Character limit reached\"\n },\n \"textarea\": {\n \"lines\": {\n \"one\": \"{n} line\",\n \"other\": \"{n} lines\"\n }\n },\n \"rating\": {\n \"label\": \"Rating\",\n \"valueText\": \"{value} of {max}\",\n \"valueTextWithLabel\": \"{value} of {max}, {label}\"\n },\n \"commandPalette\": {\n \"label\": \"Command palette\",\n \"placeholder\": \"Type a command or search…\",\n \"empty\": \"Nothing found\",\n \"recent\": \"Recent\",\n \"loading\": \"Loading…\"\n },\n \"delta\": {\n \"increase\": \"increase\"\n },\n \"filePreview\": {\n \"label\": \"File\"\n },\n \"fileValidation\": {\n \"accept\": \"File \\\"{fileName}\\\" does not match accept=\\\"{accept}\\\"\",\n \"extension\": \"File \\\"{fileName}\\\" has disallowed extension \\\".{extension}\\\"\",\n \"mimeType\": \"File \\\"{fileName}\\\" has disallowed mime type \\\"{mimeType}\\\"\",\n \"mimeTypeFallback\": \"File \\\"{fileName}\\\" has fallback mime type \\\"{mimeType}\\\"\",\n \"maxFileSize\": \"File \\\"{fileName}\\\" is too large ({size} bytes), maxBytes={maxBytes}\",\n \"maxCount\": \"Too many files selected ({count}), maxCount={maxCount}\",\n \"maxTotalSize\": \"Total files size is too large ({total} bytes), maxTotalSizeBytes={maxBytes}\"\n },\n \"kbd\": {\n \"command\": \"Command\",\n \"option\": \"Option\",\n \"shift\": \"Shift\",\n \"control\": \"Control\",\n \"enter\": \"Enter\",\n \"escape\": \"Escape\",\n \"tab\": \"Tab\",\n \"backspace\": \"Backspace\",\n \"delete\": \"Delete\",\n \"pageUp\": \"Page Up\",\n \"pageDown\": \"Page Down\",\n \"arrowUp\": \"Arrow Up\",\n \"arrowDown\": \"Arrow Down\",\n \"arrowLeft\": \"Arrow Left\",\n \"arrowRight\": \"Arrow Right\",\n \"then\": \"then\"\n },\n \"link\": {\n \"opensInNewTab\": \"opens in a new tab\"\n },\n \"colorPicker\": {\n \"panelLabel\": \"Color picker\",\n \"hue\": \"Hue\",\n \"saturation\": \"Saturation\",\n \"lightness\": \"Lightness\",\n \"opacity\": \"Opacity\",\n \"hexLabel\": \"Hex value\",\n \"presetsLabel\": \"Color presets\",\n \"swatchLabel\": \"Color {color}\"\n },\n \"collapse\": {\n \"empty\": \"Nothing here yet\"\n },\n \"list\": {\n \"empty\": \"Nothing here yet\"\n },\n \"button\": {\n \"loading\": \"Loading…\"\n },\n \"table\": {\n \"empty\": \"Nothing here yet\"\n },\n \"timeline\": {\n \"empty\": \"Nothing here yet\"\n },\n \"tabs\": {\n \"empty\": \"Nothing here yet\",\n \"close\": \"Close tab\"\n },\n \"bottomNav\": {\n \"label\": \"Bottom navigation\",\n \"badge\": \"{count} new\"\n },\n \"emptyState\": {\n \"title\": \"Nothing here yet\"\n },\n \"sortable\": {\n \"label\": \"Sortable list\",\n \"handle\": \"Reorder\",\n \"empty\": \"Nothing to sort yet\",\n \"grabbed\": \"Grabbed. Position {position} of {count}\",\n \"moved\": \"Position {position} of {count}\",\n \"dropped\": \"Dropped at position {position} of {count}\",\n \"cancelled\": \"Move cancelled\"\n },\n \"jsonViewer\": {\n \"search\": \"Search key or value\",\n \"expandAll\": \"Expand all\",\n \"collapseAll\": \"Collapse all\",\n \"copy\": \"Copy value\",\n \"copied\": \"Value copied\",\n \"copyFailed\": \"Could not copy value\",\n \"moreItems\": \"more\"\n },\n \"contextMenu\": {\n \"label\": \"Context menu\"\n }\n}\n"],"mappings":""}