@praxisui/core 9.0.0-beta.13 → 9.0.0-beta.14

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.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-06-22T22:56:44.148Z",
3
+ "generatedAt": "2026-06-24T01:01:47.814Z",
4
4
  "packageName": "@praxisui/core",
5
- "packageVersion": "9.0.0-beta.13",
5
+ "packageVersion": "9.0.0-beta.14",
6
6
  "sourceRegistry": "praxis-component-registry-ingestion",
7
7
  "sourceRegistryVersion": "1.0.0",
8
8
  "componentCount": 3,
@@ -2020,6 +2020,9 @@ class SchemaNormalizerService {
2020
2020
  if (ui.helpText !== undefined) {
2021
2021
  field.helpText = String(ui.helpText);
2022
2022
  }
2023
+ if (ui.tooltip !== undefined) {
2024
+ field.tooltip = String(ui.tooltip);
2025
+ }
2023
2026
  if (ui.hint !== undefined) {
2024
2027
  field.hint = ui.hint;
2025
2028
  }
@@ -9606,9 +9609,25 @@ function mapFieldDefinitionToMetadata(field) {
9606
9609
  metadata.maxLength = field.maxLength;
9607
9610
  if (field.pattern !== undefined)
9608
9611
  metadata.pattern = field.pattern;
9612
+ if (field.helpText !== undefined) {
9613
+ metadata.helpText = field.helpText;
9614
+ }
9609
9615
  if (field.hint || field.helpText) {
9610
9616
  metadata.hint = field.hint ?? field.helpText;
9611
9617
  }
9618
+ if (field.tooltipOnHover !== undefined) {
9619
+ metadata.tooltipOnHover = field.tooltipOnHover;
9620
+ const tooltip = field.tooltip ??
9621
+ (field.tooltipOnHover === true
9622
+ ? field.description ?? field.helpText ?? field.hint
9623
+ : undefined);
9624
+ if (tooltip !== undefined && tooltip !== null) {
9625
+ metadata.tooltip = String(tooltip);
9626
+ }
9627
+ }
9628
+ else if (field.tooltip !== undefined) {
9629
+ metadata.tooltip = String(field.tooltip);
9630
+ }
9612
9631
  if (field.hiddenCondition !== undefined) {
9613
9632
  metadata.hiddenCondition = field.hiddenCondition;
9614
9633
  }
@@ -16502,6 +16521,37 @@ function normalizeSelectLike(meta) {
16502
16521
  return m;
16503
16522
  }
16504
16523
 
16524
+ const SERVER_OWNED_FIELD_SEMANTIC_KEYS = [
16525
+ 'label',
16526
+ 'hint',
16527
+ 'helpText',
16528
+ 'description',
16529
+ 'tooltip',
16530
+ 'tooltipOnHover',
16531
+ 'icon',
16532
+ 'prefixIcon',
16533
+ 'suffixIcon',
16534
+ 'iconPosition',
16535
+ 'iconSize',
16536
+ 'iconColor',
16537
+ 'iconClass',
16538
+ 'iconStyle',
16539
+ 'iconFontSize',
16540
+ ];
16541
+ function applyServerOwnedFieldSemantics(merged, serverField) {
16542
+ const next = { ...merged };
16543
+ const server = serverField;
16544
+ for (const key of SERVER_OWNED_FIELD_SEMANTIC_KEYS) {
16545
+ if (server[key] === undefined) {
16546
+ delete next[key];
16547
+ }
16548
+ else {
16549
+ next[key] = server[key];
16550
+ }
16551
+ }
16552
+ return next;
16553
+ }
16554
+
16505
16555
  function createDefaultFormConfig() {
16506
16556
  const config = {
16507
16557
  sections: [
@@ -16664,7 +16714,7 @@ function syncWithServerMetadata(localConfig, serverMetadata) {
16664
16714
  toggleOptions: pick('toggleOptions'),
16665
16715
  nodes: pick('nodes'),
16666
16716
  };
16667
- mergedOverlapping.push(merged);
16717
+ mergedOverlapping.push(applyServerOwnedFieldSemantics(merged, serverField));
16668
16718
  // Track simple modifications for diagnostics
16669
16719
  ['label', 'required', 'maxLength', 'minLength', 'dataType', 'controlType'].forEach((prop) => {
16670
16720
  if (loc[prop] !== base[prop]) {
@@ -21304,6 +21354,13 @@ const FIELD_METADATA_CAPABILITIES = {
21304
21354
  description: 'Texto de ajuda exibido abaixo do campo.',
21305
21355
  intentExamples: ['colocar dica', 'ajuda no rodapé do campo'],
21306
21356
  },
21357
+ {
21358
+ path: 'helpText',
21359
+ category: 'identity',
21360
+ valueKind: 'string',
21361
+ description: 'Texto semântico de ajuda publicado pelo schema/DTO.',
21362
+ intentExamples: ['explicar regra de negócio do campo', 'ajuda vinda do backend'],
21363
+ },
21307
21364
  {
21308
21365
  path: 'tooltip',
21309
21366
  category: 'identity',
@@ -21311,6 +21368,13 @@ const FIELD_METADATA_CAPABILITIES = {
21311
21368
  description: 'Texto exibido ao passar o mouse.',
21312
21369
  intentExamples: ['adicionar tooltip'],
21313
21370
  },
21371
+ {
21372
+ path: 'tooltipOnHover',
21373
+ category: 'identity',
21374
+ valueKind: 'boolean',
21375
+ description: 'Habilita apresentação do tooltip no hover quando suportado pelo renderer.',
21376
+ intentExamples: ['mostrar tooltip ao passar o mouse', 'ativar dica no hover'],
21377
+ },
21314
21378
  {
21315
21379
  path: 'description',
21316
21380
  category: 'identity',
@@ -21522,6 +21586,34 @@ const FIELD_METADATA_CAPABILITIES = {
21522
21586
  description: 'Tamanho do ícone.',
21523
21587
  intentExamples: ['ícone pequeno', 'aumentar tamanho do ícone', 'ícone grande'],
21524
21588
  },
21589
+ {
21590
+ path: 'iconColor',
21591
+ category: 'appearance',
21592
+ valueKind: 'string',
21593
+ description: 'Cor semântica ou token de cor aplicado ao ícone principal.',
21594
+ intentExamples: ['ícone em cor primária', 'usar token do tema no ícone'],
21595
+ },
21596
+ {
21597
+ path: 'iconClass',
21598
+ category: 'appearance',
21599
+ valueKind: 'string',
21600
+ description: 'Classe CSS controlada pelo host para o ícone principal.',
21601
+ intentExamples: ['usar classe de ícone outlined', 'aplicar classe corporativa'],
21602
+ },
21603
+ {
21604
+ path: 'iconStyle',
21605
+ category: 'appearance',
21606
+ valueKind: 'string',
21607
+ description: 'Estilo visual semântico do ícone quando o renderer suportar variações.',
21608
+ intentExamples: ['usar ícone arredondado', 'aplicar estilo filled'],
21609
+ },
21610
+ {
21611
+ path: 'iconFontSize',
21612
+ category: 'appearance',
21613
+ valueKind: 'string',
21614
+ description: 'Tamanho tipográfico do ícone principal.',
21615
+ intentExamples: ['ícone com 18px', 'ajustar tamanho do ícone'],
21616
+ },
21525
21617
  // =============================================================================
21526
21618
  // MASK / FORMAT
21527
21619
  // =============================================================================
@@ -35543,15 +35635,9 @@ function applyLocalCustomizations$1(base, local) {
35543
35635
  // Server authority on identity/core props
35544
35636
  const authoritative = {
35545
35637
  name: base.name,
35546
- label: base.label,
35547
35638
  type: base.type,
35548
35639
  controlType: base.controlType,
35549
35640
  required: base.required,
35550
- hint: base.hint,
35551
- helpText: base.helpText,
35552
- description: base.description,
35553
- icon: base.icon,
35554
- iconPosition: base.iconPosition,
35555
35641
  endpoint: base.endpoint,
35556
35642
  resourcePath: base.resourcePath,
35557
35643
  optionSource: base.optionSource,
@@ -35587,12 +35673,13 @@ function applyLocalCustomizations$1(base, local) {
35587
35673
  ? serverBackedLocal.queryParams
35588
35674
  : base.queryParams,
35589
35675
  };
35590
- return {
35676
+ const merged = {
35591
35677
  ...base,
35592
35678
  ...serverBackedLocal,
35593
35679
  ...authoritative,
35594
35680
  ...preserved,
35595
35681
  };
35682
+ return applyServerOwnedFieldSemantics(merged, base);
35596
35683
  }
35597
35684
  function mergeServerVisibilityFlag(serverValue) {
35598
35685
  return serverValue === true ? true : undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@praxisui/core",
3
- "version": "9.0.0-beta.13",
3
+ "version": "9.0.0-beta.14",
4
4
  "description": "Core library for Praxis UI Workspace: types, tokens, services and utilities shared across @praxisui/* packages.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0",
@@ -3963,8 +3963,12 @@ interface FieldMetadata extends ComponentMetadata {
3963
3963
  placeholder?: string;
3964
3964
  /** Help text displayed below field */
3965
3965
  hint?: string;
3966
+ /** Domain help text emitted by backend schema metadata. */
3967
+ helpText?: string;
3966
3968
  /** Tooltip text on hover */
3967
3969
  tooltip?: string;
3970
+ /** Enables hover tooltip presentation when supported by the field renderer. */
3971
+ tooltipOnHover?: boolean;
3968
3972
  /** Semantic selection mode for boolean/single/multiple choice controls */
3969
3973
  selectionMode?: 'boolean' | 'single' | 'multiple';
3970
3974
  /** Visual variant used by controls with more than one supported presentation */
@@ -4004,6 +4008,10 @@ interface FieldMetadata extends ComponentMetadata {
4004
4008
  suffixIcon?: string;
4005
4009
  iconPosition?: 'start' | 'end';
4006
4010
  iconSize?: 'small' | 'medium' | 'large';
4011
+ iconColor?: string;
4012
+ iconClass?: string;
4013
+ iconStyle?: string;
4014
+ iconFontSize?: string | number;
4007
4015
  /** Tooltip for suffix icon (used for help actions) */
4008
4016
  suffixIconTooltip?: string;
4009
4017
  /** ARIA label for suffix icon when used as help */
@@ -4223,6 +4231,7 @@ interface FieldDefinition {
4223
4231
  helpText?: string;
4224
4232
  hint?: string;
4225
4233
  hiddenCondition?: JsonLogicExpression | null;
4234
+ tooltip?: string;
4226
4235
  tooltipOnHover?: boolean;
4227
4236
  icon?: string;
4228
4237
  iconPosition?: string;