@feugene/granularity 0.4.6 → 0.5.1
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.
- package/dist/chunks/{config-DTpwUHgF.js → config-BDiLiqSk.js} +1 -2
- package/dist/chunks/{config-DTpwUHgF.js.map → config-BDiLiqSk.js.map} +1 -1
- package/dist/chunks/{config-C2iI7_QX.js → config-BFZN9-vt.js} +1 -2
- package/dist/chunks/{config-C2iI7_QX.js.map → config-BFZN9-vt.js.map} +1 -1
- package/dist/chunks/{config-CByfsV-z2.js → config-BGmiXpR82.js} +1 -2
- package/dist/chunks/config-BGmiXpR82.js.map +1 -0
- package/dist/chunks/{config-C6SBJxcH.js → config-BV4vBzdm.js} +1 -4
- package/dist/chunks/config-BV4vBzdm.js.map +1 -0
- package/dist/chunks/{config-BA0BWYzs.js → config-BulF0Bf-.js} +1 -4
- package/dist/chunks/config-BulF0Bf-.js.map +1 -0
- package/dist/chunks/{config-1I95Zy4V.js → config-C-GVBa19.js} +1 -2
- package/dist/chunks/{config-1I95Zy4V.js.map → config-C-GVBa19.js.map} +1 -1
- package/dist/chunks/{config-DW_RqmUp.js → config-C9AOlKah.js} +1 -4
- package/dist/chunks/config-C9AOlKah.js.map +1 -0
- package/dist/chunks/{config-TyzU6gLf.js → config-C9MblwGq.js} +1 -4
- package/dist/chunks/config-C9MblwGq.js.map +1 -0
- package/dist/chunks/{config-r6hzn2Bn2.js → config-CA9XwYnZ2.js} +1 -2
- package/dist/chunks/{config-r6hzn2Bn2.js.map → config-CA9XwYnZ2.js.map} +1 -1
- package/dist/chunks/{config-Cgc-D1K4.js → config-CFcv0hjb.js} +1 -5
- package/dist/chunks/{config-Cgc-D1K4.js.map → config-CFcv0hjb.js.map} +1 -1
- package/dist/chunks/{config-BKRmlivc.js → config-C_-02Pu-.js} +1 -4
- package/dist/chunks/config-C_-02Pu-.js.map +1 -0
- package/dist/chunks/{config-DFRYOcrP.js → config-C_AOYGBr.js} +1 -2
- package/dist/chunks/{config-DFRYOcrP.js.map → config-C_AOYGBr.js.map} +1 -1
- package/dist/chunks/{config-qJXIIY1E.js → config-CdHY0Z7L.js} +1 -4
- package/dist/chunks/config-CdHY0Z7L.js.map +1 -0
- package/dist/chunks/{config-nfOMJXVs.js → config-CgjOJ3aF.js} +1 -2
- package/dist/chunks/{config-nfOMJXVs.js.map → config-CgjOJ3aF.js.map} +1 -1
- package/dist/chunks/{config-Dnu4VuO0.js → config-Cgk5ti-b.js} +1 -4
- package/dist/chunks/config-Cgk5ti-b.js.map +1 -0
- package/dist/chunks/{config-rQlbnEKn.js → config-ChQxl75m.js} +1 -4
- package/dist/chunks/config-ChQxl75m.js.map +1 -0
- package/dist/chunks/{config-Bv2G0OU6.js → config-Cn8TG49a.js} +1 -4
- package/dist/chunks/{config-Bv2G0OU6.js.map → config-Cn8TG49a.js.map} +1 -1
- package/dist/chunks/{config-C0j836dC.js → config-CsMIhZfM.js} +1 -4
- package/dist/chunks/config-CsMIhZfM.js.map +1 -0
- package/dist/chunks/{config-DmI1IQvI2.js → config-CwLoozAz2.js} +1 -4
- package/dist/chunks/config-CwLoozAz2.js.map +1 -0
- package/dist/chunks/{config-BzZGpWsj.js → config-D5ek7VSi.js} +1 -2
- package/dist/chunks/{config-BzZGpWsj.js.map → config-D5ek7VSi.js.map} +1 -1
- package/dist/chunks/{config-etXh7Bsr2.js → config-DDEWvph-2.js} +1 -2
- package/dist/chunks/config-DDEWvph-2.js.map +1 -0
- package/dist/chunks/{config-CMZE2fu0.js → config-DJWf0kWe.js} +0 -1
- package/dist/chunks/config-DJWf0kWe.js.map +1 -0
- package/dist/chunks/config-Da90XGsi.js.map +1 -1
- package/dist/chunks/{config-CgAY2WP9.js → config-Db4BEG8Y.js} +1 -2
- package/dist/chunks/{config-CgAY2WP9.js.map → config-Db4BEG8Y.js.map} +1 -1
- package/dist/chunks/{config-2wgwWaAB.js → config-DbghHyY_.js} +1 -4
- package/dist/chunks/config-DbghHyY_.js.map +1 -0
- package/dist/chunks/{config-BCPyma1I.js → config-YSOeh6cy.js} +1 -4
- package/dist/chunks/{config-BCPyma1I.js.map → config-YSOeh6cy.js.map} +1 -1
- package/dist/chunks/{config-C5SJXHQ4.js → config-ndXqsz5A.js} +1 -2
- package/dist/chunks/config-ndXqsz5A.js.map +1 -0
- package/dist/chunks/grBadgeStyles-pqqbVgLk.js.map +1 -1
- package/dist/chunks/grButtonStyles-BxZW2x0-.js.map +1 -1
- package/dist/chunks/{shared-BB4Bq2z2.js → shared-CyCPkimZ.js} +26 -26
- package/dist/chunks/{shared-BB4Bq2z2.js.map → shared-CyCPkimZ.js.map} +1 -1
- package/dist/components/GrAlert/chunks/{GrAlert-BjerGcU8.js → GrAlert-HyCjYJeL.js} +14 -0
- package/dist/components/GrAlert/chunks/GrAlert-HyCjYJeL.js.map +1 -0
- package/dist/components/GrAlert/index.js +2 -2
- package/dist/components/GrBadgeWrap/index.js +1 -1
- package/dist/components/GrBottomNav/index.js +1 -1
- package/dist/components/GrButtonGroup/index.js +1 -1
- package/dist/components/GrCard/index.js +1 -1
- package/dist/components/GrCheckbox/index.js +1 -1
- package/dist/components/GrCollapse/index.js +1 -1
- package/dist/components/GrConfirmDialog/index.js +1 -1
- package/dist/components/GrDataTable/index.js +1 -1
- package/dist/components/GrDropdownMenu/index.js +1 -1
- package/dist/components/GrEmptyState/index.js +1 -1
- package/dist/components/GrFileUpload/index.js +1 -1
- package/dist/components/GrFormField/index.js +1 -1
- package/dist/components/GrFormFile/index.js +1 -1
- package/dist/components/GrFormSection/index.js +1 -1
- package/dist/components/GrIcon/index.js +1 -1
- package/dist/components/GrImageViewer/index.js +1 -1
- package/dist/components/GrNavbar/index.js +1 -1
- package/dist/components/GrPagination/index.js +1 -1
- package/dist/components/GrPromptDialog/index.js +1 -1
- package/dist/components/GrRadioGroup/index.js +1 -1
- package/dist/components/GrSidebar/index.js +1 -1
- package/dist/components/GrSkeleton/index.js +1 -1
- package/dist/components/GrTable/index.js +1 -1
- package/dist/components/GrTabs/index.js +1 -1
- package/dist/components/GrTooltip/index.js +1 -1
- package/dist/composables/useToast.js.map +1 -1
- package/dist/directives/dropzone.js +17 -4
- package/dist/directives/dropzone.js.map +1 -1
- package/dist/granular-provider-node.js +1 -1
- package/dist/granular-provider.js +1 -1
- package/dist/index.js +48 -28
- package/dist/index.js.map +1 -0
- package/dist/types/src/components/GrAlert/GrAlert.vue.d.ts +2 -1
- package/dist/types/src/components/GrBadge/grBadgeStyles.d.ts +2 -1
- package/dist/types/src/components/GrButton/grButtonStyles.d.ts +2 -1
- package/dist/types/src/components/GrProgressBar/grStyle.d.ts +2 -1
- package/dist/types/src/components/shared/tones.d.ts +10 -0
- package/dist/types/src/composables/useToast.d.ts +2 -1
- package/dist/types/src/index.d.ts +2 -0
- package/package.json +3 -3
- package/dist/chunks/config-2wgwWaAB.js.map +0 -1
- package/dist/chunks/config-BA0BWYzs.js.map +0 -1
- package/dist/chunks/config-BKRmlivc.js.map +0 -1
- package/dist/chunks/config-C0j836dC.js.map +0 -1
- package/dist/chunks/config-C5SJXHQ4.js.map +0 -1
- package/dist/chunks/config-C6SBJxcH.js.map +0 -1
- package/dist/chunks/config-CByfsV-z2.js.map +0 -1
- package/dist/chunks/config-CMZE2fu0.js.map +0 -1
- package/dist/chunks/config-DW_RqmUp.js.map +0 -1
- package/dist/chunks/config-DmI1IQvI2.js.map +0 -1
- package/dist/chunks/config-Dnu4VuO0.js.map +0 -1
- package/dist/chunks/config-TyzU6gLf.js.map +0 -1
- package/dist/chunks/config-etXh7Bsr2.js.map +0 -1
- package/dist/chunks/config-qJXIIY1E.js.map +0 -1
- package/dist/chunks/config-rQlbnEKn.js.map +0 -1
- package/dist/components/GrAlert/chunks/GrAlert-BjerGcU8.js.map +0 -1
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
import { t as grAlertConfig } from "./config-
|
|
1
|
+
import { t as grAlertConfig } from "./config-BV4vBzdm.js";
|
|
2
2
|
import { t as grAvatarConfig } from "./config-CU_CBd0k.js";
|
|
3
3
|
import { t as grBadgeConfig } from "./config-BaMO9dQh.js";
|
|
4
|
-
import { t as grBadgeWrapConfig } from "./config-
|
|
5
|
-
import { t as grBottomNavConfig } from "./config-
|
|
4
|
+
import { t as grBadgeWrapConfig } from "./config-C9AOlKah.js";
|
|
5
|
+
import { t as grBottomNavConfig } from "./config-C_-02Pu-.js";
|
|
6
6
|
import { t as grButtonConfig } from "./config-Dkq0HeLe.js";
|
|
7
|
-
import { t as grButtonGroupConfig } from "./config-
|
|
8
|
-
import { t as grCardConfig } from "./config-
|
|
9
|
-
import { t as grCheckboxConfig } from "./config-
|
|
10
|
-
import { t as grIconConfig } from "./config-
|
|
11
|
-
import { t as grCollapseConfig } from "./config-
|
|
12
|
-
import { t as grConfirmDialogConfig } from "./config-
|
|
13
|
-
import { t as grDataTableConfig } from "./config-
|
|
7
|
+
import { t as grButtonGroupConfig } from "./config-Cn8TG49a.js";
|
|
8
|
+
import { t as grCardConfig } from "./config-ChQxl75m.js";
|
|
9
|
+
import { t as grCheckboxConfig } from "./config-C9MblwGq.js";
|
|
10
|
+
import { t as grIconConfig } from "./config-DbghHyY_.js";
|
|
11
|
+
import { t as grCollapseConfig } from "./config-D5ek7VSi.js";
|
|
12
|
+
import { t as grConfirmDialogConfig } from "./config-C_AOYGBr.js";
|
|
13
|
+
import { t as grDataTableConfig } from "./config-DJWf0kWe.js";
|
|
14
14
|
import { t as grDialogSafelist } from "./safelist-BF822K15.js";
|
|
15
15
|
import { t as grDrawerConfig } from "./config-DxqpV-KM.js";
|
|
16
16
|
import { t as grDropdownConfig } from "./config-C4AlNm912.js";
|
|
17
|
-
import { t as grDropdownMenuConfig } from "./config-
|
|
18
|
-
import { t as grEmptyStateConfig } from "./config-
|
|
19
|
-
import { t as grFileUploadConfig } from "./config-
|
|
20
|
-
import { t as grFormFieldConfig } from "./config-
|
|
21
|
-
import { t as grFormFileConfig } from "./config-
|
|
22
|
-
import { t as grFormSectionConfig } from "./config-
|
|
23
|
-
import { t as grImageViewerConfig } from "./config-
|
|
17
|
+
import { t as grDropdownMenuConfig } from "./config-DDEWvph-2.js";
|
|
18
|
+
import { t as grEmptyStateConfig } from "./config-Db4BEG8Y.js";
|
|
19
|
+
import { t as grFileUploadConfig } from "./config-BGmiXpR82.js";
|
|
20
|
+
import { t as grFormFieldConfig } from "./config-Cgk5ti-b.js";
|
|
21
|
+
import { t as grFormFileConfig } from "./config-ndXqsz5A.js";
|
|
22
|
+
import { t as grFormSectionConfig } from "./config-YSOeh6cy.js";
|
|
23
|
+
import { t as grImageViewerConfig } from "./config-BulF0Bf-.js";
|
|
24
24
|
import { t as grInputConfig } from "./config-D19pyP4D.js";
|
|
25
25
|
import { t as grInputTagConfig } from "./config-DgRJlF00.js";
|
|
26
26
|
import { t as grLinkConfig } from "./config-DUtUkSzc.js";
|
|
27
27
|
import { t as grListConfig } from "./config-fCcRwjIB.js";
|
|
28
28
|
import { t as grLoadingConfig } from "./config-BN-B2K4r.js";
|
|
29
29
|
import { t as grModalConfig } from "./config-XwI6t8cn.js";
|
|
30
|
-
import { t as grNavbarConfig } from "./config-
|
|
30
|
+
import { t as grNavbarConfig } from "./config-BDiLiqSk.js";
|
|
31
31
|
import { t as grNumberInputConfig } from "./config-bpQYM5O-.js";
|
|
32
|
-
import { t as grPaginationConfig } from "./config-
|
|
32
|
+
import { t as grPaginationConfig } from "./config-BFZN9-vt.js";
|
|
33
33
|
import { t as grProgressBarConfig } from "./config-Da90XGsi.js";
|
|
34
|
-
import { t as grPromptDialogConfig } from "./config-
|
|
34
|
+
import { t as grPromptDialogConfig } from "./config-C-GVBa19.js";
|
|
35
35
|
import { t as grRadioConfig } from "./config-DEv4m-ZP.js";
|
|
36
|
-
import { t as grRadioGroupConfig } from "./config-
|
|
36
|
+
import { t as grRadioGroupConfig } from "./config-CgjOJ3aF.js";
|
|
37
37
|
import { t as grSegmentedConfig } from "./config-CUgvsjZx.js";
|
|
38
38
|
import { t as grSelectConfig } from "./config-R0jaXatX.js";
|
|
39
|
-
import { t as grSidebarConfig } from "./config-
|
|
40
|
-
import { t as grSkeletonConfig } from "./config-
|
|
39
|
+
import { t as grSidebarConfig } from "./config-CdHY0Z7L.js";
|
|
40
|
+
import { t as grSkeletonConfig } from "./config-CsMIhZfM.js";
|
|
41
41
|
import { t as grSwitchConfig } from "./config-CM7nbATU2.js";
|
|
42
|
-
import { t as grTableConfig } from "./config-
|
|
43
|
-
import { t as grTabsConfig } from "./config-
|
|
42
|
+
import { t as grTableConfig } from "./config-CFcv0hjb.js";
|
|
43
|
+
import { t as grTabsConfig } from "./config-CwLoozAz2.js";
|
|
44
44
|
import { t as grTextareaConfig } from "./config-CWvHiaqr2.js";
|
|
45
45
|
import { t as grToasterConfig } from "./config-BvuQUBtZ.js";
|
|
46
|
-
import { t as grTooltipConfig } from "./config-
|
|
46
|
+
import { t as grTooltipConfig } from "./config-CA9XwYnZ2.js";
|
|
47
47
|
import { t as grTreeConfig } from "./config-DCQO6H6h.js";
|
|
48
48
|
import { t as grTreeSelectConfig } from "./config-BNOf_qjD.js";
|
|
49
49
|
import { defineGranularComponent, defineGranularProvider } from "@feugene/unocss-preset-granular/contract";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-BB4Bq2z2.js","names":[],"sources":["../../src/components/GrDialog/config.ts","../../src/granular-provider/shared.ts"],"sourcesContent":["import {defineGranularComponent} from '@feugene/unocss-preset-granular/contract'\n\nimport { grDialogSafelist } from './safelist'\n\nexport const grDialogConfig = defineGranularComponent(import.meta.url, {\n name: 'GrDialog',\n dependencies: ['GrButton', 'GrModal'],\n safelist: grDialogSafelist,\n})\n","// Общий код browser- и node-entry granular-provider'а.\n//\n// Оба entry (`./index.ts`, `./node.ts`) отличаются только списком\n// компонентов, у которых есть node-only вариант конфига (например,\n// `GrButton`, чей `config.node.ts` использует `tokenDefinitionsFromCssSync`\n// и тянет `node:fs`). Browser-вариант таких компонентов берёт облегчённый\n// `./config.ts`, node-вариант — `./config.node.ts`. Всё остальное — `id`,\n// `theme.*`, `packageBaseUrl` и полный список browser-safe компонентов —\n// живёт здесь.\n//\n// ВАЖНО: все `new URL('../styles/...', import.meta.url)` намеренно находятся\n// здесь — `shared.ts` лежит в той же директории, что и `index.ts` / `node.ts`,\n// поэтому относительные пути идентичны. Это ОК для браузера: бандлеры\n// транслируют такие конструкции в статические asset-URL и `node:*` в бандл\n// не утаскивают.\n//\n// Ключи записи `<Name>: ds<Name>Config` в `granularityComponentConfigs`\n// критичны для regex‑парсинга в `apps/showcase/scripts/generate-component-api.mjs`,\n// не ломайте формат.\nimport {\n defineGranularProvider,\n type GranularComponentDescriptor,\n type GranularProvider,\n} from '@feugene/unocss-preset-granular/contract'\nimport { grAlertConfig } from '../components/GrAlert/config'\nimport { grAvatarConfig } from '../components/GrAvatar/config'\nimport { grBadgeConfig } from '../components/GrBadge/config'\nimport { grBadgeWrapConfig } from '../components/GrBadgeWrap/config'\nimport { grBottomNavConfig } from '../components/GrBottomNav/config'\nimport { grButtonConfig } from '../components/GrButton/config'\nimport { grButtonGroupConfig } from '../components/GrButtonGroup/config'\nimport { grCardConfig } from '../components/GrCard/config'\nimport { grCheckboxConfig } from '../components/GrCheckbox/config'\nimport { grCollapseConfig } from '../components/GrCollapse/config'\nimport { grConfirmDialogConfig } from '../components/GrConfirmDialog/config'\nimport { grDataTableConfig } from '../components/GrDataTable/config'\nimport { grDialogConfig } from '../components/GrDialog/config'\nimport { grDrawerConfig } from '../components/GrDrawer/config'\nimport { grDropdownConfig } from '../components/GrDropdown/config'\nimport { grDropdownMenuConfig } from '../components/GrDropdownMenu/config'\nimport { grEmptyStateConfig } from '../components/GrEmptyState/config'\nimport { grFileUploadConfig } from '../components/GrFileUpload/config'\nimport { grFormFieldConfig } from '../components/GrFormField/config'\nimport { grFormFileConfig } from '../components/GrFormFile/config'\nimport { grFormSectionConfig } from '../components/GrFormSection/config'\nimport { grIconConfig } from '../components/GrIcon/config'\nimport { grImageViewerConfig } from '../components/GrImageViewer/config'\nimport { grInputConfig } from '../components/GrInput/config'\nimport { grInputTagConfig } from '../components/GrInputTag/config'\nimport { grLinkConfig } from '../components/GrLink/config'\nimport { grListConfig } from '../components/GrList/config'\nimport { grLoadingConfig } from '../components/GrLoading/config'\nimport { grModalConfig } from '../components/GrModal/config'\nimport { grNavbarConfig } from '../components/GrNavbar/config'\nimport { grNumberInputConfig } from '../components/GrNumberInput/config'\nimport { grPaginationConfig } from '../components/GrPagination/config'\nimport { grProgressBarConfig } from '../components/GrProgressBar/config'\nimport { grPromptDialogConfig } from '../components/GrPromptDialog/config'\nimport { grRadioConfig } from '../components/GrRadio/config'\nimport { grRadioGroupConfig } from '../components/GrRadioGroup/config'\nimport { grSegmentedConfig } from '../components/GrSegmented/config'\nimport { grSelectConfig } from '../components/GrSelect/config'\nimport { grSidebarConfig } from '../components/GrSidebar/config'\nimport { grSkeletonConfig } from '../components/GrSkeleton/config'\nimport { grSwitchConfig } from '../components/GrSwitch/config'\nimport { grTableConfig } from '../components/GrTable/config'\nimport { grTabsConfig } from '../components/GrTabs/config'\nimport { grTextareaConfig } from '../components/GrTextarea/config'\nimport { grToasterConfig } from '../components/GrToaster/config'\nimport { grTooltipConfig } from '../components/GrTooltip/config'\nimport { grTreeConfig } from '../components/GrTree/config'\nimport { grTreeSelectConfig } from '../components/GrTreeSelect/config'\n\n/** Идентификатор провайдера — совпадает с именем пакета. */\nexport const GRANULARITY_PROVIDER_ID = '@feugene/granularity'\n\n// runtime-concat: литерал `new URL('..', import.meta.url)` rolldown заменяет\n// на `data:`-URL, поэтому собираем корень пакета из `import.meta.url` вручную\n// (отрезая два последних сегмента: имя файла и каталог `granular-provider/`).\nconst packageBaseUrl = `${import.meta.url.slice(\n 0,\n import.meta.url.lastIndexOf('/', import.meta.url.lastIndexOf('/') - 1) + 1,\n)}`\n\n/** Встроенные темы пакета. Единственный источник правды о списке тем. */\nexport const granularityThemeNames = ['light', 'dark'] as const\nexport type GranularityThemeName = (typeof granularityThemeNames)[number]\n\n/** Темы, активные по умолчанию, если окружение не переопределяет выбор. */\nexport const granularityDefaultThemes: readonly GranularityThemeName[] = ['light']\n\nconst theme = {\n baseCssUrl: new URL('../styles/base.css', import.meta.url).href,\n tokensCssUrl: new URL('../styles/tokens.css', import.meta.url).href,\n themes: {\n light: new URL('../styles/themes/light.css', import.meta.url).href,\n dark: new URL('../styles/themes/dark.css', import.meta.url).href,\n },\n defaultThemes: granularityDefaultThemes,\n} as const\n\n/**\n * Полный реестр публичных компонентов пакета `@feugene/granularity`.\n *\n * Ключи — имена компонентов (совпадают с публичным subpath‑экспортом\n * `@feugene/granularity/components/<Name>`). Значения — browser‑safe\n * `ds<Name>Config` из `./config.ts` рядом с SFC.\n *\n * Для компонентов, у которых есть node-only вариант конфига\n * (например, `GrButton` с `tokenDefinitionsFromCssSync`), browser‑конфиг\n * остаётся здесь, а node‑вариант подставляется снаружи через\n * `createGranularityProvider(overrides)` — см. `./index.ts` (browser)\n * и `./node.ts` (node).\n *\n * Формат записи `<Name>: ds<Name>Config` критичен для regex‑парсинга\n * в `apps/showcase/scripts/generate-component-api.mjs`, не ломайте его.\n */\nexport const granularityComponentConfigs = {\n GrAlert: grAlertConfig,\n GrAvatar: grAvatarConfig,\n GrBadge: grBadgeConfig,\n GrBadgeWrap: grBadgeWrapConfig,\n GrBottomNav: grBottomNavConfig,\n GrButton: grButtonConfig,\n GrButtonGroup: grButtonGroupConfig,\n GrCard: grCardConfig,\n GrCheckbox: grCheckboxConfig,\n GrCollapse: grCollapseConfig,\n GrConfirmDialog: grConfirmDialogConfig,\n GrDataTable: grDataTableConfig,\n GrDialog: grDialogConfig,\n GrDrawer: grDrawerConfig,\n GrDropdown: grDropdownConfig,\n GrDropdownMenu: grDropdownMenuConfig,\n GrEmptyState: grEmptyStateConfig,\n GrFileUpload: grFileUploadConfig,\n GrFormField: grFormFieldConfig,\n GrFormFile: grFormFileConfig,\n GrFormSection: grFormSectionConfig,\n GrIcon: grIconConfig,\n GrImageViewer: grImageViewerConfig,\n GrInput: grInputConfig,\n GrInputTag: grInputTagConfig,\n GrLink: grLinkConfig,\n GrList: grListConfig,\n GrLoading: grLoadingConfig,\n GrModal: grModalConfig,\n GrNavbar: grNavbarConfig,\n GrNumberInput: grNumberInputConfig,\n GrPagination: grPaginationConfig,\n GrProgressBar: grProgressBarConfig,\n GrPromptDialog: grPromptDialogConfig,\n GrRadio: grRadioConfig,\n GrRadioGroup: grRadioGroupConfig,\n GrSegmented: grSegmentedConfig,\n GrSelect: grSelectConfig,\n GrSidebar: grSidebarConfig,\n GrSkeleton: grSkeletonConfig,\n GrSwitch: grSwitchConfig,\n GrTable: grTableConfig,\n GrTabs: grTabsConfig,\n GrTextarea: grTextareaConfig,\n GrToaster: grToasterConfig,\n GrTooltip: grTooltipConfig,\n GrTree: grTreeConfig,\n GrTreeSelect: grTreeSelectConfig,\n}\n\nexport type GranularityComponentName = keyof typeof granularityComponentConfigs\n\n/** Базовый (browser-safe) набор компонентов в порядке реестра. */\nconst baseComponents: readonly GranularComponentDescriptor[] = Object.values(\n granularityComponentConfigs,\n)\n\n/**\n * Собирает granular-provider пакета `@feugene/granularity`.\n *\n * Принимает массив `GranularComponentDescriptor`'ов — это компоненты,\n * у которых есть node-only вариант конфига (например, `GrButton` с\n * `tokenDefinitionsFromCssSync`). Дескрипторы с именем, которое уже\n * присутствует в базовом наборе, переопределяют его (побеждает\n * переданный снаружи), остальные — добавляются в конец списка.\n */\nexport function createGranularityProvider(\n overrides: readonly GranularComponentDescriptor[] = [],\n): GranularProvider {\n const overrideByName = new Map(\n overrides.map(component => [component.name, component]),\n )\n const components: GranularComponentDescriptor[] = [\n ...baseComponents.map(component => overrideByName.get(component.name) ?? component),\n ...overrides.filter(component => !baseComponents.some(base => base.name === component.name)),\n ]\n\n return defineGranularProvider({\n id: GRANULARITY_PROVIDER_ID,\n contractVersion: 1,\n packageBaseUrl,\n components,\n theme,\n })\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAa,iBAAiB,wBAAwB,OAAO,KAAK,KAAK;CACrE,MAAM;CACN,cAAc,CAAC,YAAY,UAAU;CACrC,UAAU;CACX,CAAC;;;;ACkEF,IAAa,0BAA0B;AAKvC,IAAM,iBAAiB,GAAG,OAAO,KAAK,IAAI,MACxC,GACA,OAAO,KAAK,IAAI,YAAY,KAAK,OAAO,KAAK,IAAI,YAAY,IAAI,GAAG,EAAE,GAAG,EAC1E;;AAGD,IAAa,wBAAwB,CAAC,SAAS,OAAO;;AAItD,IAAa,2BAA4D,CAAC,QAAQ;AAElF,IAAM,QAAQ;CACZ,YAAY,IAAA,IAAA,i2BAAA,KAAA,OAAA,KAAA,IAA8C,CAAC;CAC3D,cAAc,IAAA,IAAA,iuKAAA,KAAA,OAAA,KAAA,IAAgD,CAAC;CAC/D,QAAQ;EACN,OAAO,IAAA,IAAA,qrGAAA,KAAA,OAAA,KAAA,IAAsD,CAAC;EAC9D,MAAM,IAAA,IAAA,qxGAAA,KAAA,OAAA,KAAA,IAAqD,CAAC;EAC7D;CACD,eAAe;CAChB;;;;;;;;;;;;;;;;;AAkBD,IAAa,8BAA8B;CACzC,SAAS;CACT,UAAU;CACV,SAAS;CACT,aAAa;CACb,aAAa;CACb,UAAU;CACV,eAAe;CACf,QAAQ;CACR,YAAY;CACZ,YAAY;CACZ,iBAAiB;CACjB,aAAa;CACb,UAAU;CACV,UAAU;CACV,YAAY;CACZ,gBAAgB;CAChB,cAAc;CACd,cAAc;CACd,aAAa;CACb,YAAY;CACZ,eAAe;CACf,QAAQ;CACR,eAAe;CACf,SAAS;CACT,YAAY;CACZ,QAAQ;CACR,QAAQ;CACR,WAAW;CACX,SAAS;CACT,UAAU;CACV,eAAe;CACf,cAAc;CACd,eAAe;CACf,gBAAgB;CAChB,SAAS;CACT,cAAc;CACd,aAAa;CACb,UAAU;CACV,WAAW;CACX,YAAY;CACZ,UAAU;CACV,SAAS;CACT,QAAQ;CACR,YAAY;CACZ,WAAW;CACX,WAAW;CACX,QAAQ;CACR,cAAc;CACf;;AAKD,IAAM,iBAAyD,OAAO,OACpE,4BACD;;;;;;;;;;AAWD,SAAgB,0BACd,YAAoD,EAAE,EACpC;CAClB,MAAM,iBAAiB,IAAI,IACzB,UAAU,KAAI,cAAa,CAAC,UAAU,MAAM,UAAU,CAAC,CACxD;AAMD,QAAO,uBAAuB;EAC5B,IAAI;EACJ,iBAAiB;EACjB;EACA,YATgD,CAChD,GAAG,eAAe,KAAI,cAAa,eAAe,IAAI,UAAU,KAAK,IAAI,UAAU,EACnF,GAAG,UAAU,QAAO,cAAa,CAAC,eAAe,MAAK,SAAQ,KAAK,SAAS,UAAU,KAAK,CAAC,CAC7F;EAOC;EACD,CAAC"}
|
|
1
|
+
{"version":3,"file":"shared-CyCPkimZ.js","names":[],"sources":["../../src/components/GrDialog/config.ts","../../src/granular-provider/shared.ts"],"sourcesContent":["import {defineGranularComponent} from '@feugene/unocss-preset-granular/contract'\n\nimport { grDialogSafelist } from './safelist'\n\nexport const grDialogConfig = defineGranularComponent(import.meta.url, {\n name: 'GrDialog',\n dependencies: ['GrButton', 'GrModal'],\n safelist: grDialogSafelist,\n})\n","// Общий код browser- и node-entry granular-provider'а.\n//\n// Оба entry (`./index.ts`, `./node.ts`) отличаются только списком\n// компонентов, у которых есть node-only вариант конфига (например,\n// `GrButton`, чей `config.node.ts` использует `tokenDefinitionsFromCssSync`\n// и тянет `node:fs`). Browser-вариант таких компонентов берёт облегчённый\n// `./config.ts`, node-вариант — `./config.node.ts`. Всё остальное — `id`,\n// `theme.*`, `packageBaseUrl` и полный список browser-safe компонентов —\n// живёт здесь.\n//\n// ВАЖНО: все `new URL('../styles/...', import.meta.url)` намеренно находятся\n// здесь — `shared.ts` лежит в той же директории, что и `index.ts` / `node.ts`,\n// поэтому относительные пути идентичны. Это ОК для браузера: бандлеры\n// транслируют такие конструкции в статические asset-URL и `node:*` в бандл\n// не утаскивают.\n//\n// Ключи записи `<Name>: ds<Name>Config` в `granularityComponentConfigs`\n// критичны для regex‑парсинга в `apps/showcase/scripts/generate-component-api.mjs`,\n// не ломайте формат.\nimport {\n defineGranularProvider,\n type GranularComponentDescriptor,\n type GranularProvider,\n} from '@feugene/unocss-preset-granular/contract'\nimport { grAlertConfig } from '../components/GrAlert/config'\nimport { grAvatarConfig } from '../components/GrAvatar/config'\nimport { grBadgeConfig } from '../components/GrBadge/config'\nimport { grBadgeWrapConfig } from '../components/GrBadgeWrap/config'\nimport { grBottomNavConfig } from '../components/GrBottomNav/config'\nimport { grButtonConfig } from '../components/GrButton/config'\nimport { grButtonGroupConfig } from '../components/GrButtonGroup/config'\nimport { grCardConfig } from '../components/GrCard/config'\nimport { grCheckboxConfig } from '../components/GrCheckbox/config'\nimport { grCollapseConfig } from '../components/GrCollapse/config'\nimport { grConfirmDialogConfig } from '../components/GrConfirmDialog/config'\nimport { grDataTableConfig } from '../components/GrDataTable/config'\nimport { grDialogConfig } from '../components/GrDialog/config'\nimport { grDrawerConfig } from '../components/GrDrawer/config'\nimport { grDropdownConfig } from '../components/GrDropdown/config'\nimport { grDropdownMenuConfig } from '../components/GrDropdownMenu/config'\nimport { grEmptyStateConfig } from '../components/GrEmptyState/config'\nimport { grFileUploadConfig } from '../components/GrFileUpload/config'\nimport { grFormFieldConfig } from '../components/GrFormField/config'\nimport { grFormFileConfig } from '../components/GrFormFile/config'\nimport { grFormSectionConfig } from '../components/GrFormSection/config'\nimport { grIconConfig } from '../components/GrIcon/config'\nimport { grImageViewerConfig } from '../components/GrImageViewer/config'\nimport { grInputConfig } from '../components/GrInput/config'\nimport { grInputTagConfig } from '../components/GrInputTag/config'\nimport { grLinkConfig } from '../components/GrLink/config'\nimport { grListConfig } from '../components/GrList/config'\nimport { grLoadingConfig } from '../components/GrLoading/config'\nimport { grModalConfig } from '../components/GrModal/config'\nimport { grNavbarConfig } from '../components/GrNavbar/config'\nimport { grNumberInputConfig } from '../components/GrNumberInput/config'\nimport { grPaginationConfig } from '../components/GrPagination/config'\nimport { grProgressBarConfig } from '../components/GrProgressBar/config'\nimport { grPromptDialogConfig } from '../components/GrPromptDialog/config'\nimport { grRadioConfig } from '../components/GrRadio/config'\nimport { grRadioGroupConfig } from '../components/GrRadioGroup/config'\nimport { grSegmentedConfig } from '../components/GrSegmented/config'\nimport { grSelectConfig } from '../components/GrSelect/config'\nimport { grSidebarConfig } from '../components/GrSidebar/config'\nimport { grSkeletonConfig } from '../components/GrSkeleton/config'\nimport { grSwitchConfig } from '../components/GrSwitch/config'\nimport { grTableConfig } from '../components/GrTable/config'\nimport { grTabsConfig } from '../components/GrTabs/config'\nimport { grTextareaConfig } from '../components/GrTextarea/config'\nimport { grToasterConfig } from '../components/GrToaster/config'\nimport { grTooltipConfig } from '../components/GrTooltip/config'\nimport { grTreeConfig } from '../components/GrTree/config'\nimport { grTreeSelectConfig } from '../components/GrTreeSelect/config'\n\n/** Идентификатор провайдера — совпадает с именем пакета. */\nexport const GRANULARITY_PROVIDER_ID = '@feugene/granularity'\n\n// runtime-concat: литерал `new URL('..', import.meta.url)` rolldown заменяет\n// на `data:`-URL, поэтому собираем корень пакета из `import.meta.url` вручную\n// (отрезая два последних сегмента: имя файла и каталог `granular-provider/`).\nconst packageBaseUrl = `${import.meta.url.slice(\n 0,\n import.meta.url.lastIndexOf('/', import.meta.url.lastIndexOf('/') - 1) + 1,\n)}`\n\n/** Встроенные темы пакета. Единственный источник правды о списке тем. */\nexport const granularityThemeNames = ['light', 'dark'] as const\nexport type GranularityThemeName = (typeof granularityThemeNames)[number]\n\n/** Темы, активные по умолчанию, если окружение не переопределяет выбор. */\nexport const granularityDefaultThemes: readonly GranularityThemeName[] = ['light']\n\nconst theme = {\n baseCssUrl: new URL('../styles/base.css', import.meta.url).href,\n tokensCssUrl: new URL('../styles/tokens.css', import.meta.url).href,\n themes: {\n light: new URL('../styles/themes/light.css', import.meta.url).href,\n dark: new URL('../styles/themes/dark.css', import.meta.url).href,\n },\n defaultThemes: granularityDefaultThemes,\n} as const\n\n/**\n * Полный реестр публичных компонентов пакета `@feugene/granularity`.\n *\n * Ключи — имена компонентов (совпадают с публичным subpath‑экспортом\n * `@feugene/granularity/components/<Name>`). Значения — browser‑safe\n * `ds<Name>Config` из `./config.ts` рядом с SFC.\n *\n * Для компонентов, у которых есть node-only вариант конфига\n * (например, `GrButton` с `tokenDefinitionsFromCssSync`), browser‑конфиг\n * остаётся здесь, а node‑вариант подставляется снаружи через\n * `createGranularityProvider(overrides)` — см. `./index.ts` (browser)\n * и `./node.ts` (node).\n *\n * Формат записи `<Name>: ds<Name>Config` критичен для regex‑парсинга\n * в `apps/showcase/scripts/generate-component-api.mjs`, не ломайте его.\n */\nexport const granularityComponentConfigs = {\n GrAlert: grAlertConfig,\n GrAvatar: grAvatarConfig,\n GrBadge: grBadgeConfig,\n GrBadgeWrap: grBadgeWrapConfig,\n GrBottomNav: grBottomNavConfig,\n GrButton: grButtonConfig,\n GrButtonGroup: grButtonGroupConfig,\n GrCard: grCardConfig,\n GrCheckbox: grCheckboxConfig,\n GrCollapse: grCollapseConfig,\n GrConfirmDialog: grConfirmDialogConfig,\n GrDataTable: grDataTableConfig,\n GrDialog: grDialogConfig,\n GrDrawer: grDrawerConfig,\n GrDropdown: grDropdownConfig,\n GrDropdownMenu: grDropdownMenuConfig,\n GrEmptyState: grEmptyStateConfig,\n GrFileUpload: grFileUploadConfig,\n GrFormField: grFormFieldConfig,\n GrFormFile: grFormFileConfig,\n GrFormSection: grFormSectionConfig,\n GrIcon: grIconConfig,\n GrImageViewer: grImageViewerConfig,\n GrInput: grInputConfig,\n GrInputTag: grInputTagConfig,\n GrLink: grLinkConfig,\n GrList: grListConfig,\n GrLoading: grLoadingConfig,\n GrModal: grModalConfig,\n GrNavbar: grNavbarConfig,\n GrNumberInput: grNumberInputConfig,\n GrPagination: grPaginationConfig,\n GrProgressBar: grProgressBarConfig,\n GrPromptDialog: grPromptDialogConfig,\n GrRadio: grRadioConfig,\n GrRadioGroup: grRadioGroupConfig,\n GrSegmented: grSegmentedConfig,\n GrSelect: grSelectConfig,\n GrSidebar: grSidebarConfig,\n GrSkeleton: grSkeletonConfig,\n GrSwitch: grSwitchConfig,\n GrTable: grTableConfig,\n GrTabs: grTabsConfig,\n GrTextarea: grTextareaConfig,\n GrToaster: grToasterConfig,\n GrTooltip: grTooltipConfig,\n GrTree: grTreeConfig,\n GrTreeSelect: grTreeSelectConfig,\n}\n\nexport type GranularityComponentName = keyof typeof granularityComponentConfigs\n\n/** Базовый (browser-safe) набор компонентов в порядке реестра. */\nconst baseComponents: readonly GranularComponentDescriptor[] = Object.values(\n granularityComponentConfigs,\n)\n\n/**\n * Собирает granular-provider пакета `@feugene/granularity`.\n *\n * Принимает массив `GranularComponentDescriptor`'ов — это компоненты,\n * у которых есть node-only вариант конфига (например, `GrButton` с\n * `tokenDefinitionsFromCssSync`). Дескрипторы с именем, которое уже\n * присутствует в базовом наборе, переопределяют его (побеждает\n * переданный снаружи), остальные — добавляются в конец списка.\n */\nexport function createGranularityProvider(\n overrides: readonly GranularComponentDescriptor[] = [],\n): GranularProvider {\n const overrideByName = new Map(\n overrides.map(component => [component.name, component]),\n )\n const components: GranularComponentDescriptor[] = [\n ...baseComponents.map(component => overrideByName.get(component.name) ?? component),\n ...overrides.filter(component => !baseComponents.some(base => base.name === component.name)),\n ]\n\n return defineGranularProvider({\n id: GRANULARITY_PROVIDER_ID,\n contractVersion: 1,\n packageBaseUrl,\n components,\n theme,\n })\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAa,iBAAiB,wBAAwB,OAAO,KAAK,KAAK;CACrE,MAAM;CACN,cAAc,CAAC,YAAY,UAAU;CACrC,UAAU;CACX,CAAC;;;;ACkEF,IAAa,0BAA0B;AAKvC,IAAM,iBAAiB,GAAG,OAAO,KAAK,IAAI,MACxC,GACA,OAAO,KAAK,IAAI,YAAY,KAAK,OAAO,KAAK,IAAI,YAAY,IAAI,GAAG,EAAE,GAAG,EAC1E;;AAGD,IAAa,wBAAwB,CAAC,SAAS,OAAO;;AAItD,IAAa,2BAA4D,CAAC,QAAQ;AAElF,IAAM,QAAQ;CACZ,YAAY,IAAA,IAAA,i2BAAA,KAAA,OAAA,KAAA,IAA8C,CAAC;CAC3D,cAAc,IAAA,IAAA,iuKAAA,KAAA,OAAA,KAAA,IAAgD,CAAC;CAC/D,QAAQ;EACN,OAAO,IAAA,IAAA,qrGAAA,KAAA,OAAA,KAAA,IAAsD,CAAC;EAC9D,MAAM,IAAA,IAAA,qxGAAA,KAAA,OAAA,KAAA,IAAqD,CAAC;EAC7D;CACD,eAAe;CAChB;;;;;;;;;;;;;;;;;AAkBD,IAAa,8BAA8B;CACzC,SAAS;CACT,UAAU;CACV,SAAS;CACT,aAAa;CACb,aAAa;CACb,UAAU;CACV,eAAe;CACf,QAAQ;CACR,YAAY;CACZ,YAAY;CACZ,iBAAiB;CACjB,aAAa;CACb,UAAU;CACV,UAAU;CACV,YAAY;CACZ,gBAAgB;CAChB,cAAc;CACd,cAAc;CACd,aAAa;CACb,YAAY;CACZ,eAAe;CACf,QAAQ;CACR,eAAe;CACf,SAAS;CACT,YAAY;CACZ,QAAQ;CACR,QAAQ;CACR,WAAW;CACX,SAAS;CACT,UAAU;CACV,eAAe;CACf,cAAc;CACd,eAAe;CACf,gBAAgB;CAChB,SAAS;CACT,cAAc;CACd,aAAa;CACb,UAAU;CACV,WAAW;CACX,YAAY;CACZ,UAAU;CACV,SAAS;CACT,QAAQ;CACR,YAAY;CACZ,WAAW;CACX,WAAW;CACX,QAAQ;CACR,cAAc;CACf;;AAKD,IAAM,iBAAyD,OAAO,OACpE,4BACD;;;;;;;;;;AAWD,SAAgB,0BACd,YAAoD,EAAE,EACpC;CAClB,MAAM,iBAAiB,IAAI,IACzB,UAAU,KAAI,cAAa,CAAC,UAAU,MAAM,UAAU,CAAC,CACxD;AAMD,QAAO,uBAAuB;EAC5B,IAAI;EACJ,iBAAiB;EACjB;EACA,YATgD,CAChD,GAAG,eAAe,KAAI,cAAa,eAAe,IAAI,UAAU,KAAK,IAAI,UAAU,EACnF,GAAG,UAAU,QAAO,cAAa,CAAC,eAAe,MAAK,SAAQ,KAAK,SAAS,UAAU,KAAK,CAAC,CAC7F;EAOC;EACD,CAAC"}
|
|
@@ -39,6 +39,20 @@ var GrAlert_default = /* @__PURE__ */ defineComponent({
|
|
|
39
39
|
const props = __props;
|
|
40
40
|
const getCustomColor = (value) => value?.trim() || void 0;
|
|
41
41
|
const SOFT_TONE_STYLES = {
|
|
42
|
+
primary: {
|
|
43
|
+
bg: "var(--accent)",
|
|
44
|
+
border: "color-mix(in srgb, var(--primary) 22%, var(--brd))",
|
|
45
|
+
icon: "var(--primary)",
|
|
46
|
+
...DEFAULT_TEXT_COLORS,
|
|
47
|
+
Icon: info_default
|
|
48
|
+
},
|
|
49
|
+
neutral: {
|
|
50
|
+
bg: "var(--muted)",
|
|
51
|
+
border: "var(--brd)",
|
|
52
|
+
icon: "var(--muted-fg)",
|
|
53
|
+
...DEFAULT_TEXT_COLORS,
|
|
54
|
+
Icon: info_default
|
|
55
|
+
},
|
|
42
56
|
info: {
|
|
43
57
|
bg: "var(--ds-info-light)",
|
|
44
58
|
border: "color-mix(in srgb, var(--ds-info) 22%, var(--brd))",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GrAlert-HyCjYJeL.js","names":[],"sources":["../../../../src/components/GrAlert/GrAlert.vue","../../../../src/components/GrAlert/GrAlert.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nimport IconWarning from '~icons/lucide/alert-triangle'\nimport IconCheck from '~icons/lucide/check-circle'\nimport IconInfo from '~icons/lucide/info'\nimport IconClose from '~icons/lucide/x'\nimport IconError from '~icons/lucide/x-circle'\n\nimport type { GrTone } from '../shared/tones'\n\nexport type GrAlertTone = GrTone\nexport type GrAlertVariant = 'soft' | 'light'\n\ntype GrAlertResolvedStyles = {\n bg: string\n border: string\n icon: string\n title: string\n text: string\n close: string\n closeHover: string\n Icon: unknown\n}\n\nconst DEFAULT_TEXT_COLORS = {\n title: 'var(--fg)',\n text: 'var(--muted-fg)',\n close: 'var(--muted-fg)',\n closeHover: 'var(--fg)',\n} as const\n\nconst WARNING_LIGHT_TEXT_COLOR = '#92400e'\n\nconst emit = defineEmits<{\n (event: 'close'): void\n}>()\n\nconst props = withDefaults(defineProps<{\n tone?: GrAlertTone\n variant?: GrAlertVariant\n title?: string\n closable?: boolean\n backgroundColor?: string\n textColor?: string\n borderColor?: string\n}>(), {\n tone: 'info',\n variant: 'soft',\n title: undefined,\n closable: false,\n backgroundColor: undefined,\n textColor: undefined,\n borderColor: undefined,\n})\n\nconst getCustomColor = (value?: string) => value?.trim() || undefined\n\nconst SOFT_TONE_STYLES: Record<GrAlertTone, GrAlertResolvedStyles> = {\n primary: {\n bg: 'var(--accent)',\n border: 'color-mix(in srgb, var(--primary) 22%, var(--brd))',\n icon: 'var(--primary)',\n ...DEFAULT_TEXT_COLORS,\n Icon: IconInfo,\n },\n neutral: {\n bg: 'var(--muted)',\n border: 'var(--brd)',\n icon: 'var(--muted-fg)',\n ...DEFAULT_TEXT_COLORS,\n Icon: IconInfo,\n },\n info: {\n bg: 'var(--ds-info-light)',\n border: 'color-mix(in srgb, var(--ds-info) 22%, var(--brd))',\n icon: 'var(--ds-info)',\n ...DEFAULT_TEXT_COLORS,\n Icon: IconInfo,\n },\n success: {\n bg: 'var(--ds-success-light)',\n border: 'color-mix(in srgb, var(--ds-success) 22%, var(--brd))',\n icon: 'var(--ds-success)',\n ...DEFAULT_TEXT_COLORS,\n Icon: IconCheck,\n },\n warning: {\n bg: 'var(--ds-warning-light)',\n border: 'color-mix(in srgb, var(--ds-warning) 22%, var(--brd))',\n icon: 'var(--ds-warning)',\n ...DEFAULT_TEXT_COLORS,\n Icon: IconWarning,\n },\n danger: {\n bg: 'var(--ds-danger-light)',\n border: 'color-mix(in srgb, var(--ds-danger) 22%, var(--brd))',\n icon: 'var(--ds-danger)',\n ...DEFAULT_TEXT_COLORS,\n Icon: IconError,\n },\n slate: {\n bg: 'var(--ds-slate-light)',\n border: 'color-mix(in srgb, var(--ds-slate) 22%, var(--brd))',\n icon: 'var(--ds-slate)',\n ...DEFAULT_TEXT_COLORS,\n Icon: IconInfo,\n },\n azure: {\n bg: 'var(--ds-azure-light)',\n border: 'color-mix(in srgb, var(--ds-azure) 22%, var(--brd))',\n icon: 'var(--ds-azure)',\n ...DEFAULT_TEXT_COLORS,\n Icon: IconInfo,\n },\n}\n\nconst LIGHT_TONE_STYLES: Partial<Record<GrAlertTone, GrAlertResolvedStyles>> = {\n warning: {\n bg: '#fffbeb',\n border: '#fcd34d',\n icon: WARNING_LIGHT_TEXT_COLOR,\n title: WARNING_LIGHT_TEXT_COLOR,\n text: WARNING_LIGHT_TEXT_COLOR,\n close: WARNING_LIGHT_TEXT_COLOR,\n closeHover: WARNING_LIGHT_TEXT_COLOR,\n Icon: IconWarning,\n },\n}\n\nconst styles = computed<GrAlertResolvedStyles>(() => {\n const base = (props.variant === 'light' ? LIGHT_TONE_STYLES[props.tone] : undefined) ?? SOFT_TONE_STYLES[props.tone]\n const customTextColor = getCustomColor(props.textColor)\n\n return {\n ...base,\n bg: getCustomColor(props.backgroundColor) ?? base.bg,\n border: getCustomColor(props.borderColor) ?? base.border,\n icon: customTextColor ?? base.icon,\n title: customTextColor ?? base.title,\n text: customTextColor ?? base.text,\n close: customTextColor ?? base.close,\n closeHover: customTextColor ?? base.closeHover,\n }\n})\n\nconst rootStyle = computed(() => ({\n '--ds-alert-bg': styles.value.bg,\n '--ds-alert-brd': styles.value.border,\n '--ds-alert-icon-color': styles.value.icon,\n '--ds-alert-title-color': styles.value.title,\n '--ds-alert-text-color': styles.value.text,\n '--ds-alert-close-color': styles.value.close,\n '--ds-alert-close-hover-color': styles.value.closeHover,\n background: 'var(--ds-alert-bg)',\n borderColor: 'var(--ds-alert-brd)',\n}))\n</script>\n\n<template>\n <div\n role=\"alert\"\n class=\"rounded-[var(--ds-radius-lg)] border px-4 py-3\"\n :style=\"rootStyle\"\n >\n <div class=\"flex items-start gap-3\">\n <component :is=\"styles.Icon\" class=\"mt-0.5 h-5 w-5 text-[var(--ds-alert-icon-color)]\" aria-hidden=\"true\" />\n <div class=\"min-w-0 flex-1\">\n <div v-if=\"props.title\" class=\"text-[14px] font-700 text-[var(--ds-alert-title-color)]\">\n {{ props.title }}\n </div>\n <div class=\"mt-0.5 text-[13px] text-[var(--ds-alert-text-color)]\">\n <slot />\n </div>\n </div>\n\n <button\n v-if=\"props.closable\"\n type=\"button\"\n class=\"-mr-1 -mt-1 rounded-[var(--ds-radius-md)] p-1 text-[var(--ds-alert-close-color)] transition-colors hover:text-[var(--ds-alert-close-hover-color)]\"\n aria-label=\"Close\"\n @click=\"emit('close')\"\n >\n <IconClose class=\"h-4 w-4\" aria-hidden=\"true\" />\n </button>\n </div>\n </div>\n</template>","<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nimport IconWarning from '~icons/lucide/alert-triangle'\nimport IconCheck from '~icons/lucide/check-circle'\nimport IconInfo from '~icons/lucide/info'\nimport IconClose from '~icons/lucide/x'\nimport IconError from '~icons/lucide/x-circle'\n\nimport type { GrTone } from '../shared/tones'\n\nexport type GrAlertTone = GrTone\nexport type GrAlertVariant = 'soft' | 'light'\n\ntype GrAlertResolvedStyles = {\n bg: string\n border: string\n icon: string\n title: string\n text: string\n close: string\n closeHover: string\n Icon: unknown\n}\n\nconst DEFAULT_TEXT_COLORS = {\n title: 'var(--fg)',\n text: 'var(--muted-fg)',\n close: 'var(--muted-fg)',\n closeHover: 'var(--fg)',\n} as const\n\nconst WARNING_LIGHT_TEXT_COLOR = '#92400e'\n\nconst emit = defineEmits<{\n (event: 'close'): void\n}>()\n\nconst props = withDefaults(defineProps<{\n tone?: GrAlertTone\n variant?: GrAlertVariant\n title?: string\n closable?: boolean\n backgroundColor?: string\n textColor?: string\n borderColor?: string\n}>(), {\n tone: 'info',\n variant: 'soft',\n title: undefined,\n closable: false,\n backgroundColor: undefined,\n textColor: undefined,\n borderColor: undefined,\n})\n\nconst getCustomColor = (value?: string) => value?.trim() || undefined\n\nconst SOFT_TONE_STYLES: Record<GrAlertTone, GrAlertResolvedStyles> = {\n primary: {\n bg: 'var(--accent)',\n border: 'color-mix(in srgb, var(--primary) 22%, var(--brd))',\n icon: 'var(--primary)',\n ...DEFAULT_TEXT_COLORS,\n Icon: IconInfo,\n },\n neutral: {\n bg: 'var(--muted)',\n border: 'var(--brd)',\n icon: 'var(--muted-fg)',\n ...DEFAULT_TEXT_COLORS,\n Icon: IconInfo,\n },\n info: {\n bg: 'var(--ds-info-light)',\n border: 'color-mix(in srgb, var(--ds-info) 22%, var(--brd))',\n icon: 'var(--ds-info)',\n ...DEFAULT_TEXT_COLORS,\n Icon: IconInfo,\n },\n success: {\n bg: 'var(--ds-success-light)',\n border: 'color-mix(in srgb, var(--ds-success) 22%, var(--brd))',\n icon: 'var(--ds-success)',\n ...DEFAULT_TEXT_COLORS,\n Icon: IconCheck,\n },\n warning: {\n bg: 'var(--ds-warning-light)',\n border: 'color-mix(in srgb, var(--ds-warning) 22%, var(--brd))',\n icon: 'var(--ds-warning)',\n ...DEFAULT_TEXT_COLORS,\n Icon: IconWarning,\n },\n danger: {\n bg: 'var(--ds-danger-light)',\n border: 'color-mix(in srgb, var(--ds-danger) 22%, var(--brd))',\n icon: 'var(--ds-danger)',\n ...DEFAULT_TEXT_COLORS,\n Icon: IconError,\n },\n slate: {\n bg: 'var(--ds-slate-light)',\n border: 'color-mix(in srgb, var(--ds-slate) 22%, var(--brd))',\n icon: 'var(--ds-slate)',\n ...DEFAULT_TEXT_COLORS,\n Icon: IconInfo,\n },\n azure: {\n bg: 'var(--ds-azure-light)',\n border: 'color-mix(in srgb, var(--ds-azure) 22%, var(--brd))',\n icon: 'var(--ds-azure)',\n ...DEFAULT_TEXT_COLORS,\n Icon: IconInfo,\n },\n}\n\nconst LIGHT_TONE_STYLES: Partial<Record<GrAlertTone, GrAlertResolvedStyles>> = {\n warning: {\n bg: '#fffbeb',\n border: '#fcd34d',\n icon: WARNING_LIGHT_TEXT_COLOR,\n title: WARNING_LIGHT_TEXT_COLOR,\n text: WARNING_LIGHT_TEXT_COLOR,\n close: WARNING_LIGHT_TEXT_COLOR,\n closeHover: WARNING_LIGHT_TEXT_COLOR,\n Icon: IconWarning,\n },\n}\n\nconst styles = computed<GrAlertResolvedStyles>(() => {\n const base = (props.variant === 'light' ? LIGHT_TONE_STYLES[props.tone] : undefined) ?? SOFT_TONE_STYLES[props.tone]\n const customTextColor = getCustomColor(props.textColor)\n\n return {\n ...base,\n bg: getCustomColor(props.backgroundColor) ?? base.bg,\n border: getCustomColor(props.borderColor) ?? base.border,\n icon: customTextColor ?? base.icon,\n title: customTextColor ?? base.title,\n text: customTextColor ?? base.text,\n close: customTextColor ?? base.close,\n closeHover: customTextColor ?? base.closeHover,\n }\n})\n\nconst rootStyle = computed(() => ({\n '--ds-alert-bg': styles.value.bg,\n '--ds-alert-brd': styles.value.border,\n '--ds-alert-icon-color': styles.value.icon,\n '--ds-alert-title-color': styles.value.title,\n '--ds-alert-text-color': styles.value.text,\n '--ds-alert-close-color': styles.value.close,\n '--ds-alert-close-hover-color': styles.value.closeHover,\n background: 'var(--ds-alert-bg)',\n borderColor: 'var(--ds-alert-brd)',\n}))\n</script>\n\n<template>\n <div\n role=\"alert\"\n class=\"rounded-[var(--ds-radius-lg)] border px-4 py-3\"\n :style=\"rootStyle\"\n >\n <div class=\"flex items-start gap-3\">\n <component :is=\"styles.Icon\" class=\"mt-0.5 h-5 w-5 text-[var(--ds-alert-icon-color)]\" aria-hidden=\"true\" />\n <div class=\"min-w-0 flex-1\">\n <div v-if=\"props.title\" class=\"text-[14px] font-700 text-[var(--ds-alert-title-color)]\">\n {{ props.title }}\n </div>\n <div class=\"mt-0.5 text-[13px] text-[var(--ds-alert-text-color)]\">\n <slot />\n </div>\n </div>\n\n <button\n v-if=\"props.closable\"\n type=\"button\"\n class=\"-mr-1 -mt-1 rounded-[var(--ds-radius-md)] p-1 text-[var(--ds-alert-close-color)] transition-colors hover:text-[var(--ds-alert-close-hover-color)]\"\n aria-label=\"Close\"\n @click=\"emit('close')\"\n >\n <IconClose class=\"h-4 w-4\" aria-hidden=\"true\" />\n </button>\n </div>\n </div>\n</template>"],"mappings":";;;;;;;;;;;;AAgCA,IAAM,2BAA2B;;;;;;;;;;;;;;;;;;;EAPjC,MAAM,sBAAsB;GAC1B,OAAO;GACP,MAAM;GACN,OAAO;GACP,YAAY;GACb;EAID,MAAM,OAAO;EAIb,MAAM,QAAQ;EAkBd,MAAM,kBAAkB,UAAmB,OAAO,MAAM,IAAI,KAAA;EAE5D,MAAM,mBAA+D;GACnE,SAAS;IACP,IAAI;IACJ,QAAQ;IACR,MAAM;IACN,GAAG;IACH,MAAM;IACP;GACD,SAAS;IACP,IAAI;IACJ,QAAQ;IACR,MAAM;IACN,GAAG;IACH,MAAM;IACP;GACD,MAAM;IACJ,IAAI;IACJ,QAAQ;IACR,MAAM;IACN,GAAG;IACH,MAAM;IACP;GACD,SAAS;IACP,IAAI;IACJ,QAAQ;IACR,MAAM;IACN,GAAG;IACH,MAAM;IACP;GACD,SAAS;IACP,IAAI;IACJ,QAAQ;IACR,MAAM;IACN,GAAG;IACH,MAAM;IACP;GACD,QAAQ;IACN,IAAI;IACJ,QAAQ;IACR,MAAM;IACN,GAAG;IACH,MAAM;IACP;GACD,OAAO;IACL,IAAI;IACJ,QAAQ;IACR,MAAM;IACN,GAAG;IACH,MAAM;IACP;GACD,OAAO;IACL,IAAI;IACJ,QAAQ;IACR,MAAM;IACN,GAAG;IACH,MAAM;IACP;GACH;EAEA,MAAM,oBAAyE,EAC7E,SAAS;GACP,IAAI;GACJ,QAAQ;GACR,MAAM;GACN,OAAO;GACP,MAAM;GACN,OAAO;GACP,YAAY;GACZ,MAAM;GACP,EACH;EAEA,MAAM,SAAS,eAAsC;GACnD,MAAM,QAAQ,MAAM,YAAY,UAAU,kBAAkB,MAAM,QAAQ,KAAA,MAAc,iBAAiB,MAAM;GAC/G,MAAM,kBAAkB,eAAe,MAAM,UAAS;AAEtD,UAAO;IACL,GAAG;IACH,IAAI,eAAe,MAAM,gBAAgB,IAAI,KAAK;IAClD,QAAQ,eAAe,MAAM,YAAY,IAAI,KAAK;IAClD,MAAM,mBAAmB,KAAK;IAC9B,OAAO,mBAAmB,KAAK;IAC/B,MAAM,mBAAmB,KAAK;IAC9B,OAAO,mBAAmB,KAAK;IAC/B,YAAY,mBAAmB,KAAK;IACtC;IACD;EAED,MAAM,YAAY,gBAAgB;GAChC,iBAAiB,OAAO,MAAM;GAC9B,kBAAkB,OAAO,MAAM;GAC/B,yBAAyB,OAAO,MAAM;GACtC,0BAA0B,OAAO,MAAM;GACvC,yBAAyB,OAAO,MAAM;GACtC,0BAA0B,OAAO,MAAM;GACvC,gCAAgC,OAAO,MAAM;GAC7C,YAAY;GACZ,aAAa;GACd,EAAC;;uBAIA,mBA0BM,OAAA;IAzBJ,MAAK;IACL,OAAM;IACL,OAAK,eAAE,UAAA,MAAS;OAEjB,mBAoBM,OApBN,YAoBM;kBAnBJ,YAA2G,wBAA3F,OAAA,MAAO,KAAI,EAAA;KAAE,OAAM;KAAmD,eAAY;;IAClG,mBAOM,OAPN,YAOM,CANO,MAAM,SAAA,WAAA,EAAjB,mBAEM,OAFN,YAEM,gBADD,MAAM,MAAK,EAAA,EAAA,IAAA,mBAAA,IAAA,KAAA,EAEhB,mBAEM,OAFN,YAEM,CADJ,WAAQ,KAAA,QAAA,UAAA,CAAA,CAAA,CAAA,CAAA;IAKJ,MAAM,YAAA,WAAA,EADd,mBAQS,UAAA;;KANP,MAAK;KACL,OAAM;KACN,cAAW;KACV,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,QAAA;QAEZ,YAAgD,MAAA,UAAA,EAAA;KAArC,OAAM;KAAU,eAAY"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { t as GrAlert_default } from "./chunks/GrAlert-
|
|
2
|
-
import { t as grAlertConfig } from "../../chunks/config-
|
|
1
|
+
import { t as GrAlert_default } from "./chunks/GrAlert-HyCjYJeL.js";
|
|
2
|
+
import { t as grAlertConfig } from "../../chunks/config-BV4vBzdm.js";
|
|
3
3
|
export { GrAlert_default as GrAlert, GrAlert_default as default, grAlertConfig };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { t as GrBadgeWrap_default } from "./chunks/GrBadgeWrap-CxtamOZ-.js";
|
|
2
|
-
import { t as grBadgeWrapConfig } from "../../chunks/config-
|
|
2
|
+
import { t as grBadgeWrapConfig } from "../../chunks/config-C9AOlKah.js";
|
|
3
3
|
export { GrBadgeWrap_default as GrBadgeWrap, GrBadgeWrap_default as default, grBadgeWrapConfig };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { t as GrBottomNav_default } from "./chunks/GrBottomNav-CsmQ7mTJ.js";
|
|
2
|
-
import { t as grBottomNavConfig } from "../../chunks/config-
|
|
2
|
+
import { t as grBottomNavConfig } from "../../chunks/config-C_-02Pu-.js";
|
|
3
3
|
export { GrBottomNav_default as GrBottomNav, GrBottomNav_default as default, grBottomNavConfig };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { t as GrButtonGroup_default } from "./chunks/GrButtonGroup-CBj4tpms.js";
|
|
2
|
-
import { t as grButtonGroupConfig } from "../../chunks/config-
|
|
2
|
+
import { t as grButtonGroupConfig } from "../../chunks/config-Cn8TG49a.js";
|
|
3
3
|
export { GrButtonGroup_default as GrButtonGroup, GrButtonGroup_default as default, grButtonGroupConfig };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { t as GrCard_default } from "./chunks/GrCard-xtDcXBr7.js";
|
|
2
|
-
import { t as grCardConfig } from "../../chunks/config-
|
|
2
|
+
import { t as grCardConfig } from "../../chunks/config-ChQxl75m.js";
|
|
3
3
|
export { GrCard_default as GrCard, GrCard_default as default, grCardConfig };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { t as GrCheckbox_default } from "./chunks/GrCheckbox-Bt3d7ckE.js";
|
|
2
|
-
import { t as grCheckboxConfig } from "../../chunks/config-
|
|
2
|
+
import { t as grCheckboxConfig } from "../../chunks/config-C9MblwGq.js";
|
|
3
3
|
export { GrCheckbox_default as GrCheckbox, GrCheckbox_default as default, grCheckboxConfig };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { n as GrCollapse_default, r as GR_COLLAPSE_CONTEXT, t as GrCollapseItem_default } from "./chunks/GrCollapse-HU20VTVn.js";
|
|
2
|
-
import { t as grCollapseConfig } from "../../chunks/config-
|
|
2
|
+
import { t as grCollapseConfig } from "../../chunks/config-D5ek7VSi.js";
|
|
3
3
|
export { GR_COLLAPSE_CONTEXT, GrCollapse_default as GrCollapse, GrCollapse_default as default, GrCollapseItem_default as GrCollapseItem, grCollapseConfig };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { t as GrConfirmDialog_default } from "./chunks/GrConfirmDialog-DjGOX9Hd.js";
|
|
2
|
-
import { t as grConfirmDialogConfig } from "../../chunks/config-
|
|
2
|
+
import { t as grConfirmDialogConfig } from "../../chunks/config-C_AOYGBr.js";
|
|
3
3
|
export { GrConfirmDialog_default as GrConfirmDialog, GrConfirmDialog_default as default, grConfirmDialogConfig };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { t as GrDataTable_default } from "./chunks/GrDataTable-QDOJWmdY.js";
|
|
2
|
-
import { t as grDataTableConfig } from "../../chunks/config-
|
|
2
|
+
import { t as grDataTableConfig } from "../../chunks/config-DJWf0kWe.js";
|
|
3
3
|
export { GrDataTable_default as GrDataTable, GrDataTable_default as default, grDataTableConfig };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { a as GrDropdownMenuColumns_default, c as GrDropdownMenuList_default, i as GrDropdownMenuDivider_default, n as GrDropdownMenuGroup_default, o as GrDropdownMenuColumn_default, r as GrDropdownMenuHeader_default, s as GrDropdownMenu_default, t as GrDropdownMenuItem_default } from "./chunks/GrDropdownMenu-BEenXrJw.js";
|
|
2
|
-
import { t as grDropdownMenuConfig } from "../../chunks/config-
|
|
2
|
+
import { t as grDropdownMenuConfig } from "../../chunks/config-DDEWvph-2.js";
|
|
3
3
|
export { GrDropdownMenu_default as GrDropdownMenu, GrDropdownMenu_default as default, GrDropdownMenuColumn_default as GrDropdownMenuColumn, GrDropdownMenuColumns_default as GrDropdownMenuColumns, GrDropdownMenuDivider_default as GrDropdownMenuDivider, GrDropdownMenuGroup_default as GrDropdownMenuGroup, GrDropdownMenuHeader_default as GrDropdownMenuHeader, GrDropdownMenuItem_default as GrDropdownMenuItem, GrDropdownMenuList_default as GrDropdownMenuList, grDropdownMenuConfig };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { t as GrEmptyState_default } from "./chunks/GrEmptyState-BLbMJFW-.js";
|
|
2
|
-
import { t as grEmptyStateConfig } from "../../chunks/config-
|
|
2
|
+
import { t as grEmptyStateConfig } from "../../chunks/config-Db4BEG8Y.js";
|
|
3
3
|
export { GrEmptyState_default as GrEmptyState, GrEmptyState_default as default, grEmptyStateConfig };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { a as allowedExtensionsValidator, c as normalizeFiles, i as allowedMimeTypesValidator, l as runFileValidators, n as maxSizeMbValidator, o as acceptValidator, r as maxFileSizeBytesValidator, s as matchAccept, t as maxTotalSizeBytesValidator, u as FileValidationError } from "../../chunks/fileValidation-CwJA8Vmn.js";
|
|
2
2
|
import { t as GrFileUpload_default } from "./chunks/GrFileUpload-u01j9S0t.js";
|
|
3
|
-
import { t as grFileUploadConfig } from "../../chunks/config-
|
|
3
|
+
import { t as grFileUploadConfig } from "../../chunks/config-BGmiXpR82.js";
|
|
4
4
|
export { FileValidationError, GrFileUpload_default as GrFileUpload, GrFileUpload_default as default, acceptValidator, allowedExtensionsValidator, allowedMimeTypesValidator, grFileUploadConfig, matchAccept, maxFileSizeBytesValidator, maxSizeMbValidator, maxTotalSizeBytesValidator, normalizeFiles, runFileValidators };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { t as GrFormField_default } from "./chunks/GrFormField-C6PfAs4u.js";
|
|
2
|
-
import { t as grFormFieldConfig } from "../../chunks/config-
|
|
2
|
+
import { t as grFormFieldConfig } from "../../chunks/config-Cgk5ti-b.js";
|
|
3
3
|
export { GrFormField_default as GrFormField, GrFormField_default as default, grFormFieldConfig };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { t as GrFormFile_default } from "./chunks/GrFormFile-DdM8Bc2B.js";
|
|
2
|
-
import { t as grFormFileConfig } from "../../chunks/config-
|
|
2
|
+
import { t as grFormFileConfig } from "../../chunks/config-ndXqsz5A.js";
|
|
3
3
|
export { GrFormFile_default as GrFormFile, GrFormFile_default as default, grFormFileConfig };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { t as GrFormSection_default } from "./chunks/GrFormSection-5djEaQZQ.js";
|
|
2
|
-
import { t as grFormSectionConfig } from "../../chunks/config-
|
|
2
|
+
import { t as grFormSectionConfig } from "../../chunks/config-YSOeh6cy.js";
|
|
3
3
|
export { GrFormSection_default as GrFormSection, GrFormSection_default as default, grFormSectionConfig };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { t as GrIcon_default } from "./chunks/GrIcon-BV7RBU_0.js";
|
|
2
|
-
import { t as grIconConfig } from "../../chunks/config-
|
|
2
|
+
import { t as grIconConfig } from "../../chunks/config-DbghHyY_.js";
|
|
3
3
|
export { GrIcon_default as GrIcon, GrIcon_default as default, grIconConfig };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { t as GrImageViewer_default } from "./chunks/GrImageViewer-CjSnohW7.js";
|
|
2
|
-
import { t as grImageViewerConfig } from "../../chunks/config-
|
|
2
|
+
import { t as grImageViewerConfig } from "../../chunks/config-BulF0Bf-.js";
|
|
3
3
|
export { GrImageViewer_default as GrImageViewer, GrImageViewer_default as default, grImageViewerConfig };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { t as GrNavbar_default } from "./chunks/GrNavbar-nIyuiVj1.js";
|
|
2
|
-
import { t as grNavbarConfig } from "../../chunks/config-
|
|
2
|
+
import { t as grNavbarConfig } from "../../chunks/config-BDiLiqSk.js";
|
|
3
3
|
export { GrNavbar_default as GrNavbar, GrNavbar_default as default, grNavbarConfig };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { t as GrPagination_default } from "./chunks/GrPagination-C_rxGwfY.js";
|
|
2
|
-
import { t as grPaginationConfig } from "../../chunks/config-
|
|
2
|
+
import { t as grPaginationConfig } from "../../chunks/config-BFZN9-vt.js";
|
|
3
3
|
export { GrPagination_default as GrPagination, GrPagination_default as default, grPaginationConfig };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { t as GrPromptDialog_default } from "./chunks/GrPromptDialog-DKhbN6ji.js";
|
|
2
|
-
import { t as grPromptDialogConfig } from "../../chunks/config-
|
|
2
|
+
import { t as grPromptDialogConfig } from "../../chunks/config-C-GVBa19.js";
|
|
3
3
|
export { GrPromptDialog_default as GrPromptDialog, GrPromptDialog_default as default, grPromptDialogConfig };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { t as GrRadioGroup_default } from "./chunks/GrRadioGroup-CEAfJQ6A.js";
|
|
2
|
-
import { t as grRadioGroupConfig } from "../../chunks/config-
|
|
2
|
+
import { t as grRadioGroupConfig } from "../../chunks/config-CgjOJ3aF.js";
|
|
3
3
|
export { GrRadioGroup_default as GrRadioGroup, GrRadioGroup_default as default, grRadioGroupConfig };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { t as GrSidebar_default } from "./chunks/GrSidebar-CSZ3RpFB.js";
|
|
2
|
-
import { t as grSidebarConfig } from "../../chunks/config-
|
|
2
|
+
import { t as grSidebarConfig } from "../../chunks/config-CdHY0Z7L.js";
|
|
3
3
|
export { GrSidebar_default as GrSidebar, GrSidebar_default as default, grSidebarConfig };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { t as GrSkeleton_default } from "./chunks/GrSkeleton-DKXkqWDa.js";
|
|
2
|
-
import { t as grSkeletonConfig } from "../../chunks/config-
|
|
2
|
+
import { t as grSkeletonConfig } from "../../chunks/config-CsMIhZfM.js";
|
|
3
3
|
export { GrSkeleton_default as GrSkeleton, GrSkeleton_default as default, grSkeletonConfig };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { t as GrTable_default } from "./chunks/GrTable-CyQ9uw8A.js";
|
|
2
|
-
import { t as grTableConfig } from "../../chunks/config-
|
|
2
|
+
import { t as grTableConfig } from "../../chunks/config-CFcv0hjb.js";
|
|
3
3
|
export { GrTable_default as GrTable, GrTable_default as default, grTableConfig };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { t as GrTabs_default } from "./chunks/GrTabs-BpF8AAUz.js";
|
|
2
|
-
import { t as grTabsConfig } from "../../chunks/config-
|
|
2
|
+
import { t as grTabsConfig } from "../../chunks/config-CwLoozAz2.js";
|
|
3
3
|
export { GrTabs_default as GrTabs, GrTabs_default as default, grTabsConfig };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { t as GrTooltip_default } from "./chunks/GrTooltip-BvmsukLW.js";
|
|
2
|
-
import { t as grTooltipConfig } from "../../chunks/config-
|
|
2
|
+
import { t as grTooltipConfig } from "../../chunks/config-CA9XwYnZ2.js";
|
|
3
3
|
export { GrTooltip_default as GrTooltip, GrTooltip_default as default, grTooltipConfig };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useToast.js","names":[],"sources":["../../src/composables/useToast.ts"],"sourcesContent":["import { computed, reactive } from 'vue'\n\
|
|
1
|
+
{"version":3,"file":"useToast.js","names":[],"sources":["../../src/composables/useToast.ts"],"sourcesContent":["import { computed, reactive } from 'vue'\n\nimport type { GrTone } from '../components/shared/tones'\n\nexport type GrToastTone = GrTone\n\nexport type ToastInput = {\n title: string\n message?: string\n tone?: GrToastTone\n /**\n * Автозакрытие через N мс. `0` или отрицательное значение — «навсегда»\n * (до явного вызова `dismiss(id)` / `clear()`). По умолчанию: `3500`.\n */\n timeoutMs?: number\n}\n\nexport type Toast = {\n id: string\n title: string\n message?: string\n tone: GrToastTone\n}\n\n// Модульный синглтон состояния: один источник истины для всех `GrToaster`\n// в приложении. Подразумевается один активный `GrToaster` на корень.\nconst toasts = reactive<Toast[]>([])\n\n// Таймеры авто-дисмисса по id — чтобы при раннем `dismiss()` / `clear()`\n// не оставлять «висящие» setTimeout'ы и не будить мёртвый tab.\nconst timers = new Map<string, number>()\n\nconst DEFAULT_TIMEOUT_MS = 3500\n\nfunction makeId(): string {\n return `${Date.now()}-${Math.random().toString(16).slice(2)}`\n}\n\nfunction clearTimer(id: string): void {\n const handle = timers.get(id)\n if (handle !== undefined) {\n clearTimeout(handle)\n timers.delete(id)\n }\n}\n\nexport function useToast() {\n const list = computed(() => toasts)\n\n function push(input: ToastInput): string {\n const id = makeId()\n const toast: Toast = {\n id,\n title: input.title,\n message: input.message,\n tone: input.tone ?? 'info',\n }\n\n toasts.unshift(toast)\n\n const timeout = input.timeoutMs ?? DEFAULT_TIMEOUT_MS\n if (timeout > 0 && typeof window !== 'undefined') {\n const handle = window.setTimeout(() => {\n timers.delete(id)\n dismiss(id)\n }, timeout)\n timers.set(id, handle)\n }\n\n return id\n }\n\n function dismiss(id: string): void {\n clearTimer(id)\n const index = toasts.findIndex(toast => toast.id === id)\n if (index >= 0)\n toasts.splice(index, 1)\n }\n\n function clear(): void {\n for (const id of timers.keys()) clearTimer(id)\n toasts.splice(0, toasts.length)\n }\n\n return {\n list,\n push,\n dismiss,\n clear,\n }\n}\n"],"mappings":";;AA0BA,IAAM,SAAS,SAAkB,EAAE,CAAC;AAIpC,IAAM,yBAAS,IAAI,KAAqB;AAExC,IAAM,qBAAqB;AAE3B,SAAS,SAAiB;AACxB,QAAO,GAAG,KAAK,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,SAAS,GAAG,CAAC,MAAM,EAAE;;AAG7D,SAAS,WAAW,IAAkB;CACpC,MAAM,SAAS,OAAO,IAAI,GAAG;AAC7B,KAAI,WAAW,KAAA,GAAW;AACxB,eAAa,OAAO;AACpB,SAAO,OAAO,GAAG;;;AAIrB,SAAgB,WAAW;CACzB,MAAM,OAAO,eAAe,OAAO;CAEnC,SAAS,KAAK,OAA2B;EACvC,MAAM,KAAK,QAAQ;EACnB,MAAM,QAAe;GACnB;GACA,OAAO,MAAM;GACb,SAAS,MAAM;GACf,MAAM,MAAM,QAAQ;GACrB;AAED,SAAO,QAAQ,MAAM;EAErB,MAAM,UAAU,MAAM,aAAa;AACnC,MAAI,UAAU,KAAK,OAAO,WAAW,aAAa;GAChD,MAAM,SAAS,OAAO,iBAAiB;AACrC,WAAO,OAAO,GAAG;AACjB,YAAQ,GAAG;MACV,QAAQ;AACX,UAAO,IAAI,IAAI,OAAO;;AAGxB,SAAO;;CAGT,SAAS,QAAQ,IAAkB;AACjC,aAAW,GAAG;EACd,MAAM,QAAQ,OAAO,WAAU,UAAS,MAAM,OAAO,GAAG;AACxD,MAAI,SAAS,EACX,QAAO,OAAO,OAAO,EAAE;;CAG3B,SAAS,QAAc;AACrB,OAAK,MAAM,MAAM,OAAO,MAAM,CAAE,YAAW,GAAG;AAC9C,SAAO,OAAO,GAAG,OAAO,OAAO;;AAGjC,QAAO;EACL;EACA;EACA;EACA;EACD"}
|
|
@@ -36,17 +36,26 @@ function normalize(value) {
|
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
38
|
var states = /* @__PURE__ */ new WeakMap();
|
|
39
|
+
/**
|
|
40
|
+
* `classList.add/remove` не принимают строки с пробелами/пустые токены —
|
|
41
|
+
* иначе DOM кидает `InvalidCharacterError`. Поэтому всегда токенизируем
|
|
42
|
+
* `overClass` (поддерживая Tailwind-подобные multi-class значения).
|
|
43
|
+
*/
|
|
44
|
+
function tokenizeClass(value) {
|
|
45
|
+
return value.split(/\s+/).filter((token) => token.length > 0);
|
|
46
|
+
}
|
|
39
47
|
function setOver(el, next) {
|
|
40
48
|
const state = states.get(el);
|
|
41
49
|
if (!state) return;
|
|
42
50
|
const wasDomOver = el.dataset.grDropzoneOver === "true";
|
|
43
51
|
const prev = state.isOver;
|
|
44
52
|
state.isOver = next;
|
|
53
|
+
const tokens = tokenizeClass(state.options.overClass);
|
|
45
54
|
if (next) {
|
|
46
|
-
el.classList.add(
|
|
55
|
+
if (tokens.length) el.classList.add(...tokens);
|
|
47
56
|
el.dataset.grDropzoneOver = "true";
|
|
48
57
|
} else {
|
|
49
|
-
el.classList.remove(
|
|
58
|
+
if (tokens.length) el.classList.remove(...tokens);
|
|
50
59
|
delete el.dataset.grDropzoneOver;
|
|
51
60
|
}
|
|
52
61
|
if (prev !== next || wasDomOver !== next) state.options.onStateChange?.({ isOver: next });
|
|
@@ -136,8 +145,12 @@ function update(el, value) {
|
|
|
136
145
|
const nextOptions = normalize(value);
|
|
137
146
|
state.options = nextOptions;
|
|
138
147
|
if (prevOverClass !== nextOptions.overClass) {
|
|
139
|
-
|
|
140
|
-
if (
|
|
148
|
+
const prevTokens = tokenizeClass(prevOverClass);
|
|
149
|
+
if (prevTokens.length) el.classList.remove(...prevTokens);
|
|
150
|
+
if (state.isOver) {
|
|
151
|
+
const nextTokens = tokenizeClass(nextOptions.overClass);
|
|
152
|
+
if (nextTokens.length) el.classList.add(...nextTokens);
|
|
153
|
+
}
|
|
141
154
|
}
|
|
142
155
|
if (!nextOptions.enabled) {
|
|
143
156
|
state.overCounter = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropzone.js","names":[],"sources":["../../src/directives/dropzone.ts"],"sourcesContent":["import type { Directive } from 'vue'\n\nimport type { FileValidator } from '../fileValidation'\n\nimport { FileValidationError, runFileValidators } from '../fileValidation'\n\nexport type DropzoneOnFiles = (files: File[], event: DragEvent) => void | Promise<void>\n\nexport type DropzoneBindingValue =\n | DropzoneOnFiles\n | {\n onFiles: DropzoneOnFiles\n /** По умолчанию `true`. */\n enabled?: boolean\n /** По умолчанию `true`. */\n multiple?: boolean\n\n /** Валидаторы, которые будут запущены перед `onFiles`. */\n validators?: FileValidator[]\n /** По умолчанию `true` (предотвращаем дефолтное поведение браузера при drop). */\n preventDefault?: boolean\n /** По умолчанию `false`. */\n stopPropagation?: boolean\n /** Вызывается, если валидация файлов не прошла. */\n onError?: (error: unknown) => void\n /** Вызывается при изменении состояния drag-over. */\n onStateChange?: (state: { isOver: boolean }) => void\n /** CSS-класс, который навешивается на элемент, пока курсор с файлами над зоной. */\n overClass?: string\n }\n\ntype NormalizedOptions = {\n enabled: boolean\n multiple: boolean\n validators: FileValidator[] | undefined\n preventDefault: boolean\n stopPropagation: boolean\n onFiles: DropzoneOnFiles | undefined\n onError: ((error: unknown) => void) | undefined\n onStateChange: ((state: { isOver: boolean }) => void) | undefined\n overClass: string\n}\n\nfunction normalize(value: DropzoneBindingValue | undefined): NormalizedOptions {\n if (typeof value === 'function') {\n return {\n enabled: true,\n multiple: true,\n validators: undefined,\n preventDefault: true,\n stopPropagation: false,\n onFiles: value,\n onError: undefined,\n onStateChange: undefined,\n overClass: 'ds-dropzone--over',\n }\n }\n\n if (value && typeof value === 'object') {\n return {\n enabled: value.enabled ?? true,\n multiple: value.multiple ?? true,\n validators: value.validators,\n preventDefault: value.preventDefault ?? true,\n stopPropagation: value.stopPropagation ?? false,\n onFiles: value.onFiles,\n onError: value.onError,\n onStateChange: value.onStateChange,\n overClass: value.overClass ?? 'ds-dropzone--over',\n }\n }\n\n return {\n enabled: false,\n multiple: true,\n validators: undefined,\n preventDefault: true,\n stopPropagation: false,\n onFiles: undefined,\n onError: undefined,\n onStateChange: undefined,\n overClass: 'ds-dropzone--over',\n }\n}\n\ntype InternalState = {\n options: NormalizedOptions\n overCounter: number\n isOver: boolean\n onDragEnter: (event: DragEvent) => void\n onDragOver: (event: DragEvent) => void\n onDragLeave: (event: DragEvent) => void\n onDrop: (event: DragEvent) => void\n}\n\nconst states = new WeakMap<HTMLElement, InternalState>()\n\nfunction setOver(el: HTMLElement, next: boolean) {\n const state = states.get(el)\n if (!state) return\n\n // `state.isOver` может рассинхронизироваться с DOM (например, при обновлениях\n // компонента/директивы во время drag-over). Поэтому DOM-состояние всегда\n // приводим к `next`, а коллбек вызываем только при фактическом изменении.\n const wasDomOver = el.dataset.grDropzoneOver === 'true'\n const prev = state.isOver\n\n state.isOver = next\n\n if (next) {\n el.classList.add(state.options.overClass)\n el.dataset.grDropzoneOver = 'true'\n } else {\n el.classList.remove(state.options.overClass)\n delete el.dataset.grDropzoneOver\n }\n\n if (prev !== next || wasDomOver !== next) {\n state.options.onStateChange?.({ isOver: next })\n }\n}\n\nfunction unbind(el: HTMLElement) {\n const state = states.get(el)\n if (!state) return\n\n // Гарантированно очищаем визуальное состояние и счётчики.\n // Это важно, если директива обновлялась/перебиндилась во время DnD.\n state.overCounter = 0\n setOver(el, false)\n\n delete el.dataset.grDropzone\n\n el.removeEventListener('dragenter', state.onDragEnter)\n el.removeEventListener('dragover', state.onDragOver)\n el.removeEventListener('dragleave', state.onDragLeave)\n el.removeEventListener('drop', state.onDrop)\n\n states.delete(el)\n}\n\nfunction bind(el: HTMLElement, value: DropzoneBindingValue | undefined) {\n const options = normalize(value)\n\n const state: InternalState = {\n options,\n overCounter: 0,\n isOver: false,\n onDragEnter(event) {\n const current = states.get(el)\n if (!current?.options.enabled) return\n\n if (current.options.preventDefault) event.preventDefault()\n if (current.options.stopPropagation) event.stopPropagation()\n\n current.overCounter += 1\n setOver(el, true)\n },\n onDragOver(event) {\n const current = states.get(el)\n if (!current?.options.enabled) return\n\n if (current.options.preventDefault) event.preventDefault()\n if (current.options.stopPropagation) event.stopPropagation()\n\n if (event.dataTransfer) event.dataTransfer.dropEffect = 'copy'\n },\n onDragLeave(event) {\n const current = states.get(el)\n if (!current?.options.enabled) return\n\n if (current.options.preventDefault) event.preventDefault()\n if (current.options.stopPropagation) event.stopPropagation()\n\n current.overCounter = Math.max(0, current.overCounter - 1)\n if (current.overCounter === 0) setOver(el, false)\n },\n onDrop(event) {\n const current = states.get(el)\n if (!current?.options.enabled) return\n\n if (current.options.preventDefault) event.preventDefault()\n if (current.options.stopPropagation) event.stopPropagation()\n\n current.overCounter = 0\n setOver(el, false)\n\n const dt = event.dataTransfer\n const files = dt?.files ? Array.prototype.slice.call(dt.files) as File[] : []\n if (!files.length) return\n\n void (async () => {\n try {\n const validators = current.options.validators ?? []\n\n const { files: picked, issues } = await runFileValidators(files, validators, {\n source: 'drop',\n multiple: current.options.multiple,\n })\n\n if (issues.length > 0) {\n current.options.onError?.(new FileValidationError(issues, picked))\n return\n }\n\n if (!picked.length) return\n await current.options.onFiles?.(picked, event)\n } catch (error) {\n current.options.onError?.(error)\n }\n })()\n },\n }\n\n states.set(el, state)\n\n // Base marker.\n el.dataset.grDropzone = 'true'\n\n el.addEventListener('dragenter', state.onDragEnter)\n el.addEventListener('dragover', state.onDragOver)\n el.addEventListener('dragleave', state.onDragLeave)\n el.addEventListener('drop', state.onDrop)\n}\n\nfunction update(el: HTMLElement, value: DropzoneBindingValue | undefined) {\n const state = states.get(el)\n if (!state) {\n bind(el, value)\n return\n }\n\n const prevOverClass = state.options.overClass\n const nextOptions = normalize(value)\n\n state.options = nextOptions\n\n // Если поменялся `overClass`, синхронизируем DOM.\n if (prevOverClass !== nextOptions.overClass) {\n el.classList.remove(prevOverClass)\n if (state.isOver) el.classList.add(nextOptions.overClass)\n }\n\n // Если директива выключена — сбрасываем состояние.\n if (!nextOptions.enabled) {\n state.overCounter = 0\n setOver(el, false)\n }\n}\n\n/**\n * `v-dropzone` — декларативная DnD-зона для файлов (перетаскивание + drop).\n *\n * Директива не делает загрузку сама — только нормализует события и отдаёт `File[]`.\n */\nexport const vDropzone: Directive<HTMLElement, DropzoneBindingValue> = {\n mounted(el, binding) {\n bind(el, binding.value)\n },\n updated(el, binding) {\n update(el, binding.value)\n },\n unmounted(el) {\n unbind(el)\n },\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dropzone.js","names":[],"sources":["../../src/directives/dropzone.ts"],"sourcesContent":["import type { Directive } from 'vue'\n\nimport type { FileValidator } from '../fileValidation'\n\nimport { FileValidationError, runFileValidators } from '../fileValidation'\n\nexport type DropzoneOnFiles = (files: File[], event: DragEvent) => void | Promise<void>\n\nexport type DropzoneBindingValue =\n | DropzoneOnFiles\n | {\n onFiles: DropzoneOnFiles\n /** По умолчанию `true`. */\n enabled?: boolean\n /** По умолчанию `true`. */\n multiple?: boolean\n\n /** Валидаторы, которые будут запущены перед `onFiles`. */\n validators?: FileValidator[]\n /** По умолчанию `true` (предотвращаем дефолтное поведение браузера при drop). */\n preventDefault?: boolean\n /** По умолчанию `false`. */\n stopPropagation?: boolean\n /** Вызывается, если валидация файлов не прошла. */\n onError?: (error: unknown) => void\n /** Вызывается при изменении состояния drag-over. */\n onStateChange?: (state: { isOver: boolean }) => void\n /** CSS-класс, который навешивается на элемент, пока курсор с файлами над зоной. */\n overClass?: string\n }\n\ntype NormalizedOptions = {\n enabled: boolean\n multiple: boolean\n validators: FileValidator[] | undefined\n preventDefault: boolean\n stopPropagation: boolean\n onFiles: DropzoneOnFiles | undefined\n onError: ((error: unknown) => void) | undefined\n onStateChange: ((state: { isOver: boolean }) => void) | undefined\n overClass: string\n}\n\nfunction normalize(value: DropzoneBindingValue | undefined): NormalizedOptions {\n if (typeof value === 'function') {\n return {\n enabled: true,\n multiple: true,\n validators: undefined,\n preventDefault: true,\n stopPropagation: false,\n onFiles: value,\n onError: undefined,\n onStateChange: undefined,\n overClass: 'ds-dropzone--over',\n }\n }\n\n if (value && typeof value === 'object') {\n return {\n enabled: value.enabled ?? true,\n multiple: value.multiple ?? true,\n validators: value.validators,\n preventDefault: value.preventDefault ?? true,\n stopPropagation: value.stopPropagation ?? false,\n onFiles: value.onFiles,\n onError: value.onError,\n onStateChange: value.onStateChange,\n overClass: value.overClass ?? 'ds-dropzone--over',\n }\n }\n\n return {\n enabled: false,\n multiple: true,\n validators: undefined,\n preventDefault: true,\n stopPropagation: false,\n onFiles: undefined,\n onError: undefined,\n onStateChange: undefined,\n overClass: 'ds-dropzone--over',\n }\n}\n\ntype InternalState = {\n options: NormalizedOptions\n overCounter: number\n isOver: boolean\n onDragEnter: (event: DragEvent) => void\n onDragOver: (event: DragEvent) => void\n onDragLeave: (event: DragEvent) => void\n onDrop: (event: DragEvent) => void\n}\n\nconst states = new WeakMap<HTMLElement, InternalState>()\n\n/**\n * `classList.add/remove` не принимают строки с пробелами/пустые токены —\n * иначе DOM кидает `InvalidCharacterError`. Поэтому всегда токенизируем\n * `overClass` (поддерживая Tailwind-подобные multi-class значения).\n */\nfunction tokenizeClass(value: string): string[] {\n return value.split(/\\s+/).filter(token => token.length > 0)\n}\n\nfunction setOver(el: HTMLElement, next: boolean) {\n const state = states.get(el)\n if (!state) return\n\n // `state.isOver` может рассинхронизироваться с DOM (например, при обновлениях\n // компонента/директивы во время drag-over). Поэтому DOM-состояние всегда\n // приводим к `next`, а коллбек вызываем только при фактическом изменении.\n const wasDomOver = el.dataset.grDropzoneOver === 'true'\n const prev = state.isOver\n\n state.isOver = next\n\n const tokens = tokenizeClass(state.options.overClass)\n if (next) {\n if (tokens.length) el.classList.add(...tokens)\n el.dataset.grDropzoneOver = 'true'\n } else {\n if (tokens.length) el.classList.remove(...tokens)\n delete el.dataset.grDropzoneOver\n }\n\n if (prev !== next || wasDomOver !== next) {\n state.options.onStateChange?.({ isOver: next })\n }\n}\n\nfunction unbind(el: HTMLElement) {\n const state = states.get(el)\n if (!state) return\n\n // Гарантированно очищаем визуальное состояние и счётчики.\n // Это важно, если директива обновлялась/перебиндилась во время DnD.\n state.overCounter = 0\n setOver(el, false)\n\n delete el.dataset.grDropzone\n\n el.removeEventListener('dragenter', state.onDragEnter)\n el.removeEventListener('dragover', state.onDragOver)\n el.removeEventListener('dragleave', state.onDragLeave)\n el.removeEventListener('drop', state.onDrop)\n\n states.delete(el)\n}\n\nfunction bind(el: HTMLElement, value: DropzoneBindingValue | undefined) {\n const options = normalize(value)\n\n const state: InternalState = {\n options,\n overCounter: 0,\n isOver: false,\n onDragEnter(event) {\n const current = states.get(el)\n if (!current?.options.enabled) return\n\n if (current.options.preventDefault) event.preventDefault()\n if (current.options.stopPropagation) event.stopPropagation()\n\n current.overCounter += 1\n setOver(el, true)\n },\n onDragOver(event) {\n const current = states.get(el)\n if (!current?.options.enabled) return\n\n if (current.options.preventDefault) event.preventDefault()\n if (current.options.stopPropagation) event.stopPropagation()\n\n if (event.dataTransfer) event.dataTransfer.dropEffect = 'copy'\n },\n onDragLeave(event) {\n const current = states.get(el)\n if (!current?.options.enabled) return\n\n if (current.options.preventDefault) event.preventDefault()\n if (current.options.stopPropagation) event.stopPropagation()\n\n current.overCounter = Math.max(0, current.overCounter - 1)\n if (current.overCounter === 0) setOver(el, false)\n },\n onDrop(event) {\n const current = states.get(el)\n if (!current?.options.enabled) return\n\n if (current.options.preventDefault) event.preventDefault()\n if (current.options.stopPropagation) event.stopPropagation()\n\n current.overCounter = 0\n setOver(el, false)\n\n const dt = event.dataTransfer\n const files = dt?.files ? Array.prototype.slice.call(dt.files) as File[] : []\n if (!files.length) return\n\n void (async () => {\n try {\n const validators = current.options.validators ?? []\n\n const { files: picked, issues } = await runFileValidators(files, validators, {\n source: 'drop',\n multiple: current.options.multiple,\n })\n\n if (issues.length > 0) {\n current.options.onError?.(new FileValidationError(issues, picked))\n return\n }\n\n if (!picked.length) return\n await current.options.onFiles?.(picked, event)\n } catch (error) {\n current.options.onError?.(error)\n }\n })()\n },\n }\n\n states.set(el, state)\n\n // Base marker.\n el.dataset.grDropzone = 'true'\n\n el.addEventListener('dragenter', state.onDragEnter)\n el.addEventListener('dragover', state.onDragOver)\n el.addEventListener('dragleave', state.onDragLeave)\n el.addEventListener('drop', state.onDrop)\n}\n\nfunction update(el: HTMLElement, value: DropzoneBindingValue | undefined) {\n const state = states.get(el)\n if (!state) {\n bind(el, value)\n return\n }\n\n const prevOverClass = state.options.overClass\n const nextOptions = normalize(value)\n\n state.options = nextOptions\n\n // Если поменялся `overClass`, синхронизируем DOM (учитывая multi-token значения).\n if (prevOverClass !== nextOptions.overClass) {\n const prevTokens = tokenizeClass(prevOverClass)\n if (prevTokens.length) el.classList.remove(...prevTokens)\n if (state.isOver) {\n const nextTokens = tokenizeClass(nextOptions.overClass)\n if (nextTokens.length) el.classList.add(...nextTokens)\n }\n }\n\n // Если директива выключена — сбрасываем состояние.\n if (!nextOptions.enabled) {\n state.overCounter = 0\n setOver(el, false)\n }\n}\n\n/**\n * `v-dropzone` — декларативная DnD-зона для файлов (перетаскивание + drop).\n *\n * Директива не делает загрузку сама — только нормализует события и отдаёт `File[]`.\n */\nexport const vDropzone: Directive<HTMLElement, DropzoneBindingValue> = {\n mounted(el, binding) {\n bind(el, binding.value)\n },\n updated(el, binding) {\n update(el, binding.value)\n },\n unmounted(el) {\n unbind(el)\n },\n}\n"],"mappings":";;AA2CA,SAAS,UAAU,OAA4D;AAC7E,KAAI,OAAO,UAAU,WACnB,QAAO;EACL,SAAS;EACT,UAAU;EACV,YAAY,KAAA;EACZ,gBAAgB;EAChB,iBAAiB;EACjB,SAAS;EACT,SAAS,KAAA;EACT,eAAe,KAAA;EACf,WAAW;EACZ;AAGH,KAAI,SAAS,OAAO,UAAU,SAC5B,QAAO;EACL,SAAS,MAAM,WAAW;EAC1B,UAAU,MAAM,YAAY;EAC5B,YAAY,MAAM;EAClB,gBAAgB,MAAM,kBAAkB;EACxC,iBAAiB,MAAM,mBAAmB;EAC1C,SAAS,MAAM;EACf,SAAS,MAAM;EACf,eAAe,MAAM;EACrB,WAAW,MAAM,aAAa;EAC/B;AAGH,QAAO;EACL,SAAS;EACT,UAAU;EACV,YAAY,KAAA;EACZ,gBAAgB;EAChB,iBAAiB;EACjB,SAAS,KAAA;EACT,SAAS,KAAA;EACT,eAAe,KAAA;EACf,WAAW;EACZ;;AAaH,IAAM,yBAAS,IAAI,SAAqC;;;;;;AAOxD,SAAS,cAAc,OAAyB;AAC9C,QAAO,MAAM,MAAM,MAAM,CAAC,QAAO,UAAS,MAAM,SAAS,EAAE;;AAG7D,SAAS,QAAQ,IAAiB,MAAe;CAC/C,MAAM,QAAQ,OAAO,IAAI,GAAG;AAC5B,KAAI,CAAC,MAAO;CAKZ,MAAM,aAAa,GAAG,QAAQ,mBAAmB;CACjD,MAAM,OAAO,MAAM;AAEnB,OAAM,SAAS;CAEf,MAAM,SAAS,cAAc,MAAM,QAAQ,UAAU;AACrD,KAAI,MAAM;AACR,MAAI,OAAO,OAAQ,IAAG,UAAU,IAAI,GAAG,OAAO;AAC9C,KAAG,QAAQ,iBAAiB;QACvB;AACL,MAAI,OAAO,OAAQ,IAAG,UAAU,OAAO,GAAG,OAAO;AACjD,SAAO,GAAG,QAAQ;;AAGpB,KAAI,SAAS,QAAQ,eAAe,KAClC,OAAM,QAAQ,gBAAgB,EAAE,QAAQ,MAAM,CAAC;;AAInD,SAAS,OAAO,IAAiB;CAC/B,MAAM,QAAQ,OAAO,IAAI,GAAG;AAC5B,KAAI,CAAC,MAAO;AAIZ,OAAM,cAAc;AACpB,SAAQ,IAAI,MAAM;AAElB,QAAO,GAAG,QAAQ;AAElB,IAAG,oBAAoB,aAAa,MAAM,YAAY;AACtD,IAAG,oBAAoB,YAAY,MAAM,WAAW;AACpD,IAAG,oBAAoB,aAAa,MAAM,YAAY;AACtD,IAAG,oBAAoB,QAAQ,MAAM,OAAO;AAE5C,QAAO,OAAO,GAAG;;AAGnB,SAAS,KAAK,IAAiB,OAAyC;CAGtE,MAAM,QAAuB;EAC3B,SAHc,UAAU,MAAM;EAI9B,aAAa;EACb,QAAQ;EACR,YAAY,OAAO;GACjB,MAAM,UAAU,OAAO,IAAI,GAAG;AAC9B,OAAI,CAAC,SAAS,QAAQ,QAAS;AAE/B,OAAI,QAAQ,QAAQ,eAAgB,OAAM,gBAAgB;AAC1D,OAAI,QAAQ,QAAQ,gBAAiB,OAAM,iBAAiB;AAE5D,WAAQ,eAAe;AACvB,WAAQ,IAAI,KAAK;;EAEnB,WAAW,OAAO;GAChB,MAAM,UAAU,OAAO,IAAI,GAAG;AAC9B,OAAI,CAAC,SAAS,QAAQ,QAAS;AAE/B,OAAI,QAAQ,QAAQ,eAAgB,OAAM,gBAAgB;AAC1D,OAAI,QAAQ,QAAQ,gBAAiB,OAAM,iBAAiB;AAE5D,OAAI,MAAM,aAAc,OAAM,aAAa,aAAa;;EAE1D,YAAY,OAAO;GACjB,MAAM,UAAU,OAAO,IAAI,GAAG;AAC9B,OAAI,CAAC,SAAS,QAAQ,QAAS;AAE/B,OAAI,QAAQ,QAAQ,eAAgB,OAAM,gBAAgB;AAC1D,OAAI,QAAQ,QAAQ,gBAAiB,OAAM,iBAAiB;AAE5D,WAAQ,cAAc,KAAK,IAAI,GAAG,QAAQ,cAAc,EAAE;AAC1D,OAAI,QAAQ,gBAAgB,EAAG,SAAQ,IAAI,MAAM;;EAEnD,OAAO,OAAO;GACZ,MAAM,UAAU,OAAO,IAAI,GAAG;AAC9B,OAAI,CAAC,SAAS,QAAQ,QAAS;AAE/B,OAAI,QAAQ,QAAQ,eAAgB,OAAM,gBAAgB;AAC1D,OAAI,QAAQ,QAAQ,gBAAiB,OAAM,iBAAiB;AAE5D,WAAQ,cAAc;AACtB,WAAQ,IAAI,MAAM;GAElB,MAAM,KAAK,MAAM;GACjB,MAAM,QAAQ,IAAI,QAAQ,MAAM,UAAU,MAAM,KAAK,GAAG,MAAM,GAAa,EAAE;AAC7E,OAAI,CAAC,MAAM,OAAQ;AAEnB,IAAM,YAAY;AAChB,QAAI;KAGF,MAAM,EAAE,OAAO,QAAQ,WAAW,MAAM,kBAAkB,OAFvC,QAAQ,QAAQ,cAAc,EAAE,EAE0B;MAC3E,QAAQ;MACR,UAAU,QAAQ,QAAQ;MAC3B,CAAC;AAEF,SAAI,OAAO,SAAS,GAAG;AACrB,cAAQ,QAAQ,UAAU,IAAI,oBAAoB,QAAQ,OAAO,CAAC;AAClE;;AAGF,SAAI,CAAC,OAAO,OAAQ;AACpB,WAAM,QAAQ,QAAQ,UAAU,QAAQ,MAAM;aACvC,OAAO;AACd,aAAQ,QAAQ,UAAU,MAAM;;OAEhC;;EAEP;AAED,QAAO,IAAI,IAAI,MAAM;AAGrB,IAAG,QAAQ,aAAa;AAExB,IAAG,iBAAiB,aAAa,MAAM,YAAY;AACnD,IAAG,iBAAiB,YAAY,MAAM,WAAW;AACjD,IAAG,iBAAiB,aAAa,MAAM,YAAY;AACnD,IAAG,iBAAiB,QAAQ,MAAM,OAAO;;AAG3C,SAAS,OAAO,IAAiB,OAAyC;CACxE,MAAM,QAAQ,OAAO,IAAI,GAAG;AAC5B,KAAI,CAAC,OAAO;AACV,OAAK,IAAI,MAAM;AACf;;CAGF,MAAM,gBAAgB,MAAM,QAAQ;CACpC,MAAM,cAAc,UAAU,MAAM;AAEpC,OAAM,UAAU;AAGhB,KAAI,kBAAkB,YAAY,WAAW;EAC3C,MAAM,aAAa,cAAc,cAAc;AAC/C,MAAI,WAAW,OAAQ,IAAG,UAAU,OAAO,GAAG,WAAW;AACzD,MAAI,MAAM,QAAQ;GAChB,MAAM,aAAa,cAAc,YAAY,UAAU;AACvD,OAAI,WAAW,OAAQ,IAAG,UAAU,IAAI,GAAG,WAAW;;;AAK1D,KAAI,CAAC,YAAY,SAAS;AACxB,QAAM,cAAc;AACpB,UAAQ,IAAI,MAAM;;;;;;;;AAStB,IAAa,YAA0D;CACrE,QAAQ,IAAI,SAAS;AACnB,OAAK,IAAI,QAAQ,MAAM;;CAEzB,QAAQ,IAAI,SAAS;AACnB,SAAO,IAAI,QAAQ,MAAM;;CAE3B,UAAU,IAAI;AACZ,SAAO,GAAG;;CAEb"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as grButtonSafelist } from "./chunks/safelist-BY7z8fOl.js";
|
|
2
2
|
import { n as grProgressBarSafelist } from "./chunks/config-Da90XGsi.js";
|
|
3
|
-
import { a as granularityThemeNames, i as granularityDefaultThemes, n as createGranularityProvider, r as granularityComponentConfigs, t as GRANULARITY_PROVIDER_ID } from "./chunks/shared-
|
|
3
|
+
import { a as granularityThemeNames, i as granularityDefaultThemes, n as createGranularityProvider, r as granularityComponentConfigs, t as GRANULARITY_PROVIDER_ID } from "./chunks/shared-CyCPkimZ.js";
|
|
4
4
|
import { defineGranularComponent } from "@feugene/unocss-preset-granular/contract";
|
|
5
5
|
import { tokenDefinitionsFromCssSync } from "@feugene/unocss-preset-granular/node";
|
|
6
6
|
//#region src/components/GrButton/config.node.ts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as granularityThemeNames, i as granularityDefaultThemes, n as createGranularityProvider, r as granularityComponentConfigs, t as GRANULARITY_PROVIDER_ID } from "./chunks/shared-
|
|
1
|
+
import { a as granularityThemeNames, i as granularityDefaultThemes, n as createGranularityProvider, r as granularityComponentConfigs, t as GRANULARITY_PROVIDER_ID } from "./chunks/shared-CyCPkimZ.js";
|
|
2
2
|
//#region src/granular-provider/index.ts
|
|
3
3
|
var granularityProvider = createGranularityProvider();
|
|
4
4
|
//#endregion
|