ics-ui-kit 0.1.13 → 0.1.15
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/{AlertIcon-5B6AgZpe.js → AlertIcon-BphnEYvV.js} +3 -3
- package/dist/AlertIcon-BphnEYvV.js.map +1 -0
- package/dist/Field-CP_-li9L.js +90 -0
- package/dist/Field-CP_-li9L.js.map +1 -0
- package/dist/{FormFooterTemplate-ClTxqrIB.js → FormFooterTemplate-Cfn5Nmge.js} +2 -2
- package/dist/{FormFooterTemplate-ClTxqrIB.js.map → FormFooterTemplate-Cfn5Nmge.js.map} +1 -1
- package/dist/{FormStack-B3UBh9oF.js → FormStack-Cc_ELdWL.js} +2 -2
- package/dist/{FormStack-B3UBh9oF.js.map → FormStack-Cc_ELdWL.js.map} +1 -1
- package/dist/{SearchSelectTag-DFCX9zT1.js → SearchSelectTag-CA7Ie3Nx.js} +2 -2
- package/dist/{SearchSelectTag-DFCX9zT1.js.map → SearchSelectTag-CA7Ie3Nx.js.map} +1 -1
- package/dist/TableFillHandle-C_yvCTSl.js +65 -0
- package/dist/TableFillHandle-C_yvCTSl.js.map +1 -0
- package/dist/TextOverflowTooltip-B1I5qwAT.js.map +1 -1
- package/dist/blocks/auth/otp-form.js +1 -1
- package/dist/components/alert/Alert.d.ts +4 -0
- package/dist/components/alert/Alert.stories.d.ts +1 -0
- package/dist/components/alert-dialog.js +1 -1
- package/dist/components/alert.js +18 -18
- package/dist/components/alert.js.map +1 -1
- package/dist/components/card.js +1 -1
- package/dist/components/counter.js +6 -6
- package/dist/components/counter.js.map +1 -1
- package/dist/components/dialog/Dialog.stories.d.ts +1 -0
- package/dist/components/dialog.js +1 -1
- package/dist/components/dropdown.js +98 -98
- package/dist/components/dropdown.js.map +1 -1
- package/dist/components/field/Field.d.ts +4 -0
- package/dist/components/field/Field.stories.d.ts +1 -0
- package/dist/components/field.js +1 -1
- package/dist/components/file-upload.js +1 -1
- package/dist/components/form.js +3 -3
- package/dist/components/glass-toolbar/GlassToolbar.stories.d.ts +1 -0
- package/dist/components/glass-toolbar.js +35 -35
- package/dist/components/glass-toolbar.js.map +1 -1
- package/dist/components/search-select.js +1 -1
- package/dist/components/sidebar/Sidebar.stories.d.ts +278 -2
- package/dist/components/sidebar/SidebarContext.d.ts +2 -0
- package/dist/components/sidebar.js +271 -267
- package/dist/components/sidebar.js.map +1 -1
- package/dist/components/system-state.js +1 -1
- package/dist/components/table/Table.d.ts +109 -5
- package/dist/components/table/Table.stories.d.ts +285 -9
- package/dist/components/table/column-reorder/index.d.ts +1 -0
- package/dist/components/table/column-reorder/useColumnReorder.d.ts +82 -0
- package/dist/components/table/column-reorder.d.ts +2 -0
- package/dist/components/table/column-reorder.js +6 -0
- package/dist/components/table/column-reorder.js.map +1 -0
- package/dist/components/table/column-resize/columnAutoFit.d.ts +21 -0
- package/dist/components/table/column-resize/columnResizeSession.d.ts +9 -0
- package/dist/components/table/column-resize/index.d.ts +3 -0
- package/dist/components/table/column-resize/useColumnResize.d.ts +52 -0
- package/dist/components/table/column-resize.d.ts +2 -0
- package/dist/components/table/column-resize.js +7 -0
- package/dist/components/table/column-resize.js.map +1 -0
- package/dist/components/table/editable/TableFillHandle.d.ts +23 -0
- package/dist/components/table/editable/cellRange.d.ts +83 -0
- package/dist/components/table/editable/editableCell.d.ts +90 -0
- package/dist/components/table/editable/index.d.ts +3 -0
- package/dist/components/table/editable.d.ts +2 -0
- package/dist/components/table/editable.js +12 -0
- package/dist/components/table/editable.js.map +1 -0
- package/dist/components/table/index.d.ts +8 -1
- package/dist/components/table/opaqueCell.d.ts +47 -0
- package/dist/components/table/rowTint.d.ts +60 -0
- package/dist/components/table/sticky/index.d.ts +1 -0
- package/dist/components/table/sticky/stickyCell.d.ts +105 -0
- package/dist/components/table/sticky.d.ts +2 -0
- package/dist/components/table/sticky.js +22 -0
- package/dist/components/table/sticky.js.map +1 -0
- package/dist/components/table/tableStoryData.d.ts +84 -0
- package/dist/components/table/tableStoryParts.d.ts +72 -0
- package/dist/components/table/tree/TableTree.d.ts +106 -0
- package/dist/components/table/tree/index.d.ts +3 -0
- package/dist/components/table/tree/treeGeometry.d.ts +86 -0
- package/dist/components/table/tree/treeModel.d.ts +87 -0
- package/dist/components/table/tree.d.ts +2 -0
- package/dist/components/table/tree.js +19 -0
- package/dist/components/table/tree.js.map +1 -0
- package/dist/components/table.js +52 -79
- package/dist/components/table.js.map +1 -1
- package/dist/components/tag-input.js +1 -1
- package/dist/components/toolbar.js +1 -2
- package/dist/components/toolbar.js.map +1 -1
- package/dist/hooks.js +1 -1
- package/dist/lib/utils/dom.d.ts +72 -0
- package/dist/opaqueCell-SGaiyL54.js +31 -0
- package/dist/opaqueCell-SGaiyL54.js.map +1 -0
- package/dist/plus-BpxYPnAG.js +15 -0
- package/dist/plus-BpxYPnAG.js.map +1 -0
- package/dist/styles-scoped.css +327 -81
- package/dist/styles.css +327 -81
- package/dist/theme.css +2 -0
- package/dist/treeModel-BlPWVj4W.js +319 -0
- package/dist/treeModel-BlPWVj4W.js.map +1 -0
- package/dist/useBreakpoints-DHvp74UL.js +31 -0
- package/dist/useBreakpoints-DHvp74UL.js.map +1 -0
- package/dist/useColumnReorder-BxVZQ_Y5.js +119 -0
- package/dist/useColumnReorder-BxVZQ_Y5.js.map +1 -0
- package/dist/useColumnResize-wjfEyBBg.js +130 -0
- package/dist/useColumnResize-wjfEyBBg.js.map +1 -0
- package/dist/vendors/date-fns/index.d.ts +7 -14
- package/dist/vendors/date-fns/locale/en-US/index.d.ts +4 -0
- package/dist/vendors/date-fns/locale/ru/index.d.ts +4 -0
- package/dist/vendors/react-day-picker/index.d.ts +8 -17
- package/dist/vendors/react-hook-form/index.d.ts +8 -15
- package/dist/vendors/tanstack/react-table/index.d.ts +12 -0
- package/dist/vendors/zod/index.d.ts +8 -9
- package/package.json +3 -2
- package/tailwind.preset.js +6 -2
- package/dist/AlertIcon-5B6AgZpe.js.map +0 -1
- package/dist/Field-COD9VbUX.js +0 -86
- package/dist/Field-COD9VbUX.js.map +0 -1
- package/dist/components/data-table/DataTable.stories.d.ts +0 -8
- package/dist/useBreakpoints-D8wKOvil.js +0 -103
- package/dist/useBreakpoints-D8wKOvil.js.map +0 -1
package/dist/lib/utils/dom.d.ts
CHANGED
|
@@ -2,5 +2,77 @@
|
|
|
2
2
|
* Проверяет, переполнен ли элемент (дочерние элементы выходят за пределы родительского элемента)
|
|
3
3
|
* @param element - HTML элемент для проверки
|
|
4
4
|
* @returns true, если элемент переполнен по ширине или высоте
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* // подсказку показываем только там, где текст обрезан
|
|
8
|
+
* const truncated = isElementOverflowing(labelRef.current);
|
|
5
9
|
*/
|
|
6
10
|
export declare const isElementOverflowing: (element: HTMLElement) => boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Ставит каретку в `input`/`textarea` по горизонтальной координате указателя (`clientX`).
|
|
13
|
+
*
|
|
14
|
+
* Нужно там, где поле появляется по клику уже после самого клика — например, при переходе
|
|
15
|
+
* ячейки таблицы в режим редактирования по двойному щелчку: без этого каретка встаёт
|
|
16
|
+
* в начало или конец, а не туда, куда целился пользователь.
|
|
17
|
+
*
|
|
18
|
+
* `caretPositionFromPoint` / `caretRangeFromPoint` здесь бесполезны: содержимое `input`
|
|
19
|
+
* не является частью DOM-дерева, и Range/Selection API до него не достаёт — вернётся сам
|
|
20
|
+
* элемент, а не позиция в тексте. Поэтому индекс считается вручную: текст измеряется
|
|
21
|
+
* на offscreen canvas тем же шрифтом, и выбирается ближайшая к точке граница символа.
|
|
22
|
+
* Ширины префиксов монотонно растут, так что перебор обрывается, как только начал удаляться
|
|
23
|
+
* от цели.
|
|
24
|
+
*
|
|
25
|
+
* Учитывается только горизонталь, поэтому для многострочного текста функция не годится —
|
|
26
|
+
* там нужен `placeCaretAtClientPoint` по `contenteditable`.
|
|
27
|
+
*
|
|
28
|
+
* Возвращает `false`, если поставить каретку не удалось (поле пустое, тип поля не поддерживает
|
|
29
|
+
* выделение или canvas недоступен) — вызывающему коду в этом случае стоит оставить поведение
|
|
30
|
+
* по умолчанию.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* // координата запоминается на dblclick, применяется, когда поле получило фокус
|
|
34
|
+
* <input
|
|
35
|
+
* autoFocus
|
|
36
|
+
* onFocus={(event) => {
|
|
37
|
+
* const input = event.currentTarget;
|
|
38
|
+
* if (!placeCaretAtPoint(input, caretX)) placeCaretAtEnd(input);
|
|
39
|
+
* }}
|
|
40
|
+
* />
|
|
41
|
+
*/
|
|
42
|
+
export declare const placeCaretAtPoint: (element: HTMLInputElement | HTMLTextAreaElement, clientX: number) => boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Ставит каретку в `contenteditable` по точке указателя.
|
|
45
|
+
*
|
|
46
|
+
* В отличие от `input`, текст здесь — обычные узлы DOM, поэтому измерять ничего не нужно:
|
|
47
|
+
* браузер сам отдаёт позицию по координатам. Работает и с переносами, так что это тот случай,
|
|
48
|
+
* когда многострочная правка делается редактируемым `div`, а не `textarea`.
|
|
49
|
+
*
|
|
50
|
+
* Возвращает `false`, если точка не попала в текст элемента, — вызывающему коду стоит
|
|
51
|
+
* поставить каретку в конец через `placeCaretAtEnd`.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* const editor = event.currentTarget;
|
|
55
|
+
* if (!placeCaretAtClientPoint(editor, event.clientX, event.clientY)) placeCaretAtEnd(editor);
|
|
56
|
+
*/
|
|
57
|
+
export declare const placeCaretAtClientPoint: (element: HTMLElement, clientX: number, clientY: number) => boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Ставит каретку в конец содержимого `contenteditable` — поведение F2 в Excel.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* // F2 открывает правку с кареткой в конце
|
|
63
|
+
* if (event.key === "F2") placeCaretAtEnd(editorRef.current);
|
|
64
|
+
*/
|
|
65
|
+
export declare const placeCaretAtEnd: (element: HTMLElement) => void;
|
|
66
|
+
/**
|
|
67
|
+
* Вставляет текст в текущую позицию каретки внутри `contenteditable`, заменяя выделенное.
|
|
68
|
+
*
|
|
69
|
+
* Нужно на вставке из буфера: по умолчанию `contenteditable` принимает разметку, и в ячейку
|
|
70
|
+
* приезжает чужое форматирование вместе с текстом.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* onPaste={(event) => {
|
|
74
|
+
* event.preventDefault();
|
|
75
|
+
* insertTextAtCaret(event.currentTarget, event.clipboardData.getData("text/plain"));
|
|
76
|
+
* }}
|
|
77
|
+
*/
|
|
78
|
+
export declare const insertTextAtCaret: (element: HTMLElement, text: string) => void;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { T as r } from "./index-BVqs-uqP.js";
|
|
2
|
+
const n = {
|
|
3
|
+
selected: "hsl(var(--alpha-high-05))",
|
|
4
|
+
inactive: "hsl(var(--status-error) / 5%)"
|
|
5
|
+
}, l = (...e) => {
|
|
6
|
+
const a = e.filter(Boolean).map((t) => `linear-gradient(${t},${t})`);
|
|
7
|
+
return a.length ? { "--table-row-tints": a.join(",") } : {};
|
|
8
|
+
}, i = "bg-[image:var(--table-row-tints,none)]", o = "after:bg-[image:var(--table-row-tints,none)]", b = r({
|
|
9
|
+
base: [
|
|
10
|
+
"after:pointer-events-none after:absolute after:inset-0 after:transition-colors",
|
|
11
|
+
"after:bg-[color:var(--table-row-bg)] [tr:hover>&]:after:bg-[color:var(--table-row-bg-hover)]",
|
|
12
|
+
o
|
|
13
|
+
],
|
|
14
|
+
variants: {
|
|
15
|
+
part: {
|
|
16
|
+
cell: "bg-secondary-bg",
|
|
17
|
+
head: "bg-primary-bg"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
defaultVariants: {
|
|
21
|
+
part: "cell"
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
export {
|
|
25
|
+
n as T,
|
|
26
|
+
i as a,
|
|
27
|
+
o as b,
|
|
28
|
+
b as o,
|
|
29
|
+
l as t
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=opaqueCell-SGaiyL54.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opaqueCell-SGaiyL54.js","sources":["../src/components/table/rowTint.ts","../src/components/table/opaqueCell.ts"],"sourcesContent":["import type { CSSProperties } from \"react\";\n\n/**\n * Подкраска строки таблицы — стопка полупрозрачных слоёв поверх её заливки.\n *\n * **Когда нужно.** Когда состояний у строки больше одного. Заливка у строки одна\n * (`background-color`), и второе состояние вытеснило бы первое: выделенная деактивированная\n * строка выглядела бы просто выделенной. Слои же складываются альфами — и между собой,\n * и с заливкой, какой бы она ни была, включая заданную вами `className=\"bg-…\"`.\n *\n * **Почему это не пропсы строки.** `TableRow` не знает ни про «выделено», ни про «отключено»:\n * что означает подсветка и когда её включать — знание прикладного кода. Кит даёт механизм\n * (слои), готовые цвета (`TABLE_ROW_TINT`) и рисующие их классы; собирает их потребитель.\n *\n * @example\n * <TableRow style={tableRowTints(isSelected && TABLE_ROW_TINT.selected, isInactive && TABLE_ROW_TINT.inactive)}>\n */\n\n/**\n * Готовые цвета подкрасок: `selected` — выделенная строка, `inactive` — деактивированная.\n *\n * Оба полупрозрачные, поэтому сочетаются и друг с другом, и с наведением: наведение красит\n * заливку под слоями, и выделенная строка под курсором темнеет.\n *\n * Список открытый: свои состояния задавайте своими значениями, слоем годится любой\n * полупрозрачный CSS-цвет.\n */\nexport const TABLE_ROW_TINT = {\n\tselected: \"hsl(var(--alpha-high-05))\",\n\tinactive: \"hsl(var(--status-error) / 5%)\"\n} as const;\n\n/**\n * Слои подкраски для `style` строки. Первый аргумент — верхний слой, каждый следующий\n * ложится под ним, под всеми — заливка строки.\n *\n * **Цвета должны быть полупрозрачными**, и следит за этим вызывающий код: значения уходят\n * в `background-image` как есть. Непрозрачный цвет закроет всё, что под ним, — остальные\n * слои и заливку вместе с наведением.\n *\n * Ложные значения отбрасываются, поэтому условия пишутся прямо в аргументах:\n * `tableRowTints(isSelected && TABLE_ROW_TINT.selected)`. Без единого слоя строка красится\n * одной заливкой.\n *\n * Результат — инлайновый стиль с CSS-переменной; она наследуется от `tr` к ячейкам, поэтому\n * закреплённые и перетаскиваемые колонки подхватывают подкраску сами.\n *\n * @example\n * <TableRow\n * style={tableRowTints(\n * isSelected && TABLE_ROW_TINT.selected,\n * isOverdue && \"hsl(var(--status-warning) / 12%)\"\n * )}\n * >\n */\nexport const tableRowTints = (...tints: (string | false | null | undefined)[]): CSSProperties => {\n\tconst layers = tints.filter(Boolean).map((tint) => `linear-gradient(${tint},${tint})`);\n\n\t// `linear-gradient(цвет, цвет)` — способ подать сплошную заливку как изображение: слоями\n\t// умеет быть только `background-image`, а `background-color` — единственный и последний.\n\treturn layers.length ? ({ \"--table-row-tints\": layers.join(\",\") } as CSSProperties) : {};\n};\n\n/**\n * Класс, рисующий слои подкраски на строке. Уже применён к `TableRow` — нужен, только если\n * вы рисуете строку своим элементом.\n */\nexport const TABLE_ROW_TINT_LAYERS = \"bg-[image:var(--table-row-tints,none)]\";\n\n/** То же самое для слоя `::after` непрозрачной ячейки — см. `opaqueCellStyles`. */\nexport const TABLE_ROW_TINT_LAYERS_AFTER = \"after:bg-[image:var(--table-row-tints,none)]\";\n","import { tv } from \"tailwind-variants\";\nimport { TABLE_ROW_TINT_LAYERS_AFTER } from \"./rowTint\";\n\n/**\n * Ячейка с непрозрачным фоном, сохраняющая подсветку строки.\n *\n * Нужна везде, где ячейка выезжает из потока и под ней оказывается чужое содержимое:\n * закреплённая колонка (`stickyCellStyles`) и колонка, которую перетаскивают\n * (`useColumnReorder`). Обе задачи одинаковые, поэтому рецепт один.\n *\n * **Почему фон нельзя просто задать.** Строка прозрачна — красит подложка секции\n * (`TableBody`, `TableHeader`), и такой ячейке нужен свой непрозрачный фон. Но подменять\n * им подсветку строки нельзя: `hover:bg-*` положил бы поверх полупрозрачный цвет, и чужое\n * содержимое снова стало бы просвечивать. Поэтому подсветку рисует слой `::after` теми же\n * переменными, что и сама строка, — заливкой (`--table-row-bg`, `--table-row-bg-hover`)\n * и списком слоёв (`--table-row-tints`). Переменные наследуются от `tr` к ячейке сами,\n * связывать их не нужно.\n *\n * Повторяются обе части: если рисовать только заливку, у закреплённой колонки пропадёт любая\n * подкраска — и выделение, и деактивация, и что там ещё собрал потребитель.\n *\n * `transition-colors` совпадает с переходом у `TableRow`, поэтому строка подсвечивается\n * целиком, а не двумя рывками. Разделители слой не задевает: `inset-0` у абсолютного\n * потомка отсчитывается от padding-box, а границы лежат снаружи него.\n *\n * **Требует контекста позиционирования** — `sticky` у закреплённой ячейки, `relative`\n * у перетаскиваемой: иначе `::after` растянется не по ячейке, а по ближайшему\n * позиционированному предку.\n *\n * @example\n * <TableCell className={opaqueCellStyles({ className: \"relative\" })}>…</TableCell>\n * <TableHead className={opaqueCellStyles({ part: \"head\", className: \"relative\" })}>…</TableHead>\n */\nexport const opaqueCellStyles = tv({\n\tbase: [\n\t\t\"after:pointer-events-none after:absolute after:inset-0 after:transition-colors\",\n\t\t\"after:bg-[color:var(--table-row-bg)] [tr:hover>&]:after:bg-[color:var(--table-row-bg-hover)]\",\n\t\tTABLE_ROW_TINT_LAYERS_AFTER\n\t],\n\tvariants: {\n\t\tpart: {\n\t\t\tcell: \"bg-secondary-bg\",\n\t\t\thead: \"bg-primary-bg\"\n\t\t}\n\t},\n\tdefaultVariants: {\n\t\tpart: \"cell\"\n\t}\n});\n"],"names":["TABLE_ROW_TINT","tableRowTints","tints","layers","tint","TABLE_ROW_TINT_LAYERS","TABLE_ROW_TINT_LAYERS_AFTER","opaqueCellStyles","tv"],"mappings":";AA2BO,MAAMA,IAAiB;AAAA,EAC7B,UAAU;AAAA,EACV,UAAU;AACX,GAyBaC,IAAgB,IAAIC,MAAgE;AAChG,QAAMC,IAASD,EAAM,OAAO,OAAO,EAAE,IAAI,CAACE,MAAS,mBAAmBA,CAAI,IAAIA,CAAI,GAAG;AAI9E,SAAAD,EAAO,SAAU,EAAE,qBAAqBA,EAAO,KAAK,GAAG,EAAE,IAAsB,CAAC;AACxF,GAMaE,IAAwB,0CAGxBC,IAA8B,gDCrC9BC,IAAmBC,EAAG;AAAA,EAClC,MAAM;AAAA,IACL;AAAA,IACA;AAAA,IACAF;AAAA,EACD;AAAA,EACA,UAAU;AAAA,IACT,MAAM;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,IAAA;AAAA,EAER;AAAA,EACA,iBAAiB;AAAA,IAChB,MAAM;AAAA,EAAA;AAER,CAAC;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { c as e } from "./createLucideIcon-DwBrHnj9.js";
|
|
2
|
+
/**
|
|
3
|
+
* @license lucide-react v0.460.0 - ISC
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the ISC license.
|
|
6
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
const a = e("Plus", [
|
|
9
|
+
["path", { d: "M5 12h14", key: "1ays0h" }],
|
|
10
|
+
["path", { d: "M12 5v14", key: "s699le" }]
|
|
11
|
+
]);
|
|
12
|
+
export {
|
|
13
|
+
a as P
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=plus-BpxYPnAG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plus-BpxYPnAG.js","sources":["../node_modules/.pnpm/lucide-react@0.460.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/plus.js"],"sourcesContent":["/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Plus = createLucideIcon(\"Plus\", [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"M12 5v14\", key: \"s699le\" }]\n]);\n\nexport { Plus as default };\n//# sourceMappingURL=plus.js.map\n"],"names":["Plus","createLucideIcon"],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASK,MAACA,IAAOC,EAAiB,QAAQ;AAAA,EACpC,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,SAAQ,CAAE;AAAA,EACzC,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,SAAU,CAAA;AAC3C,CAAC;","x_google_ignoreList":[0]}
|