Корпоративное ПО · Новый ресурс

Дизайн-система Infor.

Создайте корпоративную форму обслуживания с настоящими состояниями полей ввода IDS, псевдонимами темы и точным идентификатором ресурса. Изучите актуальные токены общедоступной темы, закреплённый пакет Web Components и локальный процесс работы с черновиком, проверкой данных и сбросом.

Руководство OpenDesign7 глав53 справочные записиАвторское руководство по приложению
01

Дизайн-система Infor Предварительный просмотр интерфейса

Проверьте сводку и контактные данные, подготовьте локальный запрос и очистите его, не отправляя.

Черновик заявки на обслуживаниеОткрыть полный пример
Независимая интерпретация HTML/CSS с использованием проверенных значений токенов IDS Core/Light и системного резервного шрифта. Это не среда выполнения IDS Native. · Справочник по реализации
02

Дизайн-система Infor Справочник по дизайну

Таблица тем Infor с публичными токенами, прочитанная в ходе этой проверки, а также опубликованные ids-enterprise-wc 1.17.1 и официальные примеры полей и кнопок. Последний URL таблицы токенов ведёт к текущему снимку и не гарантирует соответствие версии пакета.

Роли темы

Источник
Название / правилоЗначение / конфигурацияПрименение
--ids-color-action-defaultvar(--ids-color-blue-60)Семантический псевдоним из публичной темы Core/Light.
--ids-color-action-strongervar(--ids-color-blue-70)Семантический псевдоним из публичной темы Core/Light.
--ids-color-background-defaultvar(--ids-color-white-100)Семантический псевдоним из публичной темы Core/Light.
--ids-color-foreground-default-defaultvar(--ids-color-neutral-100)Семантический псевдоним из публичной темы Core/Light.
--ids-color-foreground-default-secondaryvar(--ids-color-neutral-80)Семантический псевдоним из публичной темы Core/Light.
--ids-color-border-defaultvar(--ids-color-neutral-60)Семантический псевдоним из публичной темы Core/Light.
--ids-color-border-weakvar(--ids-color-neutral-40)Семантический псевдоним из публичной темы Core/Light.

Разрешённые значения примитивов

Источник
Название / правилоЗначение / конфигурацияПрименение
--ids-color-blue-60#0072ed Примитив публичной темы; не следует считать, что в режимах Dark или Contrast он имеет то же значение.
--ids-color-blue-70#0066d4 Примитив публичной темы; не следует считать, что в режимах Dark или Contrast он имеет то же значение.
--ids-color-neutral-100#161618 Примитив публичной темы; не следует считать, что в режимах Dark или Contrast он имеет то же значение.
--ids-color-neutral-80#3b3b3f Примитив публичной темы; не следует считать, что в режимах Dark или Contrast он имеет то же значение.
--ids-color-neutral-60#6f6f76 Примитив публичной темы; не следует считать, что в режимах Dark или Contrast он имеет то же значение.
--ids-color-neutral-10#f5f5f5 Примитив публичной темы; не следует считать, что в режимах Dark или Contrast он имеет то же значение.
--ids-color-red-60#da1217 Примитив публичной темы; не следует считать, что в режимах Dark или Contrast он имеет то же значение.

Псевдонимы интервалов

Источник
Название / правилоЗначение / конфигурацияПрименение
--ids-space-2xsvar(--ids-space-04)Используйте псевдоним для интервалов в пользовательском приложении.
--ids-space-xsvar(--ids-space-08)Используйте псевдоним для интервалов в пользовательском приложении.
--ids-space-smvar(--ids-space-16)Используйте псевдоним для интервалов в пользовательском приложении.
--ids-space-mdvar(--ids-space-24)Используйте псевдоним для интервалов в пользовательском приложении.
--ids-space-lgvar(--ids-space-32)Используйте псевдоним для интервалов в пользовательском приложении.
--ids-space-xlvar(--ids-space-40)Используйте псевдоним для интервалов в пользовательском приложении.
--ids-space-2xlvar(--ids-space-48)Используйте псевдоним для интервалов в пользовательском приложении.

Значения отступов

Источник
Название / правилоЗначение / конфигурацияПрименение
--ids-space-044pxКонкретное значение шкалы из таблицы стилей токенов.
--ids-space-088pxКонкретное значение шкалы из таблицы стилей токенов.
--ids-space-1616pxКонкретное значение шкалы из таблицы стилей токенов.
--ids-space-2424pxКонкретное значение шкалы из таблицы стилей токенов.
--ids-space-3232pxКонкретное значение шкалы из таблицы стилей токенов.
--ids-space-4040pxКонкретное значение шкалы из таблицы стилей токенов.
--ids-space-4848pxКонкретное значение шкалы из таблицы стилей токенов.

Типографика

Источник
Название / правилоЗначение / конфигурацияПрименение
--ids-font-family-sanssource sans proТипографический справочник; файлы шрифтов необходимо загружать отдельно.
--ids-font-family-monosource code proТипографический справочник; файлы шрифтов необходимо загружать отдельно.
--ids-font-size-defaultvar(--ids-font-size-sm)Типографический справочник; файлы шрифтов необходимо загружать отдельно.
--ids-font-size-smvar(--ids-font-size-40)Типографический справочник; файлы шрифтов необходимо загружать отдельно.
--ids-font-size-3014pxТипографический справочник; файлы шрифтов необходимо загружать отдельно.
--ids-font-size-4016pxТипографический справочник; файлы шрифтов необходимо загружать отдельно.
--ids-font-size-5020pxТипографический справочник; файлы шрифтов необходимо загружать отдельно.
--ids-font-size-6024pxТипографический справочник; файлы шрифтов необходимо загружать отдельно.

Псевдонимы скругления

Источник
Название / правилоЗначение / конфигурацияПрименение
--ids-border-radius-xsvar(--ids-border-radius-04)Псевдоним ссылается на примитив; не следует считать, что у каждого элемента управления максимально возможное скругление.
--ids-border-radius-smvar(--ids-border-radius-08)Псевдоним ссылается на примитив; не следует считать, что у каждого элемента управления максимально возможное скругление.
--ids-border-radius-mdvar(--ids-border-radius-16)Псевдоним ссылается на примитив; не следует считать, что у каждого элемента управления максимально возможное скругление.
--ids-border-radius-lgvar(--ids-border-radius-24)Псевдоним ссылается на примитив; не следует считать, что у каждого элемента управления максимально возможное скругление.
--ids-border-radius-circlevar(--ids-border-radius-99)Псевдоним ссылается на примитив; не следует считать, что у каждого элемента управления максимально возможное скругление.

Структура поля и кнопки

Источник
Название / правилоЗначение / конфигурацияПрименение
labelVisible input labelИспользуйте для идентификации поля, а не только как текст-заполнитель.
validaterequired / email requiredЗадокументированные правила валидации.
readonlytrueСохраняйте идентификатор ресурса доступным для чтения и недоступным для редактирования.
disabledtrueОтдельное состояние недоступного поля ввода.
clearabletrueКнопка очистки на уровне поля.
dirty-trackertrueНеобязательное отслеживание изменённых значений.
text-alignstart | center | endЛогическое выравнивание текста или числовых данных.

Иерархия действий

Источник
Название / правилоЗначение / конфигурацияПрименение
appearanceprimaryПодготовить локальный черновик.
appearancesecondaryОчистить черновик — вспомогательное действие.
appearancetertiaryМенее заметный вариант.
appearanceprimary-destructive / tertiary-destructiveДля реального намерения удалить данные, а не для обычной отмены.
disabledBoolean attributeСостояние недоступного нативного компонента.
03

Дизайн-система Infor Полное руководство

Практическое руководство по выбору, применению и оценке этой системы для реального интерфейса.

DESIGN-infor.md

Подробные рекомендации, отправная точка для реализации и ссылки на источники.

Скачать руководство

Дизайн-система Infor Корпоративная форма со стабильным идентификатором записи

Храните идентификатор оборудования отдельно от редактируемой заявки

Infor называет SoHo своим языком дизайна и позиционирует IDS как систему, ориентированную на корпоративные роли и повышение продуктивности. В этом примере такой акцент применён к заявке на обслуживание: идентификатор ресурса остаётся неизменным, а описание работ, контактные данные и срочность относятся к редактируемой информации.

Из этого руководства OpenDesign

Идентификатор 02006 намеренно задан строкой. При преобразовании в число начальный ноль будет потерян, а сам идентификатор изменится. В официальном примере IDS используется поле readonly, чтобы контекст записи оставался видимым и не выглядел как отсутствующее или недоступное поле.

Прочитать вспомогательную спецификацию

Дизайн-система Infor Псевдонимы темы разрешаются через примитивы

Используйте псевдоним по назначению

В снимке публичной темы action-default задан через blue-60, default foreground — через neutral-100, а secondary foreground — через neutral-80. Такая двухуровневая структура помогает пользовательской форме соответствовать теме без дублирования конкретных значений цветов в приложении.

На публичной странице токенов доступны режимы Core, Dark и Contrast. Значения в этом руководстве взяты из снимка таблицы стилей Core/Light. Предварительный просмотр не утверждает, что одно и то же значение синего цвета в формате hex универсально для всех трёх режимов. В рабочем компоненте следует использовать семантический псевдоним и позволить выбранной теме определить его значение.

Прочитать вспомогательную спецификацию

Дизайн-система Infor Конкретная шкала без вымышленной системы плотности

Для интервалов, типографики и скруглений предусмотрены отдельные группы псевдонимов

Псевдонимы интервалов включают xs, соответствующий примитиву 8 пикселей, sm — 16, md — 24 и lg — 32. В предоставленном нативном CSS для основных внутренних отступов используется md, а между полями — sm. Так назначение значений явно указано в исходном коде, а в справочной таблице приведены конкретные величины.

По умолчанию используется семейство шрифтов Source Sans Pro, а для моноширинного текста — Source Code Pro. Псевдоним font-size-default соответствует значению 16 пикселей в шкале. Загрузка библиотеки не отменяет необходимость предоставить файлы шрифтов, описанные в README пакета. В автономном предварительном просмотре вместо них используется обычный резервный шрифт.

Названия скруглений не связаны с названиями интервалов: radius-sm соответствует 8 пикселям, а space-sm — 16. Если использовать знакомое значение только потому, что оба названия оканчиваются на sm, результат будет неверным.

Прочитать вспомогательную спецификацию

Дизайн-система Infor Состояния полей с разным назначением

Readonly, disabled и dirty — не взаимозаменяемые состояния

В официальных примерах представлены readonly, disabled, dirty-tracker, clearable, uppercase, lowercase и логическое выравнивание текста. В заявке используются только readonly для идентификатора ресурса и clearable для описания работ. Автоматическое изменение регистра не применяется к адресу электронной почты, а текстовое описание не преобразуется незаметно для пользователя.

В нативном примере для поля контактных данных указано validate="email required". В опубликованном объявлении типа предусмотрены свойства value, focus() и checkValidation(). Поскольку checkValidation возвращает void, код не использует этот метод как булев признак валидности формы, а отдельно проверяет условия, необходимые для подготовки локальной записи.

  • Readonly оставляет постоянный идентификатор ресурса видимым и доступным для чтения.
  • Disabled означает, что поле сейчас нельзя использовать.
  • Отслеживание изменений показывает отличие от исходного значения; это не состояние успешной валидации.

Прочитать вспомогательную спецификацию

Дизайн-система Infor Отслеживание изменений и валидация решают разные задачи

Отслеживайте изменения, не считая их корректными данными

В официальной галерее полей IDS показан атрибут dirty-tracker="true" для поля с начальным значением. Отслеживание изменений касается редактирования поля и не зависит от атрибута validate, правила email и required которого задают допустимый ввод. Изменённое поле контактных данных всё ещё может содержать недействительный адрес.

В опубликованном объявлении типа Input метод checkValidation(): void. Вызывайте его, чтобы запустить валидацию компонента, а не использовать как булево условие для разрешения действия с заказом на обслуживание. В нативном примере также проверяются обязательные значения приложения перед созданием черновика. Описание работ с возможностью очистки и идентификатор ресурса только для чтения показывают ещё две независимые возможности поля.

Отслеживание изменений — задокументированное расширение, не включённое в этот предварительный просмотр. Демонстрационный пример очищает подготовленное описание после изменений и возвращает фокус в поле описания работ; он не сообщает, что заявка на обслуживание сохранена.

Прочитать вспомогательную спецификацию

Дизайн-система Infor Используйте рабочую область из двух частей, не скрывая форму

Сначала форма, затем контекст

В предварительном просмотре форма дополнена компактной карточкой с контекстом оборудования и простой оригинальной схемой машины. Основной порядок чтения остаётся прежним: заголовок, поля, действия, результат. На узких экранах карточка перемещается под форму, а не сжимает поля в нечитаемые колонки.

В примерах библиотеки используются ids-layout-grid и атрибуты колонок для разных контрольных точек. В этом примере намеренно применена более простая адаптивная компоновка; её максимальная ширина и контрольная точка определяются приложением. Здесь демонстрируются интервалы на основе токенов и подписи нативных элементов управления.

Прочитать вспомогательную спецификацию

Дизайн-система Infor Зафиксируйте версию нативного пакета и выполните инициализацию до чтения значений

Надёжная точка входа — опубликованный пакет

Проверенные сведения о пакете указывают версию 1.17.1, точку входа ES-модуля enterprise-wc.js и актуальный исходный репозиторий на хостинге Infor. Поэтому старое расположение на GitHub не следует использовать как надёжную инструкцию по установке. Код импортирует опубликованный пакет, добавляет компоненты и дожидается регистрации пользовательских элементов, прежде чем связывать их с обработчиками.

В официальных актуальных примерах используются URL фрагментов сборки, зависящие от конкретной сборки. Если скопировать в приложение случайное имя фрагмента, оно будет привязано к артефакту развёртывания; точка входа пакета позволяет сборщику разрешить эти зависимости. В руководстве проверены публичные объявления методов, а пример для браузера чётко отделён от утверждений о нативной сборке.

  1. Установите зафиксированную версию пакета в базовый проект Vite с ванильным JavaScript и подключите указанный шрифт согласно политике приложения по работе с ресурсами.
  2. Используйте предоставленную точку входа и CSS, дождитесь регистрации пользовательских элементов, затем свяжите основные действия и сброс.
  3. Проверьте пустое описание, некорректный адрес электронной почты, корректный локальный черновик и последующее изменение; убедитесь, что отображаемый снимок данных не устаревает.

Прочитать вспомогательную спецификацию

Дизайн-система Infor Примеры компонентов дизайн-системы

Полноценный автономный интерактивный пример

Сохраните документ целиком как index.html и откройте его в браузере. Независимая интерпретация HTML/CSS с проверенными значениями токенов IDS core/light и системным шрифтом в качестве запасного. Это не нативная среда выполнения IDS.

html
<!doctype html><html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Maintenance request — IDS interpretation</title><style>*{box-sizing:border-box}body{margin:0;color:#161618;background:#f5f5f5;font:16px/1.45 Arial,sans-serif}main{max-width:1120px;padding:32px;margin:auto}header{display:flex;justify-content:space-between;border-bottom:1px solid #bbbbbf;padding-bottom:16px;gap:16px}header b{font-size:14px}header span{font-size:13px;color:#3b3b3f}h1{font-size:32px;line-height:1.2;font-weight:500;margin:24px 0 8px}h2{font-size:20px;font-weight:500;margin:0 0 16px}.intro{color:#3b3b3f;margin:0 0 24px}.grid{display:grid;grid-template-columns:1.4fr 1fr;gap:24px}.form,.context{background:white;border:1px solid #e0e0e1;border-radius:8px;padding:24px}label,.label{display:block;font-size:14px;margin-bottom:8px}input{width:100%;font:inherit;border:1px solid #6f6f76;border-radius:4px;padding:10px 12px;color:#161618}input[readonly]{background:#f5f5f5}input:focus,button:focus-visible{outline:3px solid #8abff7;outline-offset:2px}.field{margin-bottom:16px}.hint{font-size:12px;color:#3b3b3f;margin:4px 0 0}.actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:24px}button{font:inherit;border-radius:4px;padding:10px 16px;cursor:pointer;border:1px solid #6f6f76;background:white;color:#161618}.primary{background:#0072ed;color:white;border-color:#0072ed}.primary:hover{background:#0066d4}fieldset{padding:0;border:0;margin:24px 0 0}legend{font-size:14px;margin-bottom:8px}.radios{display:flex;gap:16px;flex-wrap:wrap}.radios label{display:flex;gap:8px;align-items:center;margin:0}.radios input{width:auto;accent-color:#0072ed}.equipment{height:190px;background:#e6f1fd;display:grid;place-content:center;margin-bottom:24px;border-radius:4px}.machine{border:3px solid #0054b1;width:165px;height:100px;position:relative;background:white}.machine:before{content:'';position:absolute;left:14px;top:16px;width:55px;height:55px;border:8px double #0054b1;border-radius:50%}.machine:after{content:'02006';position:absolute;right:10px;top:27px;color:#0054b1;font:16px monospace}.context dl{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:0;font-size:14px}.context dt{color:#3b3b3f}.context dd{margin:0;text-align:right}.notice{font-size:13px;background:#f5f5f5;padding:16px;margin-top:24px}.error{color:#a30d11;font-size:14px;min-height:20px}.result{background:#e6f1fd;padding:16px;border-left:3px solid #0072ed;margin-top:20px;white-space:pre-wrap;overflow-wrap:anywhere;font-size:14px}.result[hidden]{display:none}.foot{font-size:12px;color:#3b3b3f;margin-top:24px}@media(max-width:650px){main{padding:20px}.grid{grid-template-columns:1fr}.form,.context{padding:20px}header{flex-direction:column;gap:4px}h1{font-size:28px}.equipment{height:140px}}</style><main><header><b>ASSET SERVICE / LOCAL NOTEBOOK</b><span>Independent Infor IDS interpretation</span></header><h1>Prepare the work. Keep the context.</h1><p class="intro">Build a local maintenance draft for a fixed equipment record.</p><div class="grid"><form id="form" class="form" novalidate><div class="field"><label for="asset">Asset identifier</label><input id="asset" value="02006" readonly><p class="hint">Read-only record identity; leading zero preserved.</p></div><div class="field"><label for="summary">Work summary</label><input id="summary" required placeholder="For example, inspect the drive belt" aria-describedby="error"></div><div class="field"><label for="contact">Contact email</label><input id="contact" type="email" required placeholder="[email protected]" aria-describedby="error"></div><fieldset><legend>Planning urgency</legend><div class="radios"><label><input type="radio" name="urgency" value="Routine" checked>Routine</label><label><input type="radio" name="urgency" value="Soon">Soon</label></div></fieldset><div class="actions"><button class="primary" type="submit">Prepare local draft</button><button id="clear" type="button">Clear draft</button></div><p id="error" class="error" role="alert"></p><div id="result" class="result" role="status" hidden></div></form><aside class="context"><div class="equipment" role="img" aria-label="Original schematic of fictional equipment 02006"><div class="machine"></div></div><h2>Equipment context</h2><dl><dt>Record</dt><dd>02006</dd><dt>Area</dt><dd>Sample workshop</dd><dt>Type</dt><dd>Drive assembly</dd><dt>Connection</dt><dd>Offline sample</dd></dl><p class="notice">Preparing a draft changes only this page. It does not create a work order or send a message.</p></aside></div><p class="foot">Core/light IDS token values with native HTML controls and a system-font fallback. Original illustration and application layout; no native IDS runtime.</p></main><script>const form=document.querySelector('#form'),summary=document.querySelector('#summary'),contact=document.querySelector('#contact'),error=document.querySelector('#error'),result=document.querySelector('#result');function clearResult(){result.hidden=true;result.textContent='';error.textContent='';summary.removeAttribute('aria-invalid');contact.removeAttribute('aria-invalid')}form.addEventListener('input',clearResult);form.onsubmit=e=>{e.preventDefault();clearResult();if(!summary.value.trim()){error.textContent='Enter a work summary.';summary.setAttribute('aria-invalid','true');summary.focus();return}if(!contact.value.trim()||!contact.validity.valid){error.textContent='Enter a valid contact email.';contact.setAttribute('aria-invalid','true');contact.focus();return}result.hidden=false;result.textContent='LOCAL DRAFT / NOT SENT\n\nAsset: 02006\nSummary: '+summary.value.trim()+'\nContact: '+contact.value.trim()+'\nUrgency: '+form.elements.urgency.value};document.querySelector('#clear').onclick=()=>{form.reset();clearResult();summary.focus()};</script></html>

Справочник по коду

  • Asset 02006 остаётся строкой. В нативном примере IDS, а не в этой форме HTML, демонстрируются регистрация пользовательского элемента и checkValidation(); ни один из примеров не создаёт наряд на обслуживание.

Идентификатор только для чтения, обязательная сводка и проверка контакта

Проверка ввода IDS вызывается явно; приложение не позволяет сохранить пустой локальный черновик. Пользовательский текст выводится через textContent.

javascript
// Vite vanilla project: npm install [email protected]
// src/main.js. Add Source Sans Pro through your approved font-hosting setup.
import 'ids-enterprise-wc';
import './style.css';
document.querySelector('#app').innerHTML=`<ids-container><main>
<h1>Maintenance request</h1><p>Local draft only; no work order is sent.</p>
<ids-input id="asset" label="Asset identifier" value="02006" readonly="true"></ids-input>
<ids-input id="summary" label="Work summary" validate="required" clearable="true"></ids-input>
<ids-input id="contact" label="Contact email" validate="email required"></ids-input>
<ids-button id="prepare" appearance="primary"><span>Prepare local draft</span></ids-button>
<ids-button id="reset" appearance="secondary"><span>Clear draft</span></ids-button>
<p id="message" role="status"></p><pre id="draft"></pre>
</main></ids-container>`;
await Promise.all(['ids-input','ids-button','ids-container'].map(n=>customElements.whenDefined(n)));
const summary=document.querySelector('#summary'),contact=document.querySelector('#contact');
const message=document.querySelector('#message'),draft=document.querySelector('#draft');
document.querySelector('#prepare').addEventListener('click',()=>{
 summary.checkValidation();contact.checkValidation();
 const title=summary.value.trim(),email=contact.value.trim();
 if(!title){message.textContent='Enter a work summary.';summary.focus();return;}
 if(!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)){message.textContent='Enter a complete contact email.';contact.focus();return;}
 draft.textContent=JSON.stringify({asset:'02006',summary:title,contact:email},null,2);
 message.textContent='Draft prepared in this page only. No request sent.';
});
function clearResult(){draft.textContent='';message.textContent='';}
summary.addEventListener('input',clearResult);contact.addEventListener('input',clearResult);
document.querySelector('#reset').addEventListener('click',()=>{summary.value='';contact.value='';clearResult();summary.focus();});

/* src/style.css — application layout using the loaded IDS token roles */
main{max-width:44rem;margin:auto;padding:var(--ids-space-md);color:var(--ids-color-foreground-default-default)}
ids-input{display:block;margin-bottom:var(--ids-space-sm)}
ids-button{margin-inline-end:var(--ids-space-xs)}
pre{white-space:pre-wrap;overflow-wrap:anywhere;background:var(--ids-color-accent-neutral-weakest);padding:var(--ids-space-sm)}

Справочник по коду

  • checkValidation() возвращает void; результат не интерпретируется как логическое значение.
  • Asset 02006 — это текст, поэтому начальный ноль сохраняется.
  • Подготовка предварительного просмотра меняет только локальное состояние страницы.

Внешний вид действия задан явно

Варианты компонентов для основных и второстепенных действий ясно обозначают главное действие в рабочем процессе.

html
<ids-button appearance="primary"><span>Prepare local draft</span></ids-button>
<ids-button appearance="secondary"><span>Clear draft</span></ids-button>

Справочник по коду

  • Для недоступного компонента используется disabled, а не только приглушённый стиль.
04

Настройка агента дизайн-система Infor

Отправная точка для реализации

Полный файл для Vite с нативной настройкой и таблицей стилей для #app. Версию пакета и методы проверили по опубликованному пакету; компиляция здесь не выполнялась. Подключите Source Sans Pro из одобренного источника шрифтов. Встроенный предварительный просмотр — независимая нативная реализация HTML.

javascript / css
// Vite vanilla project: npm install [email protected]
// src/main.js. Add Source Sans Pro through your approved font-hosting setup.
import 'ids-enterprise-wc';
import './style.css';
document.querySelector('#app').innerHTML=`<ids-container><main>
<h1>Maintenance request</h1><p>Local draft only; no work order is sent.</p>
<ids-input id="asset" label="Asset identifier" value="02006" readonly="true"></ids-input>
<ids-input id="summary" label="Work summary" validate="required" clearable="true"></ids-input>
<ids-input id="contact" label="Contact email" validate="email required"></ids-input>
<ids-button id="prepare" appearance="primary"><span>Prepare local draft</span></ids-button>
<ids-button id="reset" appearance="secondary"><span>Clear draft</span></ids-button>
<p id="message" role="status"></p><pre id="draft"></pre>
</main></ids-container>`;
await Promise.all(['ids-input','ids-button','ids-container'].map(n=>customElements.whenDefined(n)));
const summary=document.querySelector('#summary'),contact=document.querySelector('#contact');
const message=document.querySelector('#message'),draft=document.querySelector('#draft');
document.querySelector('#prepare').addEventListener('click',()=>{
 summary.checkValidation();contact.checkValidation();
 const title=summary.value.trim(),email=contact.value.trim();
 if(!title){message.textContent='Enter a work summary.';summary.focus();return;}
 if(!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)){message.textContent='Enter a complete contact email.';contact.focus();return;}
 draft.textContent=JSON.stringify({asset:'02006',summary:title,contact:email},null,2);
 message.textContent='Draft prepared in this page only. No request sent.';
});
function clearResult(){draft.textContent='';message.textContent='';}
summary.addEventListener('input',clearResult);contact.addEventListener('input',clearResult);
document.querySelector('#reset').addEventListener('click',()=>{summary.value='';contact.value='';clearResult();summary.focus();});

/* src/style.css — application layout using the loaded IDS token roles */
main{max-width:44rem;margin:auto;padding:var(--ids-space-md);color:var(--ids-color-foreground-default-default)}
ids-input{display:block;margin-bottom:var(--ids-space-sm)}
ids-button{margin-inline-end:var(--ids-space-xs)}
pre{white-space:pre-wrap;overflow-wrap:anywhere;background:var(--ids-color-accent-neutral-weakest);padding:var(--ids-space-sm)}

Запрос для вашего проекта

Промпт для AI-агента
Создайте черновик заявки на обслуживание Infor IDS, используя проверенные псевдонимы светлой темы и документированную структуру полей ввода и кнопок. Сохраните идентификатор оборудования в виде строки и сделайте его доступным только для чтения. Проверяйте редактируемые поля, удаляйте устаревший результат после изменений и отличайте локальный черновик от отправленного наряда на обслуживание. Не считайте, что checkValidation() возвращает логическое значение.
05

Источники и область применения дизайн-система Infor

Независимое руководство по OpenDesign. Оборудование и рабочий процесс вымышлены; данные никуда не отправляются. В нативном коде используется проверенный пакет версии 1.17.1, а значения токенов взяты из отдельного актуального снимка темы core/light.